Skip to content

Commit 9f63f9d

Browse files
authored
Merge pull request #25 from Salman778/fix-integer-for-zero
fix: integer validation for zero
2 parents ad97d3f + b77bd22 commit 9f63f9d

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

lib/mini_defender/rules/integer.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,10 @@ def passes?(attribute, value, validator)
5454
end
5555

5656
# Remove leading zero so Integer will not treat it as octal
57+
# Handle leading zeros while preserving both + and - signs
5758
value = value
5859
.to_s
59-
.gsub(/^0+/, '')
60+
.gsub(/^([+-])?0+(?=\d)/, '\1')
6061

6162
if @mode == 'relaxed'
6263
value = normalize_digits(value)

test/rules/integer_test.rb

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,50 @@ def test_relaxed_passes_with_mixed_digits
6262
def test_passes_with_integer_with_leading_zero
6363
assert @rule_relax.passes?('amount', '08', nil)
6464
end
65+
66+
def test_passes_with_single_zero
67+
assert @rule.passes?('amount', '0', nil)
68+
assert_equal 0, @rule.coerce('0')
69+
end
70+
71+
def test_passes_with_multiple_zeros
72+
assert @rule.passes?('amount', '00', nil)
73+
assert_equal 0, @rule.coerce('00')
74+
end
75+
76+
# Test for leading zeros before other digits
77+
def test_removes_leading_zeros_before_digits
78+
assert @rule.passes?('amount', '01', nil)
79+
assert_equal 1, @rule.coerce('01')
80+
81+
assert @rule.passes?('amount', '0123', nil)
82+
assert_equal 123, @rule.coerce('0123')
83+
84+
assert @rule.passes?('amount', '00123', nil)
85+
assert_equal 123, @rule.coerce('00123')
86+
end
87+
88+
def test_handles_zeros_with_whitespace
89+
assert @rule.passes?('amount', ' 0 ', nil)
90+
assert_equal 0, @rule.coerce(' 0 ')
91+
92+
assert @rule.passes?('amount', ' 00 ', nil)
93+
assert_equal 0, @rule.coerce(' 00 ')
94+
end
95+
96+
def test_handles_negative_numbers_with_leading_zeros
97+
assert @rule.passes?('amount', '-001', nil)
98+
assert_equal(-1, @rule.coerce('-001'))
99+
100+
assert @rule.passes?('amount', '-00123', nil)
101+
assert_equal(-123, @rule.coerce('-00123'))
102+
end
103+
104+
def test_handles_positve_numbers_with_leading_zeros
105+
assert @rule.passes?('amount', '+001', nil)
106+
assert_equal(1, @rule.coerce('+001'))
107+
108+
assert @rule.passes?('amount', '+00123', nil)
109+
assert_equal(123, @rule.coerce('+00123'))
110+
end
65111
end

0 commit comments

Comments
 (0)