File tree 2 files changed +16
-6
lines changed
2 files changed +16
-6
lines changed Original file line number Diff line number Diff line change 4
4
5
5
module JSONLogic
6
6
def self . apply ( logic , data )
7
- return logic unless logic . is_a? ( Hash ) # pass-thru
8
- operator , values = logic . first # unwrap single-key hash
9
- values = [ values ] unless values . is_a? ( Array ) # syntactic sugar
10
- values . map! { |value | apply ( value , data ) } # recursion step
11
- values . flatten! ( 1 ) if values . size == 1 # [['A']] => ['A']
12
- Operation . perform ( operator , values , data || { } ) # perform operation
7
+ return logic unless logic . is_a? ( Hash ) # pass-thru
8
+ operator , values = logic . first # unwrap single-key hash
9
+ values = [ values ] unless values . is_a? ( Array ) # syntactic sugar
10
+ new_vals = values . map { |value | apply ( value , data ) } # recursion step
11
+ new_vals . flatten! ( 1 ) if new_vals . size == 1 # [['A']] => ['A']
12
+ Operation . perform ( operator , new_vals , data || { } ) # perform operation
13
+ end
14
+
15
+ def self . filter ( logic , data )
16
+ data . select { |d | apply ( logic , d ) }
13
17
end
14
18
end
15
19
Original file line number Diff line number Diff line change @@ -19,4 +19,10 @@ class JSONLogicTest < Minitest::Test
19
19
end
20
20
count += 1
21
21
end
22
+
23
+ def test_filter
24
+ filter = JSON . parse ( %Q|{">": [{"var": "id"}, 1]}| )
25
+ data = JSON . parse ( %Q|[{"id": 1},{"id": 2}]| )
26
+ assert_equal ( [ { 'id' => 2 } ] , JSONLogic . filter ( filter , data ) )
27
+ end
22
28
end
You can’t perform that action at this time.
0 commit comments