forked from faker-ruby/faker
/
number.rb
102 lines (79 loc) · 2.08 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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# frozen_string_literal: true
module Faker
class Number < Base
class << self
extend Gem::Deprecate
def number(digits = 10)
num = ''
if digits > 1
num = non_zero_digit
digits -= 1
end
num + (1..digits).collect { digit }.join
end
def leading_zero_number(digits = 10)
'0' + (2..digits).collect { digit }.join
end
def decimal_part(digits = 10)
num = ''
if digits > 1
num = non_zero_digit
digits -= 1
end
leading_zero_number(digits) + num
end
def decimal(l_digits = 5, r_digits = 2)
l_d = number(l_digits)
r_d = decimal_part(r_digits)
"#{l_d}.#{r_d}"
end
def non_zero_digit
rand(1..9).to_s
end
def digit
rand(10).to_s
end
def hexadecimal(digits = 6)
hex = ''
digits.times { hex += rand(15).to_s(16) }
hex
end
def normal(mean = 1, standard_deviation = 1)
theta = 2 * Math::PI * rand
rho = Math.sqrt(-2 * Math.log(1 - rand))
scale = standard_deviation * rho
mean + scale * Math.cos(theta)
end
def between(from = 1.00, to = 5000.00)
Faker::Base.rand_in_range(from, to)
end
def within(range = 1.00..5000.00)
between(range.min, range.max)
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
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
deprecate :decimal_part, nil, 2019, 06
deprecate :leading_zero_number, nil, 2019, 06
end
end
end