faker 2.10.2 → 2.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +323 -0
- data/README.md +27 -2
- data/lib/faker.rb +57 -25
- data/lib/faker/blockchain/aeternity.rb +4 -4
- data/lib/faker/books/dune.rb +15 -2
- data/lib/faker/books/lovecraft.rb +8 -4
- data/lib/faker/default/address.rb +35 -5
- data/lib/faker/default/bank.rb +80 -3
- data/lib/faker/default/barcode.rb +154 -0
- data/lib/faker/default/beer.rb +3 -3
- data/lib/faker/default/blood.rb +48 -0
- data/lib/faker/default/business.rb +1 -1
- data/lib/faker/default/camera.rb +46 -0
- data/lib/faker/default/cannabis.rb +80 -0
- data/lib/faker/default/chile_rut.rb +47 -3
- data/lib/faker/default/code.rb +98 -17
- data/lib/faker/default/commerce.rb +74 -11
- data/lib/faker/default/company.rb +78 -11
- data/lib/faker/default/compass.rb +135 -0
- data/lib/faker/default/computer.rb +63 -0
- data/lib/faker/default/construction.rb +54 -0
- data/lib/faker/default/cosmere.rb +90 -0
- data/lib/faker/default/crypto_coin.rb +45 -0
- data/lib/faker/default/date.rb +16 -12
- data/lib/faker/default/driving_licence.rb +65 -0
- data/lib/faker/default/drone.rb +332 -0
- data/lib/faker/default/faker_adjective.rb +35 -0
- data/lib/faker/default/file.rb +49 -0
- data/lib/faker/default/finance.rb +45 -0
- data/lib/faker/default/food.rb +1 -1
- data/lib/faker/default/funny_name.rb +45 -0
- data/lib/faker/default/gender.rb +1 -1
- data/lib/faker/default/hipster.rb +101 -4
- data/lib/faker/default/id_number.rb +88 -2
- data/lib/faker/default/internet.rb +68 -10
- data/lib/faker/default/internet_http.rb +48 -0
- data/lib/faker/default/invoice.rb +33 -6
- data/lib/faker/default/json.rb +59 -4
- data/lib/faker/default/lorem.rb +2 -2
- data/lib/faker/default/lorem_flickr.rb +65 -0
- data/lib/faker/default/lorem_pixel.rb +22 -0
- data/lib/faker/default/markdown.rb +89 -0
- data/lib/faker/default/measurement.rb +93 -2
- data/lib/faker/default/military.rb +26 -0
- data/lib/faker/default/mountain.rb +33 -0
- data/lib/faker/default/name.rb +98 -0
- data/lib/faker/default/nhs.rb +19 -0
- data/lib/faker/default/number.rb +6 -8
- data/lib/faker/default/omniauth.rb +107 -52
- data/lib/faker/default/phone_number.rb +88 -5
- data/lib/faker/default/placeholdit.rb +21 -0
- data/lib/faker/default/relationship.rb +1 -1
- data/lib/faker/default/slack_emoji.rb +81 -0
- data/lib/faker/default/south_africa.rb +90 -0
- data/lib/faker/default/space.rb +1 -1
- data/lib/faker/default/string.rb +19 -3
- data/lib/faker/default/stripe.rb +64 -3
- data/lib/faker/default/twitter.rb +35 -0
- data/lib/faker/default/types.rb +80 -0
- data/lib/faker/default/university.rb +45 -0
- data/lib/faker/default/vehicle.rb +184 -4
- data/lib/faker/default/verb.rb +45 -0
- data/lib/faker/default/world_cup.rb +4 -4
- data/lib/faker/fantasy/tolkien.rb +67 -0
- data/lib/faker/games/clash_of_clans.rb +48 -0
- data/lib/faker/games/control.rb +113 -0
- data/lib/faker/games/dnd.rb +136 -0
- data/lib/faker/games/elder_scrolls.rb +26 -0
- data/lib/faker/games/heroes.rb +13 -0
- data/lib/faker/games/heroes_of_the_storm.rb +16 -5
- data/lib/faker/games/minecraft.rb +113 -0
- data/lib/faker/games/street_fighter.rb +61 -0
- data/lib/faker/games/super_mario.rb +48 -0
- data/lib/faker/games/warhammer_fantasy.rb +74 -0
- data/lib/faker/games/world_of_warcraft.rb +26 -1
- data/lib/faker/japanese_media/conan.rb +48 -0
- data/lib/faker/japanese_media/doraemon.rb +48 -0
- data/lib/faker/japanese_media/dragon_ball.rb +26 -0
- data/lib/faker/japanese_media/naruto.rb +61 -0
- data/lib/faker/japanese_media/studio_ghibli.rb +48 -0
- data/lib/faker/movies/departed.rb +49 -0
- data/lib/faker/movies/hobbit.rb +4 -4
- data/lib/faker/movies/how_to_train_your_dragon.rb +48 -0
- data/lib/faker/movies/lord_of_the_rings.rb +3 -3
- data/lib/faker/movies/movie.rb +13 -0
- data/lib/faker/movies/room.rb +63 -0
- data/lib/faker/movies/star_wars.rb +2 -2
- data/lib/faker/music/hiphop.rb +48 -0
- data/lib/faker/music/opera.rb +237 -1
- data/lib/faker/music/pearl_jam.rb +50 -0
- data/lib/faker/music/phish.rb +27 -1
- data/lib/faker/music/prince.rb +64 -0
- data/lib/faker/music/rush.rb +37 -0
- data/lib/faker/music/show.rb +49 -0
- data/lib/faker/quotes/chiquito.rb +80 -0
- data/lib/faker/quotes/quote.rb +80 -1
- data/lib/faker/quotes/rajnikanth.rb +26 -0
- data/lib/faker/quotes/shakespeare.rb +36 -0
- data/lib/faker/sports/volleyball.rb +74 -0
- data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +13 -0
- data/lib/faker/tv_shows/big_bang_theory.rb +37 -0
- data/lib/faker/tv_shows/buffy.rb +17 -4
- data/lib/faker/tv_shows/dr_who.rb +1 -1
- data/lib/faker/tv_shows/final_space.rb +51 -0
- data/lib/faker/tv_shows/futurama.rb +65 -0
- data/lib/faker/tv_shows/simpsons.rb +14 -0
- data/lib/faker/tv_shows/suits.rb +37 -0
- data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +17 -4
- data/lib/faker/version.rb +1 -1
- data/lib/helpers/base58.rb +1 -1
- data/lib/helpers/char.rb +22 -27
- data/lib/helpers/unique_generator.rb +3 -2
- data/lib/locales/de-AT.yml +4 -2
- data/lib/locales/de-CH.yml +1696 -1
- data/lib/locales/de.yml +4 -2
- data/lib/locales/en-AU.yml +50 -10
- data/lib/locales/en-CA.yml +2 -0
- data/lib/locales/en-GB.yml +1 -1
- data/lib/locales/en-IND.yml +2 -1
- data/lib/locales/en-MS.yml +2 -1
- data/lib/locales/en-NEP.yml +4 -1
- data/lib/locales/en-NZ.yml +3 -1
- data/lib/locales/en-PAK.yml +2 -1
- data/lib/locales/en-SG.yml +2 -1
- data/lib/locales/en-US.yml +36 -10
- data/lib/locales/en-au-ocker.yml +2 -1
- data/lib/locales/en.yml +0 -3
- data/lib/locales/en/address.yml +2 -0
- data/lib/locales/en/adjective.yml +179 -0
- data/lib/locales/en/animal.yml +1 -1
- data/lib/locales/en/aqua_teen_hunger_force.yml +33 -1
- data/lib/locales/en/bank.yml +1 -1
- data/lib/locales/en/barcode.yml +24 -0
- data/lib/locales/en/big_bang_theory.yml +38 -0
- data/lib/locales/en/blood.yml +13 -0
- data/lib/locales/en/buffy.yml +1 -1
- data/lib/locales/en/camera.yml +611 -0
- data/lib/locales/en/chiquito.yml +64 -0
- data/lib/locales/en/clash_of_clan.yml +101 -0
- data/lib/locales/en/company.yml +2 -2
- data/lib/locales/en/computer.yml +36 -0
- data/lib/locales/en/conan.yml +171 -0
- data/lib/locales/en/control.yml +247 -0
- data/lib/locales/en/demographic.yml +218 -5
- data/lib/locales/en/departed.yml +50 -0
- data/lib/locales/en/dnd.yml +451 -0
- data/lib/locales/en/doraemon.yml +286 -0
- data/lib/locales/en/dota.yml +531 -63
- data/lib/locales/en/dragon_ball.yml +243 -1
- data/lib/locales/en/driving_license.yml +181 -0
- data/lib/locales/en/drone.yml +95 -0
- data/lib/locales/en/dune.yml +401 -131
- data/lib/locales/en/elder_scrolls.yml +583 -9
- data/lib/locales/en/fallout.yml +311 -133
- data/lib/locales/en/final_space.yml +37 -0
- data/lib/locales/en/finance.yml +53 -0
- data/lib/locales/en/fresh_prince_of_bel_air.yml +1 -1
- data/lib/locales/en/futurama.yml +344 -0
- data/lib/locales/en/half_life.yml +84 -3
- data/lib/locales/en/heroes.yml +408 -3
- data/lib/locales/en/heroes_of_the_storm.yml +131 -4
- data/lib/locales/en/house.yml +1 -1
- data/lib/locales/en/how_to_train_your_dragon.yml +174 -0
- data/lib/locales/en/jack_handey.yml +54 -0
- data/lib/locales/en/league_of_legends.yml +285 -6
- data/lib/locales/en/military.yml +179 -5
- data/lib/locales/en/minecraft.yml +663 -0
- data/lib/locales/en/mountain.yml +158 -0
- data/lib/locales/en/movie.yml +192 -1
- data/lib/locales/en/music.yml +451 -29
- data/lib/locales/en/myst.yml +87 -31
- data/lib/locales/en/name.yml +6 -5
- data/lib/locales/en/naruto.yml +231 -0
- data/lib/locales/en/one_piece.yml +2 -2
- data/lib/locales/en/opera.yml +168 -0
- data/lib/locales/en/overwatch.yml +2650 -2622
- data/lib/locales/en/pearl_jam.yml +213 -0
- data/lib/locales/en/phish.yml +392 -1
- data/lib/locales/en/pokemon.yml +417 -4
- data/lib/locales/en/prince.yml +227 -0
- data/lib/locales/en/quote.yml +692 -163
- data/lib/locales/en/rajnikanth.yml +77 -0
- data/lib/locales/en/room.yml +68 -0
- data/lib/locales/en/rush.yml +32 -0
- data/lib/locales/en/show.yml +597 -0
- data/lib/locales/en/simpsons.yml +668 -0
- data/lib/locales/en/source.yml +30 -0
- data/lib/locales/en/star_trek.yml +1 -1
- data/lib/locales/en/star_wars.yml +568 -220
- data/lib/locales/en/street_fighter.yml +1524 -0
- data/lib/locales/en/studio_ghibli.yml +107 -0
- data/lib/locales/en/suits.yml +45 -0
- data/lib/locales/en/super_mario.yml +58 -0
- data/lib/locales/en/super_smash_bros.yml +16 -4
- data/lib/locales/en/tolkien.yml +2453 -0
- data/lib/locales/en/volleyball.yml +501 -0
- data/lib/locales/en/warhammer_fantasy.yml +582 -0
- data/lib/locales/en/witcher.yml +389 -7
- data/lib/locales/en/world_of_warcraft.yml +122 -4
- data/lib/locales/en/zelda.yml +962 -4
- data/lib/locales/es.yml +56 -0
- data/lib/locales/fi-FI.yml +1 -1
- data/lib/locales/fr-CA.yml +21 -5
- data/lib/locales/fr-CH.yml +2 -2
- data/lib/locales/fr.yml +8 -2
- data/lib/locales/id.yml +2 -1
- data/lib/locales/it.yml +2 -1
- data/lib/locales/ja.yml +5 -1
- data/lib/locales/ko.yml +94 -2
- data/lib/locales/nb-NO.yml +4 -2
- data/lib/locales/pt-BR.yml +2 -1
- data/lib/locales/pt.yml +3 -1
- data/lib/locales/ru.yml +3 -1
- data/lib/locales/sk.yml +4 -2
- data/lib/locales/uk.yml +2 -0
- metadata +89 -21
- data/lib/locales/en/hobbit.yml +0 -19
- data/lib/locales/en/lord_of_the_rings.yml +0 -6
data/lib/faker/default/code.rb
CHANGED
@@ -4,32 +4,76 @@ module Faker
|
|
4
4
|
class Code < Base
|
5
5
|
flexible :code
|
6
6
|
class << self
|
7
|
-
|
8
|
-
#
|
7
|
+
##
|
8
|
+
# Produces a random NPI (National Provider Identifer) code.
|
9
|
+
#
|
10
|
+
# @return [String]
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# Faker::Code.npi #=> "9804062802"
|
14
|
+
#
|
15
|
+
# @faker.version 1.9.4
|
9
16
|
def npi
|
10
17
|
rand(10**10).to_s.rjust(10, '0')
|
11
18
|
end
|
12
19
|
|
13
|
-
|
14
|
-
#
|
20
|
+
##
|
21
|
+
# Produces a random ISBN (International Standard Book Number) code.
|
22
|
+
#
|
23
|
+
# @param base [Integer] the length of the code to generate (either 10 or 13)
|
24
|
+
# @return [String]
|
25
|
+
#
|
26
|
+
# @example
|
27
|
+
# Faker::Code.isbn(base: 13) #=> "896579606969-8"
|
28
|
+
# @example
|
29
|
+
# Faker::Code.isbn #=> "170366802-2"
|
30
|
+
#
|
31
|
+
# @faker.version 2.2.0
|
15
32
|
def isbn(legacy_base = NOT_GIVEN, base: 10)
|
16
33
|
warn_for_deprecated_arguments do |keywords|
|
17
34
|
keywords << :base if legacy_base != NOT_GIVEN
|
18
35
|
end
|
19
36
|
|
20
|
-
base
|
37
|
+
case base
|
38
|
+
when 10 then generate_base10_isbn
|
39
|
+
when 13 then generate_base13_isbn
|
40
|
+
else raise ArgumentError, 'base must be 10 or 13'
|
41
|
+
end
|
21
42
|
end
|
22
43
|
|
23
|
-
|
24
|
-
#
|
44
|
+
##
|
45
|
+
# Produces a random EAN (European Article Number) code.
|
46
|
+
#
|
47
|
+
# @param base [Integer] the length of the code to generate (either 8 or 13)
|
48
|
+
# @return [String]
|
49
|
+
#
|
50
|
+
# @example
|
51
|
+
# Faker::Code.ean(base: 8) #=> "36941070"
|
52
|
+
# @example
|
53
|
+
# Faker::Code.ean #=> "9941880131907"
|
54
|
+
#
|
55
|
+
# @faker.version 2.2.0
|
25
56
|
def ean(legacy_base = NOT_GIVEN, base: 13)
|
26
57
|
warn_for_deprecated_arguments do |keywords|
|
27
58
|
keywords << :base if legacy_base != NOT_GIVEN
|
28
59
|
end
|
29
60
|
|
30
|
-
base
|
61
|
+
case base
|
62
|
+
when 8 then generate_base8_ean
|
63
|
+
when 13 then generate_base13_ean
|
64
|
+
else raise ArgumentError, 'base must be 3 or 13'
|
65
|
+
end
|
31
66
|
end
|
32
67
|
|
68
|
+
##
|
69
|
+
# Produces a random RUT (Rol Unico Nacional) code.
|
70
|
+
#
|
71
|
+
# @return [String]
|
72
|
+
#
|
73
|
+
# @example
|
74
|
+
# Faker::Code.rut #=> "91611842-2"
|
75
|
+
#
|
76
|
+
# @faker.version 1.9.4
|
33
77
|
def rut
|
34
78
|
value = Number.number(digits: 8).to_s
|
35
79
|
vd = rut_verificator_digit(value)
|
@@ -38,6 +82,23 @@ module Faker
|
|
38
82
|
|
39
83
|
# By default generates a Singaporean NRIC ID for someone
|
40
84
|
# who is born between the age of 18 and 65.
|
85
|
+
#
|
86
|
+
# Produces a random NRIC (National Registry Identity Card) code.
|
87
|
+
#
|
88
|
+
# @param min_age [Integer] the min age of the person in years
|
89
|
+
# @param max_age [Integer] the max age of the person in years
|
90
|
+
# @return [String]
|
91
|
+
#
|
92
|
+
# @example
|
93
|
+
# Faker::Code.nric(min_age: 25, max_age: 50) #=> "S9347283G"
|
94
|
+
# @example
|
95
|
+
# Faker::Code.nric(max_age: 55) #=> "S7876903C"
|
96
|
+
# @example
|
97
|
+
# Faker::Code.nric(min_age: 25) #=> "S6281697Z"
|
98
|
+
# @example
|
99
|
+
# Faker::Code.nric #=> "S6372958B"
|
100
|
+
#
|
101
|
+
# @faker.version 2.2.0
|
41
102
|
def nric(legacy_min_age = NOT_GIVEN, legacy_max_age = NOT_GIVEN, min_age: 18, max_age: 65)
|
42
103
|
warn_for_deprecated_arguments do |keywords|
|
43
104
|
keywords << :min_age if legacy_min_age != NOT_GIVEN
|
@@ -52,19 +113,41 @@ module Faker
|
|
52
113
|
"#{prefix}#{values}#{check_alpha}"
|
53
114
|
end
|
54
115
|
|
55
|
-
|
116
|
+
##
|
117
|
+
# Produces a random IMEI (International Mobile Equipment Number) code.
|
118
|
+
#
|
119
|
+
# @return [String]
|
120
|
+
#
|
121
|
+
# @example
|
122
|
+
# Faker::Code.imei #=> "492033129092256"
|
123
|
+
#
|
124
|
+
# @faker.version 1.9.4
|
56
125
|
def imei
|
57
126
|
generate_imei
|
58
127
|
end
|
59
128
|
|
60
|
-
|
61
|
-
# https://archive.org/details/asin_listing
|
129
|
+
##
|
130
|
+
# Retrieves a real Amazon ASIN code from https://archive.org/details/asin_listing
|
131
|
+
#
|
132
|
+
# @return [String]
|
133
|
+
#
|
134
|
+
# @example
|
135
|
+
# Faker::Code.asin #=> "B000MZW1GE"
|
136
|
+
#
|
137
|
+
# @faker.version 1.9.4
|
62
138
|
def asin
|
63
139
|
fetch('code.asin')
|
64
140
|
end
|
65
141
|
|
66
|
-
|
67
|
-
#
|
142
|
+
##
|
143
|
+
# Produces a random SIN (Social Insurance Number for Canada) code.
|
144
|
+
#
|
145
|
+
# @return [String]
|
146
|
+
#
|
147
|
+
# @example
|
148
|
+
# Faker::Code.sin #=> "996586962"
|
149
|
+
#
|
150
|
+
# @faker.version 1.9.4
|
68
151
|
def sin
|
69
152
|
# 1 - province or temporary resident
|
70
153
|
# 2-8 - random numbers
|
@@ -77,7 +160,7 @@ module Faker
|
|
77
160
|
partial = Array.new(7) { Faker::Config.random.rand(0..9) }.join
|
78
161
|
|
79
162
|
# Generate 9th digit
|
80
|
-
check_digit = generate_sin_check_digit(registry
|
163
|
+
check_digit = generate_sin_check_digit("#{registry}#{partial}0").to_s
|
81
164
|
|
82
165
|
registry + partial + check_digit
|
83
166
|
end
|
@@ -90,8 +173,6 @@ module Faker
|
|
90
173
|
def generate_imei
|
91
174
|
str = Array.new(15, 0)
|
92
175
|
sum = 0
|
93
|
-
t = 0
|
94
|
-
len_offset = 0
|
95
176
|
len = 15
|
96
177
|
|
97
178
|
# Fill in the first two values of the string based with the specified prefix.
|
@@ -137,7 +218,7 @@ module Faker
|
|
137
218
|
def generate_base13_isbn
|
138
219
|
values = regexify(/\d{12}/)
|
139
220
|
remainder = sum(values) { |value, index| index.even? ? value.to_i : value.to_i * 3 } % 10
|
140
|
-
values << "-#{(
|
221
|
+
values << "-#{(10 - remainder) % 10}"
|
141
222
|
end
|
142
223
|
|
143
224
|
def sum(values)
|
@@ -3,10 +3,30 @@
|
|
3
3
|
module Faker
|
4
4
|
class Commerce < Base
|
5
5
|
class << self
|
6
|
+
##
|
7
|
+
# Produces a random color.
|
8
|
+
#
|
9
|
+
# @return [String]
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# Faker::Commerce.color #=> "lavender"
|
13
|
+
#
|
14
|
+
# @faker.version 1.2.0
|
6
15
|
def color
|
7
16
|
fetch('color.name')
|
8
17
|
end
|
9
18
|
|
19
|
+
##
|
20
|
+
# Produces a random promotion code.
|
21
|
+
#
|
22
|
+
# @param digits [Integer] Updates the number of numerical digits used to generate the promotion code.
|
23
|
+
# @return [String]
|
24
|
+
#
|
25
|
+
# @example
|
26
|
+
# Faker::Commerce.promotion_code #=> "AmazingDeal829102"
|
27
|
+
# Faker::Commerce.promotion_code(digits: 2) #=> "AmazingPrice57"
|
28
|
+
#
|
29
|
+
# @faker.version 1.7.0
|
10
30
|
def promotion_code(legacy_digits = NOT_GIVEN, digits: 6)
|
11
31
|
warn_for_deprecated_arguments do |keywords|
|
12
32
|
keywords << :digits if legacy_digits != NOT_GIVEN
|
@@ -19,6 +39,19 @@ module Faker
|
|
19
39
|
].join
|
20
40
|
end
|
21
41
|
|
42
|
+
##
|
43
|
+
# Produces a random department.
|
44
|
+
#
|
45
|
+
# @param max [Integer] Updates the maximum number of names used to generate the department name.
|
46
|
+
# @param fixed_amount [Boolean] Fixes the amount of departments to use instead of using a range.
|
47
|
+
# @return [String]
|
48
|
+
#
|
49
|
+
# @example
|
50
|
+
# Faker::Commerce.department #=> "Grocery, Health & Beauty"
|
51
|
+
# Faker::Commerce.department(max: 5) #=> "Grocery, Books, Health & Beauty"
|
52
|
+
# Faker::Commerce.department(max: 2, fixed_amount: true) #=> "Books & Tools"
|
53
|
+
#
|
54
|
+
# @faker.version 1.2.0
|
22
55
|
def department(legacy_max = NOT_GIVEN, legacy_fixed_amount = NOT_GIVEN, max: 3, fixed_amount: false)
|
23
56
|
warn_for_deprecated_arguments do |keywords|
|
24
57
|
keywords << :max if legacy_max != NOT_GIVEN
|
@@ -30,19 +63,55 @@ module Faker
|
|
30
63
|
|
31
64
|
categories = categories(num)
|
32
65
|
|
33
|
-
|
34
|
-
|
35
|
-
|
66
|
+
if categories.is_a?(Array)
|
67
|
+
if categories.length > 1
|
68
|
+
merge_categories(categories)
|
69
|
+
else
|
70
|
+
categories[0]
|
71
|
+
end
|
72
|
+
else
|
73
|
+
categories
|
74
|
+
end
|
36
75
|
end
|
37
76
|
|
77
|
+
##
|
78
|
+
# Produces a random product name.
|
79
|
+
#
|
80
|
+
# @return [String]
|
81
|
+
#
|
82
|
+
# @example
|
83
|
+
# Faker::Commerce.product_name #=> "Practical Granite Shirt"
|
84
|
+
#
|
85
|
+
# @faker.version 1.2.0
|
38
86
|
def product_name
|
39
87
|
"#{fetch('commerce.product_name.adjective')} #{fetch('commerce.product_name.material')} #{fetch('commerce.product_name.product')}"
|
40
88
|
end
|
41
89
|
|
90
|
+
##
|
91
|
+
# Produces a random material.
|
92
|
+
#
|
93
|
+
# @return [String]
|
94
|
+
#
|
95
|
+
# @example
|
96
|
+
# Faker::Commerce.material #=> "Plastic"
|
97
|
+
#
|
98
|
+
# @faker.version 1.5.0
|
42
99
|
def material
|
43
100
|
fetch('commerce.product_name.material')
|
44
101
|
end
|
45
102
|
|
103
|
+
##
|
104
|
+
# Produces a random product price.
|
105
|
+
#
|
106
|
+
# @param range [Range] A range to generate the random number within.
|
107
|
+
# @param as_string [Boolean] Changes the return value to [String].
|
108
|
+
# @return [Float]
|
109
|
+
#
|
110
|
+
# @example
|
111
|
+
# Faker::Commerce.price #=> 44.6
|
112
|
+
# Faker::Commerce.price(range: 0..10.0, as_string: true) #=> "2.18"
|
113
|
+
#
|
114
|
+
# @faker.version 1.2.0
|
46
115
|
def price(legacy_range = NOT_GIVEN, legacy_as_string = NOT_GIVEN, range: 0..100.0, as_string: false)
|
47
116
|
warn_for_deprecated_arguments do |keywords|
|
48
117
|
keywords << :range if legacy_range != NOT_GIVEN
|
@@ -52,7 +121,7 @@ module Faker
|
|
52
121
|
price = (rand(range) * 100).floor / 100.0
|
53
122
|
if as_string
|
54
123
|
price_parts = price.to_s.split('.')
|
55
|
-
price = price_parts[0]
|
124
|
+
price = "#{price_parts[0]}.#{price_parts[-1].ljust(2, '0')}"
|
56
125
|
end
|
57
126
|
price
|
58
127
|
end
|
@@ -60,13 +129,7 @@ module Faker
|
|
60
129
|
private
|
61
130
|
|
62
131
|
def categories(num)
|
63
|
-
|
64
|
-
while categories.length < num
|
65
|
-
category = fetch('commerce.department')
|
66
|
-
categories << category unless categories.include?(category)
|
67
|
-
end
|
68
|
-
|
69
|
-
categories
|
132
|
+
sample(fetch_all('commerce.department'), num)
|
70
133
|
end
|
71
134
|
|
72
135
|
def merge_categories(categories)
|
@@ -162,12 +162,17 @@ module Faker
|
|
162
162
|
# @faker.version 1.8.5
|
163
163
|
#
|
164
164
|
# Get a random Spanish organization number. See more here https://es.wikipedia.org/wiki/N%C3%BAmero_de_identificaci%C3%B3n_fiscal
|
165
|
-
def spanish_organisation_number
|
165
|
+
def spanish_organisation_number(organization_type: nil)
|
166
166
|
# Valid leading character: A, B, C, D, E, F, G, H, J, N, P, Q, R, S, U, V, W
|
167
|
-
# 7 digit numbers
|
167
|
+
# format: 1 digit letter (organization type) + 7 digit numbers + 1 digit control (letter or number based on
|
168
|
+
# organization type)
|
168
169
|
letters = %w[A B C D E F G H J N P Q R S U V W]
|
169
|
-
|
170
|
-
|
170
|
+
|
171
|
+
organization_type = sample(letters) unless letters.include?(organization_type)
|
172
|
+
code = format('%07d', rand(10**7))
|
173
|
+
control = spanish_cif_control_digit(organization_type, code)
|
174
|
+
|
175
|
+
[organization_type, code, control].join
|
171
176
|
end
|
172
177
|
|
173
178
|
##
|
@@ -399,6 +404,11 @@ module Faker
|
|
399
404
|
formatted ? format('%s.%s.%s/%s-%s', *number.scan(/(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})/).flatten) : number
|
400
405
|
end
|
401
406
|
|
407
|
+
# Get a random Russian tax number.
|
408
|
+
def russian_tax_number(region: nil, type: :legal)
|
409
|
+
inn_number(region, type)
|
410
|
+
end
|
411
|
+
|
402
412
|
##
|
403
413
|
# Produces a company sic code.
|
404
414
|
#
|
@@ -454,13 +464,11 @@ module Faker
|
|
454
464
|
end
|
455
465
|
end
|
456
466
|
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
control_digit
|
467
|
+
if (sum % 10).zero?
|
468
|
+
0
|
469
|
+
else
|
470
|
+
(sum / 10 + 1) * 10 - sum
|
471
|
+
end
|
464
472
|
end
|
465
473
|
|
466
474
|
def abn_checksum(abn)
|
@@ -491,6 +499,65 @@ module Faker
|
|
491
499
|
end
|
492
500
|
sum
|
493
501
|
end
|
502
|
+
|
503
|
+
# rubocop:disable Style/AsciiComments
|
504
|
+
#
|
505
|
+
# For more on Russian tax number algorithm here:
|
506
|
+
# https://ru.wikipedia.org/wiki/Идентификационный_номер_налогоплательщика#Вычисление_контрольных_цифр
|
507
|
+
#
|
508
|
+
# Range of regions:
|
509
|
+
# https://ru.wikipedia.org/wiki/Коды_субъектов_Российской_Федерации
|
510
|
+
#
|
511
|
+
# rubocop:enable Style/AsciiComments
|
512
|
+
def inn_number(region, type)
|
513
|
+
n10 = [2, 4, 10, 3, 5, 9, 4, 6, 8]
|
514
|
+
n11 = [7, 2, 4, 10, 3, 5, 9, 4, 6, 8]
|
515
|
+
n12 = [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8]
|
516
|
+
|
517
|
+
region = format('%.2d', rand(0o1..92)) if region.nil?
|
518
|
+
checksum = if type == :legal
|
519
|
+
number = region.to_s + rand(1_000_000..9_999_999).to_s
|
520
|
+
inn_checksum(n10, number)
|
521
|
+
else
|
522
|
+
number = region.to_s + rand(10_000_000..99_999_999).to_s
|
523
|
+
inn_checksum(n11, number) + inn_checksum(n12, number + inn_checksum(n11, number))
|
524
|
+
end
|
525
|
+
|
526
|
+
number + checksum
|
527
|
+
end
|
528
|
+
|
529
|
+
def inn_checksum(factor, number)
|
530
|
+
(
|
531
|
+
factor.map.with_index.reduce(0) do |v, i|
|
532
|
+
v + i[0] * number[i[1]].to_i
|
533
|
+
end % 11 % 10
|
534
|
+
).to_s
|
535
|
+
end
|
536
|
+
|
537
|
+
def spanish_cif_control_digit(organization_type, code)
|
538
|
+
letters = %w[J A B C D E F G H]
|
539
|
+
|
540
|
+
control = code.split('').each_with_index.inject(0) do |sum, (value, index)|
|
541
|
+
if (index + 1).even?
|
542
|
+
sum + value.to_i
|
543
|
+
else
|
544
|
+
sum + spanish_b_algorithm(value.to_i)
|
545
|
+
end
|
546
|
+
end
|
547
|
+
|
548
|
+
control = control.to_s[-1].to_i
|
549
|
+
control = control.zero? ? control : 10 - control
|
550
|
+
|
551
|
+
%w[A B C D E F G H J U V].include?(organization_type) ? control : letters[control]
|
552
|
+
end
|
553
|
+
|
554
|
+
def spanish_b_algorithm(value)
|
555
|
+
result = value.to_i * 2
|
556
|
+
|
557
|
+
return result if result < 10
|
558
|
+
|
559
|
+
result.to_s[0].to_i + result.to_s[1].to_i
|
560
|
+
end
|
494
561
|
end
|
495
562
|
end
|
496
563
|
end
|
@@ -3,62 +3,197 @@
|
|
3
3
|
module Faker
|
4
4
|
class Compass < Base
|
5
5
|
class << self
|
6
|
+
##
|
7
|
+
# Produces a random cardinal.
|
8
|
+
#
|
9
|
+
# @return [String]
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# Faker::Compass.cardinal #=> "north"
|
13
|
+
#
|
14
|
+
# @faker.version 1.8.0
|
6
15
|
def cardinal
|
7
16
|
fetch('compass.cardinal.word')
|
8
17
|
end
|
9
18
|
|
19
|
+
##
|
20
|
+
# Produces a random ordinal.
|
21
|
+
#
|
22
|
+
# @return [String]
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
# Faker::Compass.ordinal #=> "northwest"
|
26
|
+
#
|
27
|
+
# @faker.version 1.8.0
|
10
28
|
def ordinal
|
11
29
|
fetch('compass.ordinal.word')
|
12
30
|
end
|
13
31
|
|
32
|
+
##
|
33
|
+
# Produces a random half wind.
|
34
|
+
#
|
35
|
+
# @return [String]
|
36
|
+
#
|
37
|
+
# @example
|
38
|
+
# Faker::Compass.half_wind #=> "north-northwest"
|
39
|
+
#
|
40
|
+
# @faker.version 1.8.0
|
14
41
|
def half_wind
|
15
42
|
fetch('compass.half-wind.word')
|
16
43
|
end
|
17
44
|
|
45
|
+
##
|
46
|
+
# Produces a random quarter wind.
|
47
|
+
#
|
48
|
+
# @return [String]
|
49
|
+
#
|
50
|
+
# @example
|
51
|
+
# Faker::Compass.quarter_wind #=> "north by west"
|
52
|
+
#
|
53
|
+
# @faker.version 1.8.0
|
18
54
|
def quarter_wind
|
19
55
|
fetch('compass.quarter-wind.word')
|
20
56
|
end
|
21
57
|
|
58
|
+
##
|
59
|
+
# Produces a random direction.
|
60
|
+
#
|
61
|
+
# @return [String]
|
62
|
+
#
|
63
|
+
# @example
|
64
|
+
# Faker::Compass.direction #=> "southeast"
|
65
|
+
#
|
66
|
+
# @faker.version 1.8.0
|
22
67
|
def direction
|
23
68
|
parse('compass.direction')
|
24
69
|
end
|
25
70
|
|
71
|
+
##
|
72
|
+
# Produces a random abbreviation.
|
73
|
+
#
|
74
|
+
# @return [String]
|
75
|
+
#
|
76
|
+
# @example
|
77
|
+
# Faker::Compass.abbreviation #=> "NEbN"
|
78
|
+
#
|
79
|
+
# @faker.version 1.8.0
|
26
80
|
def abbreviation
|
27
81
|
parse('compass.abbreviation')
|
28
82
|
end
|
29
83
|
|
84
|
+
##
|
85
|
+
# Produces a random azimuth.
|
86
|
+
#
|
87
|
+
# @return [String]
|
88
|
+
#
|
89
|
+
# @example
|
90
|
+
# Faker::Compass.azimuth #=> "168.75"
|
91
|
+
#
|
92
|
+
# @faker.version 1.8.0
|
30
93
|
def azimuth
|
31
94
|
parse('compass.azimuth')
|
32
95
|
end
|
33
96
|
|
97
|
+
##
|
98
|
+
# Produces a random cardinal abbreviation.
|
99
|
+
#
|
100
|
+
# @return [String]
|
101
|
+
#
|
102
|
+
# @example
|
103
|
+
# Faker::Compass.cardinal_abbreviation #=> "N"
|
104
|
+
#
|
105
|
+
# @faker.version 1.8.0
|
34
106
|
def cardinal_abbreviation
|
35
107
|
fetch('compass.cardinal.abbreviation')
|
36
108
|
end
|
37
109
|
|
110
|
+
##
|
111
|
+
# Produces a random ordinal abbreviation.
|
112
|
+
#
|
113
|
+
# @return [String]
|
114
|
+
#
|
115
|
+
# @example
|
116
|
+
# Faker::Compass.ordinal_abbreviation #=> "SW"
|
117
|
+
#
|
118
|
+
# @faker.version 1.8.0
|
38
119
|
def ordinal_abbreviation
|
39
120
|
fetch('compass.ordinal.abbreviation')
|
40
121
|
end
|
41
122
|
|
123
|
+
##
|
124
|
+
# Produces a random half wind abbreviation.
|
125
|
+
#
|
126
|
+
# @return [String]
|
127
|
+
#
|
128
|
+
# @example
|
129
|
+
# Faker::Compass.half_wind_abbreviation #=> "NNE"
|
130
|
+
#
|
131
|
+
# @faker.version 1.8.0
|
42
132
|
def half_wind_abbreviation
|
43
133
|
fetch('compass.half-wind.abbreviation')
|
44
134
|
end
|
45
135
|
|
136
|
+
##
|
137
|
+
# Produces a random quarter wind abbreviation.
|
138
|
+
#
|
139
|
+
# @return [String]
|
140
|
+
#
|
141
|
+
# @example
|
142
|
+
# Faker::Compass.quarter_wind_abbreviation #=> "SWbS"
|
143
|
+
#
|
144
|
+
# @faker.version 1.8.0
|
46
145
|
def quarter_wind_abbreviation
|
47
146
|
fetch('compass.quarter-wind.abbreviation')
|
48
147
|
end
|
49
148
|
|
149
|
+
##
|
150
|
+
# Produces a random cardinal azimuth.
|
151
|
+
#
|
152
|
+
# @return [String]
|
153
|
+
#
|
154
|
+
# @example
|
155
|
+
# Faker::Compass.cardinal_azimuth #=> "90"
|
156
|
+
#
|
157
|
+
# @faker.version 1.8.0
|
50
158
|
def cardinal_azimuth
|
51
159
|
fetch('compass.cardinal.azimuth')
|
52
160
|
end
|
53
161
|
|
162
|
+
##
|
163
|
+
# Produces a random ordinal azimuth.
|
164
|
+
#
|
165
|
+
# @return [String]
|
166
|
+
#
|
167
|
+
# @example
|
168
|
+
# Faker::Compass.ordinal_azimuth #=> "135"
|
169
|
+
#
|
170
|
+
# @faker.version 1.8.0
|
54
171
|
def ordinal_azimuth
|
55
172
|
fetch('compass.ordinal.azimuth')
|
56
173
|
end
|
57
174
|
|
175
|
+
##
|
176
|
+
# Produces a random half wind azimuth.
|
177
|
+
#
|
178
|
+
# @return [String]
|
179
|
+
#
|
180
|
+
# @example
|
181
|
+
# Faker::Compass.half_wind_azimuth #=> "292.5"
|
182
|
+
#
|
183
|
+
# @faker.version 1.8.0
|
58
184
|
def half_wind_azimuth
|
59
185
|
fetch('compass.half-wind.azimuth')
|
60
186
|
end
|
61
187
|
|
188
|
+
##
|
189
|
+
# Produces a random quarter wind azimuth
|
190
|
+
#
|
191
|
+
# @return [String]
|
192
|
+
#
|
193
|
+
# @example
|
194
|
+
# Faker::Compass.quarter_wind_azimuth #=> "56.25"
|
195
|
+
#
|
196
|
+
# @faker.version 1.8.0
|
62
197
|
def quarter_wind_azimuth
|
63
198
|
fetch('compass.quarter-wind.azimuth')
|
64
199
|
end
|