Skip to content

Commit

Permalink
Make Faker::Number return integers and floats instead of strings
Browse files Browse the repository at this point in the history
  • Loading branch information
tejasbubane committed Sep 3, 2016
1 parent c9152c0 commit 38fa623
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 42 deletions.
9 changes: 5 additions & 4 deletions README.md
Expand Up @@ -417,12 +417,13 @@ Faker::Avatar.image("my-own-slug", "50x50", "bmp", "set1", "bg1") #=> "https://r
```ruby
# Required parameter: digits
Faker::Number.number(10) #=> "1968353479"
Faker::Number.number(10) #=> 1968353479
# Required parameter: l_digits
Faker::Number.decimal(2) #=> "11.88"
Faker::Number.decimal(2) #=> 11.88
Faker::Number.decimal(2, 3) #=> "18.843"
# Optional parameter: r_digits
Faker::Number.decimal(2, 3) #=> 18.843
# Required parameter: digits
Faker::Number.hexadecimal(3) #=> "e74"
Expand All @@ -433,7 +434,7 @@ Faker::Number.positive #=> 235.59238499107653
Faker::Number.negative #=> -4480.042585669558
Faker::Number.digit #=> "1"
Faker::Number.digit #=> 1
```
Expand Down
2 changes: 1 addition & 1 deletion lib/faker/code.rb
Expand Up @@ -22,7 +22,7 @@ def ean(base = 13)
end

def rut
value = Number.number(8)
value = Number.number(8).to_s
vd = rut_verificator_digit(value)
value << "-#{vd}"
end
Expand Down
50 changes: 26 additions & 24 deletions lib/faker/number.rb
Expand Up @@ -2,39 +2,20 @@ module Faker
class Number < Base
class << self
def number(digits)
num = ''
if digits > 1
num = non_zero_digit
digits -= 1
end
num + leading_zero_number(digits)
end

def leading_zero_number(digits)
(1..digits).collect {digit}.join
end
return nil if digits == 0

def decimal_part digits
num = ''
if digits > 1
num = non_zero_digit
digits -= 1
end
leading_zero_number(digits) + num
(num + leading_zero_number(digits)).to_i
end

def decimal(l_digits, r_digits = 2)
l_d = self.number(l_digits)
r_d = self.decimal_part(r_digits)
"#{l_d}.#{r_d}"
end

def non_zero_digit
( rand(9) + 1 ).to_s
end

def digit
rand(10).to_s
integer_part = self.number(l_digits)
mantissa_part = self.decimal_part(r_digits)
"#{integer_part}.#{mantissa_part}".to_f
end

def hexadecimal(digits)
Expand All @@ -57,6 +38,27 @@ def negative(from = -5000.00, to = -1.00)
less_than_zero(random_number)
end

def digit
rand(10)
end

def decimal_part(digits)
num = ''
if digits > 1
num = non_zero_digit
digits -= 1
end
leading_zero_number(digits) + num
end

def non_zero_digit
(rand(9) + 1).to_s
end

def leading_zero_number(digits)
(1..digits).collect {digit.to_s}.join
end

private

def greater_than_zero(number)
Expand Down
26 changes: 13 additions & 13 deletions test/test_faker_number.rb
Expand Up @@ -7,26 +7,26 @@ def setup
end

def test_number
assert @tester.number(10).match(/[0-9]{10}/)
assert @tester.number(10).to_s.match(/[0-9]{10}/)

10.times do |digits|
digits += 1
assert @tester.number(digits).match(/^[0-9]{#{digits}}$/)
assert @tester.number(digits).to_s.match(/^[0-9]{#{digits}}$/)
end

assert @tester.number(10).length == 10
assert @tester.number(1).length == 1
assert @tester.number(0) == ""
assert @tester.number(10).to_s.length == 10
assert @tester.number(1).to_s.length == 1
assert @tester.number(0) == nil
end

def test_decimal
assert @tester.decimal(2).match(/[0-9]{2}\.[0-9]{2}/)
assert @tester.decimal(4, 5).match(/[0-9]{4}\.[0-9]{5}/)
assert @tester.decimal(2).to_s.match(/[0-9]{2}\.[0-9]{2}/)
assert @tester.decimal(4, 5).to_s.match(/[0-9]{4}\.[0-9]{5}/)
end

def test_digit
assert @tester.digit.match(/[0-9]{1}/)
assert (1..1000).collect {|i| @tester.digit == "9"}.include?(true)
assert @tester.digit.to_s.match(/[0-9]{1}/)
assert (1..1000).collect { |i| @tester.digit == 9 }.include?(true)
end

def test_even_distribution
Expand Down Expand Up @@ -93,14 +93,14 @@ def test_hexadecimal

def test_insignificant_zero
@tester.stub :digit, 0 do
assert_equal '0', @tester.number(1)
assert_equal 0, @tester.number(1)
100.times do
assert_match (/^[1-9]0/), @tester.number(2)
assert_match (/^[1-9]0/), @tester.number(2).to_s
end

assert_equal '0.0', @tester.decimal(1,1)
assert_equal 0.0, @tester.decimal(1, 1)
100.times do
assert_match (/^0\.0[1-9]/), @tester.decimal(1,2)
assert_match (/^0\.0[1-9]/), @tester.decimal(1,2).to_s
end
end
end
Expand Down

0 comments on commit 38fa623

Please sign in to comment.