-
Notifications
You must be signed in to change notification settings - Fork 3.2k
/
number.rb
81 lines (67 loc) · 1.67 KB
/
number.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
module Faker
class Number < Base
class << self
def number(digits)
return nil if digits == 0
num = ''
if digits > 1
num = non_zero_digit
digits -= 1
end
(num + leading_zero_number(digits)).to_i
end
def decimal(l_digits, r_digits = 2)
integer_part = self.number(l_digits)
mantissa_part = self.decimal_part(r_digits)
"#{integer_part}.#{mantissa_part}".to_f
end
def hexadecimal(digits)
hex = ""
digits.times { hex += rand(15).to_s(16) }
hex
end
def between(from = 1.00, to = 5000.00)
Faker::Base::rand_in_range(from, to)
end
def positive(from = 1.00, to = 5000.00)
random_number = between(from, to)
greater_than_zero(random_number)
end
def negative(from = -5000.00, to = -1.00)
random_number = between(from, to)
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)
should_be(number, :>)
end
def less_than_zero(number)
should_be(number, :<)
end
def should_be(number, method_to_compare)
if number.send(method_to_compare, 0)
number
else
number * -1
end
end
end
end
end