Skip to content

Commit 8b37a4e

Browse files
authored
Fix: bug when boolean false was extracted from var as nil (#11)
* fix: update .git_ignore and gems * fix: bug when boolean false was extracted from var as nil * fix: expect true explicitly * fix: add test for boolean validation
1 parent 4b71492 commit 8b37a4e

File tree

5 files changed

+24
-2
lines changed

5 files changed

+24
-2
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@
66
/pkg/
77
/spec/reports/
88
/tmp/
9+
/.idea/

Gemfile.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ GEM
8181

8282
PLATFORMS
8383
x86_64-darwin-22
84+
x86_64-darwin-23
8485
x86_64-linux
8586

8687
DEPENDENCIES

lib/json_logic/evaluator.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ def fetch_var_values(rules, var_name, values = [])
9696
end
9797

9898
if rules.is_a?(Hash)
99-
rules.each { |_, rule| fetch_var_values(rule, var_name, values) }
99+
rules.each_value { |rule| fetch_var_values(rule, var_name, values) }
100100
return values
101101
end
102102

@@ -134,7 +134,7 @@ def get_var_value(data, var_name, default_value = nil)
134134
rescue TypeError
135135
data = data[key.to_i]
136136
end
137-
data || default_value
137+
data.nil? ? default_value : data
138138
end
139139

140140
# This method retrieves the variable name from a hash of rules based on the given operator.

spec/json_logic/evaluator_spec.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,20 @@
191191

192192
it { is_expected.to be_nil }
193193
end
194+
195+
context 'when value is true' do
196+
let(:data) { { 'a' => true } }
197+
let(:var_name) { 'a' }
198+
199+
it { is_expected.to be(true) }
200+
end
201+
202+
context 'when value is false' do
203+
let(:data) { { 'a' => false } }
204+
let(:var_name) { 'a' }
205+
206+
it { is_expected.to be(false) }
207+
end
194208
end
195209

196210
context 'when data is array' do

spec/json_logic/validator_spec.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@
1616
it { is_expected.to be_truthy }
1717
end
1818

19+
context 'when valid operator with false' do
20+
let(:rules) { { 'and' => [{ '==' => [{ 'var' => 'green_card' }, false] }] } }
21+
22+
it { is_expected.to be_truthy }
23+
end
24+
1925
context 'when valid operator with hash' do
2026
let(:rules) { { '==' => [{ 'var' => 'temp' }, { 'x' => 'y' }] } }
2127

0 commit comments

Comments
 (0)