crazy_hash_filter 0.0.1 → 0.0.2
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.
- data/lib/crazy_hash_filter.rb +4 -0
- data/lib/crazy_hash_filter/version.rb +1 -1
- data/spec/crazy_hash_filter_spec.rb +42 -0
- metadata +2 -2
data/lib/crazy_hash_filter.rb
CHANGED
@@ -4,6 +4,10 @@ require "active_support/core_ext/hash/indifferent_access.rb"
|
|
4
4
|
module CrazyHashFilter
|
5
5
|
|
6
6
|
def self.process(hash, rules)
|
7
|
+
return nil if hash.nil?
|
8
|
+
|
9
|
+
raise "Is not a Hash" unless hash.is_a?(Hash)
|
10
|
+
|
7
11
|
rules = HashWithIndifferentAccess.new(rules || {}) unless rules.is_a?(HashWithIndifferentAccess)
|
8
12
|
child_rules = rules[:child_rules] || {}
|
9
13
|
result = {}
|
@@ -185,4 +185,46 @@ describe CrazyHashFilter do
|
|
185
185
|
result[:items].collect { |i| i[:id] }.should_not include(2)
|
186
186
|
end
|
187
187
|
|
188
|
+
it "should deal with nil values" do
|
189
|
+
sample = {
|
190
|
+
:code => 0,
|
191
|
+
:items => [
|
192
|
+
{ :id => 1,
|
193
|
+
:title => nil,
|
194
|
+
:thumbs => nil
|
195
|
+
},
|
196
|
+
{ :id => 2,
|
197
|
+
:title => 'Second item',
|
198
|
+
:thumbs => [
|
199
|
+
{ :code => '50', :url => 'http://some-url/2/50' },
|
200
|
+
{ :code => '100', :url => 'http://some-url/2/100' },
|
201
|
+
{ :code => '150', :url => 'http://some-url/2/150' }
|
202
|
+
]
|
203
|
+
},
|
204
|
+
]
|
205
|
+
}
|
206
|
+
|
207
|
+
rules = {
|
208
|
+
:select => [ :code, :items ],
|
209
|
+
|
210
|
+
:child_rules => {
|
211
|
+
:items => {
|
212
|
+
:select => [ :id, :thumbs ],
|
213
|
+
|
214
|
+
:child_rules => {
|
215
|
+
:thumbs => {
|
216
|
+
:conditions => {
|
217
|
+
:code => '50'
|
218
|
+
}
|
219
|
+
}
|
220
|
+
}
|
221
|
+
}
|
222
|
+
}
|
223
|
+
}
|
224
|
+
|
225
|
+
result = CrazyHashFilter.process(sample, rules)
|
226
|
+
|
227
|
+
result[:items].collect { |i| i[:id] }.should include(1)
|
228
|
+
end
|
229
|
+
|
188
230
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crazy_hash_filter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2012-08-
|
15
|
+
date: 2012-08-17 00:00:00.000000000 Z
|
16
16
|
dependencies: []
|
17
17
|
description: Hash filtering by advanced rules
|
18
18
|
email:
|