diff --git a/lib/json_logic/operation.rb b/lib/json_logic/operation.rb index 5cec5b6..d1e3d66 100644 --- a/lib/json_logic/operation.rb +++ b/lib/json_logic/operation.rb @@ -79,10 +79,16 @@ class Operation end end, 'if' => ->(v, d) { - v.each_slice(2) do |condition, value| - return condition if value.nil? - return value if condition.truthy? + v.each_slice(2) do |condition_and_value| + # If this slice a single value? It's an else value only. + if condition_and_value.size == 1 + return condition_and_value.first + else + condition, value = condition_and_value + return value if condition.truthy? + end end + nil }, '==' => ->(v, d) { v[0].to_s == v[1].to_s }, '===' => ->(v, d) { v[0] == v[1] }, diff --git a/test/json_logic_test.rb b/test/json_logic_test.rb index 2f76271..6efc7c4 100644 --- a/test/json_logic_test.rb +++ b/test/json_logic_test.rb @@ -8,7 +8,7 @@ class JSONLogicTest < Minitest::Test test_suite_url = 'http://jsonlogic.com/tests.json' - tests = JSON.parse(open(test_suite_url).read) + tests = JSON.parse(URI.open(test_suite_url).read) count = 1 tests.each do |pattern| next unless pattern.is_a?(Array)