From 51d2c2f5578521ccd8fe4311d2fba471ab9e0a87 Mon Sep 17 00:00:00 2001 From: Cyril Duchon-Doris Date: Tue, 25 Jul 2017 19:39:50 +0200 Subject: [PATCH 1/3] Add a keyword parameter to override relationships to be rendered for jsonapi errors This especially allows to render jsonapi errors without a jsonapi payload (such as GET requests) by passing `relationships: {}` --- lib/jsonapi_errorable/validatable.rb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/jsonapi_errorable/validatable.rb b/lib/jsonapi_errorable/validatable.rb index b820cc2..8c54eb2 100644 --- a/lib/jsonapi_errorable/validatable.rb +++ b/lib/jsonapi_errorable/validatable.rb @@ -1,8 +1,13 @@ module JsonapiErrorable module Validatable - def render_errors_for(record) - validation = Serializers::Validation.new \ - record, deserialized_params.relationships + # @param relationships: nil [Hash] list of relationships to be serialized as errors + # @param record [ ActiveModel ] Object that implements ActiveModel + def render_errors_for(record, relationships: nil) + validation = Serializers::Validation.new( + record, + relationships || deserialized_params.relationships + ) + render \ json: { errors: validation.errors }, From 71679dc2a6e8a5422d0134b5dbeca500a83cda3a Mon Sep 17 00:00:00 2001 From: Cyril Duchon-Doris Date: Tue, 25 Jul 2017 20:05:45 +0200 Subject: [PATCH 2/3] Update to match suggested changes --- lib/jsonapi_errorable/validatable.rb | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/jsonapi_errorable/validatable.rb b/lib/jsonapi_errorable/validatable.rb index 8c54eb2..7a9b3dd 100644 --- a/lib/jsonapi_errorable/validatable.rb +++ b/lib/jsonapi_errorable/validatable.rb @@ -1,13 +1,17 @@ module JsonapiErrorable module Validatable - # @param relationships: nil [Hash] list of relationships to be serialized as errors + # @param relationships: nil [ Hash or FalseClass ] list of relationships whose errors should be serialized + # Defaults to the deserialized data.relationships of Json:api Payload # @param record [ ActiveModel ] Object that implements ActiveModel def render_errors_for(record, relationships: nil) - validation = Serializers::Validation.new( - record, - relationships || deserialized_params.relationships - ) - + relationships = + if relationships == false + {} + else + relationships || deserialized_params.relationships + end + + validation = Serializers::Validation.new(record, relationships) render \ json: { errors: validation.errors }, From 129f7926e32ceec8f0c3bc242757e9bc4ddab3e0 Mon Sep 17 00:00:00 2001 From: Cyril Duchon-Doris Date: Wed, 26 Jul 2017 11:55:09 +0200 Subject: [PATCH 3/3] Switch back to previous implementation --- lib/jsonapi_errorable/validatable.rb | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/lib/jsonapi_errorable/validatable.rb b/lib/jsonapi_errorable/validatable.rb index 7a9b3dd..bacafdc 100644 --- a/lib/jsonapi_errorable/validatable.rb +++ b/lib/jsonapi_errorable/validatable.rb @@ -3,13 +3,8 @@ module Validatable # @param relationships: nil [ Hash or FalseClass ] list of relationships whose errors should be serialized # Defaults to the deserialized data.relationships of Json:api Payload # @param record [ ActiveModel ] Object that implements ActiveModel - def render_errors_for(record, relationships: nil) - relationships = - if relationships == false - {} - else - relationships || deserialized_params.relationships - end + def render_errors_for(record, relationships: {}) + relationships || deserialized_params.relationships validation = Serializers::Validation.new(record, relationships)