Skip to content

Commit daabb89

Browse files
committed
Merge pull request #1581 from remear/meta-blank-omit
Omit meta when blank
2 parents 8cd7f0f + e8286b6 commit daabb89

File tree

4 files changed

+102
-2
lines changed

4 files changed

+102
-2
lines changed

lib/active_model_serializers/adapter/base.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def root
4848
end
4949

5050
def include_meta(json)
51-
json[meta_key] = meta if meta
51+
json[meta_key] = meta unless meta.blank?
5252
json
5353
end
5454
end

lib/active_model_serializers/adapter/json_api.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ def resource_object_for(serializer)
320320
# :'git-ref' => 'abc123'
321321
# }
322322
meta = meta_for(serializer)
323-
resource_object[:meta] = meta unless meta.nil?
323+
resource_object[:meta] = meta unless meta.blank?
324324

325325
resource_object
326326
end

test/adapter/json_api/resource_meta_test.rb

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,20 @@ class MetaBlockPostSerializer < ActiveModel::Serializer
1717
end
1818
end
1919

20+
class MetaBlockPostBlankMetaSerializer < ActiveModel::Serializer
21+
attributes :id
22+
meta do
23+
{}
24+
end
25+
end
26+
27+
class MetaBlockPostEmptyStringSerializer < ActiveModel::Serializer
28+
attributes :id
29+
meta do
30+
''
31+
end
32+
end
33+
2034
def setup
2135
@post = Post.new(id: 1337, comments: [], author: nil)
2236
end
@@ -61,6 +75,24 @@ def test_meta_object_resource_in_array
6175
}
6276
assert_equal(expected, hash)
6377
end
78+
79+
def test_meta_object_blank_omitted
80+
hash = ActiveModel::SerializableResource.new(
81+
@post,
82+
serializer: MetaBlockPostBlankMetaSerializer,
83+
adapter: :json_api
84+
).serializable_hash
85+
refute hash[:data].key? :meta
86+
end
87+
88+
def test_meta_object_empty_string_omitted
89+
hash = ActiveModel::SerializableResource.new(
90+
@post,
91+
serializer: MetaBlockPostEmptyStringSerializer,
92+
adapter: :json_api
93+
).serializable_hash
94+
refute hash[:data].key? :meta
95+
end
6496
end
6597
end
6698
end

test/serializers/meta_test.rb

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,38 @@ def test_meta_is_present_with_root
2828
assert_equal(expected, actual)
2929
end
3030

31+
def test_meta_is_not_included_when_blank
32+
actual = ActiveModel::SerializableResource.new(
33+
@blog,
34+
adapter: :json,
35+
serializer: AlternateBlogSerializer,
36+
meta: {}
37+
).as_json
38+
expected = {
39+
blog: {
40+
id: 1,
41+
title: 'AMS Hints'
42+
}
43+
}
44+
assert_equal(expected, actual)
45+
end
46+
47+
def test_meta_is_not_included_when_empty_string
48+
actual = ActiveModel::SerializableResource.new(
49+
@blog,
50+
adapter: :json,
51+
serializer: AlternateBlogSerializer,
52+
meta: ''
53+
).as_json
54+
expected = {
55+
blog: {
56+
id: 1,
57+
title: 'AMS Hints'
58+
}
59+
}
60+
assert_equal(expected, actual)
61+
end
62+
3163
def test_meta_is_not_included_when_root_is_missing
3264
actual = ActiveModel::SerializableResource.new(
3365
@blog,
@@ -78,6 +110,42 @@ def test_meta_key_is_used_with_json_api
78110
assert_equal(expected, actual)
79111
end
80112

113+
def test_meta_key_is_not_present_when_blank_object_with_json_api
114+
actual = ActiveModel::SerializableResource.new(
115+
@blog,
116+
adapter: :json_api,
117+
serializer: AlternateBlogSerializer,
118+
meta: {},
119+
meta_key: 'haha_meta'
120+
).as_json
121+
expected = {
122+
data: {
123+
id: '1',
124+
type: 'blogs',
125+
attributes: { title: 'AMS Hints' }
126+
}
127+
}
128+
assert_equal(expected, actual)
129+
end
130+
131+
def test_meta_key_is_not_present_when_empty_string_with_json_api
132+
actual = ActiveModel::SerializableResource.new(
133+
@blog,
134+
adapter: :json_api,
135+
serializer: AlternateBlogSerializer,
136+
meta: '',
137+
meta_key: 'haha_meta'
138+
).as_json
139+
expected = {
140+
data: {
141+
id: '1',
142+
type: 'blogs',
143+
attributes: { title: 'AMS Hints' }
144+
}
145+
}
146+
assert_equal(expected, actual)
147+
end
148+
81149
def test_meta_is_not_present_on_arrays_without_root
82150
actual = ActiveModel::SerializableResource.new(
83151
[@blog],

0 commit comments

Comments
 (0)