restpack_serializer 0.6.6 → 0.6.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec99f158a9e7825b3134792a1ea5ba5efb2a961f
|
4
|
+
data.tar.gz: a33b39771c550f179826c344af688f5d9e84392b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6412ccee09177e52299f3b8bfbfcdefc5f541f18bb3e5ab95ef126ecb178fd8a7f8304e3ceda94c838d30904056727b9e9413b3175e7cfc437a8eb33214aacf7
|
7
|
+
data.tar.gz: 8c2f759aa5ca1fcf1fa4d927e4fb6c156fdabb0a66a1fbc4bce6f9683d944a861d1b2b79107ae9ca8a23e633a6953dc72f25a67cc7c3dbe35f23f7042262a44b
|
@@ -37,6 +37,7 @@ module RestPack
|
|
37
37
|
return model.map { |item| as_json(item, context) }
|
38
38
|
end
|
39
39
|
|
40
|
+
apply_whitelist_and_blacklist(context)
|
40
41
|
@model, @context = model, context
|
41
42
|
|
42
43
|
data = {}
|
@@ -72,6 +73,41 @@ module RestPack
|
|
72
73
|
data.merge!(custom) if custom
|
73
74
|
end
|
74
75
|
|
76
|
+
def apply_whitelist_and_blacklist(context)
|
77
|
+
blacklist = context[:attribute_blacklist]
|
78
|
+
whitelist = context[:attribute_whitelist]
|
79
|
+
|
80
|
+
if blacklist.present? && whitelist.present?
|
81
|
+
raise ArgumentError.new "the context can't define both an `attribute_whitelist` and an `attribute_blacklist`"
|
82
|
+
end
|
83
|
+
|
84
|
+
if blacklist.present?
|
85
|
+
blacklist = csv_to_symbol_array(blacklist)
|
86
|
+
self.class.serializable_attributes.each do |key, value|
|
87
|
+
if blacklist.include? key
|
88
|
+
context[value[:include_method_name]] = false
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
if whitelist.present?
|
94
|
+
whitelist = csv_to_symbol_array(whitelist)
|
95
|
+
self.class.serializable_attributes.each do |key, value|
|
96
|
+
unless whitelist.include? key
|
97
|
+
context[value[:include_method_name]] = false
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def csv_to_symbol_array(maybe_csv)
|
104
|
+
if maybe_csv.is_a? String
|
105
|
+
maybe_csv.split(',').map {|a| a.strip.to_sym}
|
106
|
+
else
|
107
|
+
maybe_csv
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
75
111
|
def add_links(model, data)
|
76
112
|
self.class.associations.each do |association|
|
77
113
|
data[:links] ||= {}
|
@@ -198,6 +198,44 @@ describe RestPack::Serializer do
|
|
198
198
|
]
|
199
199
|
}
|
200
200
|
end
|
201
|
+
|
202
|
+
it "excludes a blacklist of attributes if specified as an array" do
|
203
|
+
serializer.as_json(person, { attribute_blacklist: [:name, :description] }).should == {
|
204
|
+
id: '123',
|
205
|
+
href: '/people/123',
|
206
|
+
custom_key: 'custom value for model id 123'
|
207
|
+
}
|
208
|
+
end
|
209
|
+
|
210
|
+
it "excludes a blacklist of attributes if specified as a string" do
|
211
|
+
serializer.as_json(person, { attribute_blacklist: 'name, description' }).should == {
|
212
|
+
id: '123',
|
213
|
+
href: '/people/123',
|
214
|
+
custom_key: 'custom value for model id 123'
|
215
|
+
}
|
216
|
+
end
|
217
|
+
|
218
|
+
it "includes a whitelist of attributes if specified as an array" do
|
219
|
+
serializer.as_json(person, { attribute_whitelist: [:name, :description] }).should == {
|
220
|
+
name: 'Gavin',
|
221
|
+
description: 'This is person #123',
|
222
|
+
custom_key: 'custom value for model id 123'
|
223
|
+
}
|
224
|
+
end
|
225
|
+
|
226
|
+
it "includes a whitelist of attributes if specified as a string" do
|
227
|
+
serializer.as_json(person, { attribute_whitelist: 'name, description' }).should == {
|
228
|
+
name: 'Gavin',
|
229
|
+
description: 'This is person #123',
|
230
|
+
custom_key: 'custom value for model id 123'
|
231
|
+
}
|
232
|
+
end
|
233
|
+
|
234
|
+
it "raises an exception if both the whitelist and blacklist are provided" do
|
235
|
+
expect do
|
236
|
+
serializer.as_json(person, { attribute_whitelist: [:name], attribute_blacklist: [:id] })
|
237
|
+
end.to raise_error(ArgumentError, "the context can't define both an `attribute_whitelist` and an `attribute_blacklist`")
|
238
|
+
end
|
201
239
|
end
|
202
240
|
|
203
241
|
context "links" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: restpack_serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Joyce
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|