Skip to content

Commit 260166c

Browse files
pelargirstas
authored andcommitted
Add meta field to error serializer
Per the JSON:API spec, the meta field can optionally be included in error response objects. See https://jsonapi.org/format/#error-objects
1 parent 0e25319 commit 260166c

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

lib/jsonapi/error_serializer.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class ErrorSerializer
88
set_type :error
99

1010
# Object/Hash attribute helpers.
11-
[:status, :source, :title, :detail, :code].each do |attr_name|
11+
[:status, :source, :title, :detail, :code, :meta].each do |attr_name|
1212
attribute attr_name do |object|
1313
object.try(attr_name) || object.try(:fetch, attr_name, nil)
1414
end

spec/errors_spec.rb

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@
3838
'source' => { 'pointer' => '' },
3939
'title' => 'Unprocessable Content',
4040
'detail' => nil,
41-
'code' => nil
41+
'code' => nil,
42+
'meta' => nil
4243
}
4344
)
4445
end
@@ -65,7 +66,8 @@
6566
'source' => { 'pointer' => '/data/relationships/user' },
6667
'title' => 'Unprocessable Content',
6768
'detail' => expected_detail,
68-
'code' => 'blank'
69+
'code' => 'blank',
70+
'meta' => nil
6971
}
7072
)
7173
end
@@ -87,21 +89,24 @@
8789
'source' => { 'pointer' => '/data/attributes/title' },
8890
'title' => 'Unprocessable Content',
8991
'detail' => 'Title is invalid',
90-
'code' => 'invalid'
92+
'code' => 'invalid',
93+
'meta' => nil
9194
},
9295
{
9396
'status' => '422',
9497
'source' => { 'pointer' => '/data/attributes/title' },
9598
'title' => 'Unprocessable Content',
9699
'detail' => 'Title has typos',
97-
'code' => 'invalid'
100+
'code' => 'invalid',
101+
'meta' => nil
98102
},
99103
{
100104
'status' => '422',
101105
'source' => { 'pointer' => '/data/attributes/quantity' },
102106
'title' => 'Unprocessable Content',
103107
'detail' => 'Quantity must be less than 100',
104-
'code' => 'less_than'
108+
'code' => 'less_than',
109+
'meta' => nil
105110
}
106111
)
107112
end
@@ -123,7 +128,8 @@
123128
'source' => { 'pointer' => '' },
124129
'title' => 'Unprocessable Content',
125130
'detail' => 'Title has slurs',
126-
'code' => 'title_has_slurs'
131+
'code' => 'title_has_slurs',
132+
'meta' => nil
127133
}
128134
)
129135
end
@@ -146,7 +152,8 @@
146152
'source' => { 'pointer' => '/data/attributes/title' },
147153
'title' => 'Unprocessable Content',
148154
'detail' => nil,
149-
'code' => nil
155+
'code' => nil,
156+
'meta' => nil
150157
}
151158
)
152159
end
@@ -166,7 +173,8 @@
166173
'source' => nil,
167174
'title' => 'Not Found',
168175
'detail' => nil,
169-
'code' => nil
176+
'code' => nil,
177+
'meta' => nil
170178
}
171179
)
172180
end
@@ -185,7 +193,8 @@
185193
'source' => nil,
186194
'title' => 'Internal Server Error',
187195
'detail' => nil,
188-
'code' => nil
196+
'code' => nil,
197+
'meta' => nil
189198
}
190199
)
191200
end

0 commit comments

Comments
 (0)