From b4074b49ab4bd284b46c254b0ac0e032419c6e58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro?= Date: Wed, 14 Aug 2024 10:52:29 -0300 Subject: [PATCH] Add links attribute and gem setup fixes --- lib/jsonapi/active_model_error_serializer.rb | 4 ++ lib/jsonapi/error_serializer.rb | 2 +- spec/dummy.rb | 2 +- spec/errors_spec.rb | 41 ++++++++++++-------- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/lib/jsonapi/active_model_error_serializer.rb b/lib/jsonapi/active_model_error_serializer.rb index e46521b..16c4a2c 100644 --- a/lib/jsonapi/active_model_error_serializer.rb +++ b/lib/jsonapi/active_model_error_serializer.rb @@ -15,6 +15,10 @@ class ActiveModelErrorSerializer < ErrorSerializer object.type.to_s.delete("''").parameterize.tr('-', '_') end + attribute :links do + { "service-doc": 'https://example.com/docs' } + end + attribute :detail do |object, _params| object.full_message end diff --git a/lib/jsonapi/error_serializer.rb b/lib/jsonapi/error_serializer.rb index cb384fa..ea8f39f 100644 --- a/lib/jsonapi/error_serializer.rb +++ b/lib/jsonapi/error_serializer.rb @@ -8,7 +8,7 @@ class ErrorSerializer set_type :error # Object/Hash attribute helpers. - [:status, :source, :title, :detail, :code].each do |attr_name| + [:status, :source, :title, :detail, :code, :links].each do |attr_name| attribute attr_name do |object| object.try(attr_name) || object.try(:fetch, attr_name, nil) end diff --git a/spec/dummy.rb b/spec/dummy.rb index c2e32ef..97283b0 100644 --- a/spec/dummy.rb +++ b/spec/dummy.rb @@ -84,7 +84,7 @@ class UserSerializer end class Dummy < Rails::Application - secrets.secret_key_base = '_' + config.secret_key_base = '_' config.hosts << 'www.example.com' if config.respond_to?(:hosts) routes.draw do diff --git a/spec/errors_spec.rb b/spec/errors_spec.rb index a704a63..918fbee 100644 --- a/spec/errors_spec.rb +++ b/spec/errors_spec.rb @@ -36,9 +36,10 @@ { 'status' => '422', 'source' => { 'pointer' => '' }, - 'title' => 'Unprocessable Entity', + 'title' => match(/Unprocessable (Entity|Content)/), 'detail' => nil, - 'code' => nil + 'code' => nil, + 'links' => nil } ) end @@ -63,9 +64,10 @@ { 'status' => '422', 'source' => { 'pointer' => '/data/relationships/user' }, - 'title' => 'Unprocessable Entity', + 'title' => match(/Unprocessable (Entity|Content)/), 'detail' => expected_detail, - 'code' => 'blank' + 'code' => 'blank', + 'links' => { 'service-doc' => 'https://example.com/docs' } } ) end @@ -85,23 +87,26 @@ { 'status' => '422', 'source' => { 'pointer' => '/data/attributes/title' }, - 'title' => 'Unprocessable Entity', + 'title' => match(/Unprocessable (Entity|Content)/), 'detail' => 'Title is invalid', - 'code' => 'invalid' + 'code' => 'invalid', + 'links' => { 'service-doc' => 'https://example.com/docs' } }, { 'status' => '422', 'source' => { 'pointer' => '/data/attributes/title' }, - 'title' => 'Unprocessable Entity', + 'title' => match(/Unprocessable (Entity|Content)/), 'detail' => 'Title has typos', - 'code' => 'invalid' + 'code' => 'invalid', + 'links' => { 'service-doc' => 'https://example.com/docs' } }, { 'status' => '422', 'source' => { 'pointer' => '/data/attributes/quantity' }, - 'title' => 'Unprocessable Entity', + 'title' => match(/Unprocessable (Entity|Content)/), 'detail' => 'Quantity must be less than 100', - 'code' => 'less_than' + 'code' => 'less_than', + 'links' => { 'service-doc' => 'https://example.com/docs' } } ) end @@ -121,9 +126,10 @@ { 'status' => '422', 'source' => { 'pointer' => '' }, - 'title' => 'Unprocessable Entity', + 'title' => match(/Unprocessable (Entity|Content)/), 'detail' => 'Title has slurs', - 'code' => 'title_has_slurs' + 'code' => 'title_has_slurs', + 'links' => { 'service-doc' => 'https://example.com/docs' } } ) end @@ -144,9 +150,10 @@ { 'status' => '422', 'source' => { 'pointer' => '/data/attributes/title' }, - 'title' => 'Unprocessable Entity', + 'title' => match(/Unprocessable (Entity|Content)/), 'detail' => nil, - 'code' => nil + 'code' => nil, + 'links' => nil } ) end @@ -166,7 +173,8 @@ 'source' => nil, 'title' => 'Not Found', 'detail' => nil, - 'code' => nil + 'code' => nil, + 'links' => nil } ) end @@ -185,7 +193,8 @@ 'source' => nil, 'title' => 'Internal Server Error', 'detail' => nil, - 'code' => nil + 'code' => nil, + 'links' => nil } ) end