diff --git a/lib/json_logic/operation.rb b/lib/json_logic/operation.rb index 93a9728..4127389 100644 --- a/lib/json_logic/operation.rb +++ b/lib/json_logic/operation.rb @@ -96,7 +96,10 @@ class Operation '%' => ->(v, d) { v.map(&:to_i).reduce(:%) }, '^' => ->(v, d) { v.map(&:to_f).reduce(:**) }, 'merge' => ->(v, d) { v.flatten }, - 'in' => ->(v, d) { interpolated_block(v[1], d).include? v[0] }, + 'in' => ->(v, d) do + result = interpolated_block(v[1], d)&.include? v[0] + result.nil? ? false : result + end, 'cat' => ->(v, d) { v.map(&:to_s).join }, 'log' => ->(v, d) { puts v } } diff --git a/test/json_logic_test.rb b/test/json_logic_test.rb index 75a23b7..0b05582 100644 --- a/test/json_logic_test.rb +++ b/test/json_logic_test.rb @@ -142,4 +142,11 @@ def test_uses_data_missing assert_equal ["y"], JSONLogic.apply({ "missing": [vars] }, provided_data_missing_y) assert_equal ["x"], JSONLogic.apply({ "missing": [vars] }, provided_data_missing_x) end + + def test_in_with_non_array + logic = { "in" => ["searchable_elem", { "var" => "non_array" }] } + + refute JSONLogic.apply(logic, { "non_array" => nil }) + refute JSONLogic.apply(logic, nil) + end end