File tree Expand file tree Collapse file tree 4 files changed +19
-15
lines changed Expand file tree Collapse file tree 4 files changed +19
-15
lines changed Original file line number Diff line number Diff line change 33require 'jsonapi_errorable/version'
44require 'jsonapi_errorable/exception_handler'
55require 'jsonapi_errorable/validatable'
6- require 'jsonapi_errorable/serializers/serializable_validation '
6+ require 'jsonapi_errorable/serializers/validation '
77
88module JsonapiErrorable
99 def self . included ( klass )
Original file line number Diff line number Diff line change 11module JsonapiErrorable
22 module Serializers
3- class SerializableValidation < JSONAPI :: Serializable :: Resource
4- type :validation_errors
3+ class Validation
4+ attr_reader :object
55
6- attribute :errors do
7- @object . errors . to_hash . map do |attribute , messages |
6+ def initialize ( object )
7+ @object = object
8+ end
9+
10+ def errors
11+ object . errors . to_hash . map do |attribute , messages |
812 messages . map do |message |
913 {
1014 code : 'unprocessable_entity' ,
1115 status : '422' ,
1216 title : 'Validation Error' ,
1317 detail : "#{ attribute . capitalize } #{ message } " ,
14- source : { pointer : pointer_for ( @ object, attribute ) } ,
18+ source : { pointer : pointer_for ( object , attribute ) } ,
1519 meta : { attribute : attribute , message : message }
1620 }
1721 end
@@ -21,12 +25,12 @@ class SerializableValidation < JSONAPI::Serializable::Resource
2125 def relationship? ( name )
2226 return false unless activerecord?
2327
24- relation_names = @ object. class . reflect_on_all_associations . map ( &:name )
28+ relation_names = object . class . reflect_on_all_associations . map ( &:name )
2529 relation_names . include? ( name )
2630 end
2731
2832 def attribute? ( name )
29- @ object. respond_to? ( name )
33+ object . respond_to? ( name )
3034 end
3135
3236 private
Original file line number Diff line number Diff line change 11module JsonapiErrorable
22 module Validatable
33 def render_errors_for ( record )
4+ validation = Serializers ::Validation . new ( record )
5+
46 render \
5- json : record ,
6- status : :unprocessable_entity ,
7- serializer : Serializers ::SerializableValidation ,
8- adapter : :attributes
7+ json : validation . errors ,
8+ status : :unprocessable_entity
99 end
1010 end
1111end
Original file line number Diff line number Diff line change 11require 'spec_helper'
22
3- RSpec . describe JsonapiErrorable ::Serializers ::SerializableValidation do
3+ RSpec . describe JsonapiErrorable ::Serializers ::Validation do
44 let ( :errors_hash ) { { username : [ "can't be blank" ] } }
55
66 let ( :object ) { double ( id : 123 ) . as_null_object }
7- let ( :instance ) { described_class . new ( object : object ) }
7+ let ( :instance ) { described_class . new ( object ) }
88
99 before do
1010 allow ( instance ) . to receive ( :activerecord? ) { true }
1515 end
1616
1717 describe '#errors' do
18- subject { instance . as_jsonapi [ :attributes ] [ : errors] }
18+ subject { instance . errors }
1919
2020 before do
2121 allow ( object ) . to receive ( :respond_to? ) . with ( :username ) { true }
You can’t perform that action at this time.
0 commit comments