faker 3.2.0 → 3.2.2
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 +72 -0
- data/README.md +5 -3
- data/lib/faker/default/chile_rut.rb +23 -17
- data/lib/faker/default/code.rb +60 -18
- data/lib/faker/default/company.rb +99 -5
- data/lib/faker/default/date.rb +61 -5
- data/lib/faker/default/driving_licence.rb +19 -8
- data/lib/faker/default/html.rb +230 -0
- data/lib/faker/default/id_number.rb +17 -3
- data/lib/faker/default/internet.rb +12 -11
- data/lib/faker/default/lorem.rb +5 -2
- data/lib/faker/default/types.rb +3 -2
- data/lib/faker/default/vehicle.rb +19 -8
- data/lib/faker/games/final_fantasy_xiv.rb +73 -0
- data/lib/faker/music/smashing_pumpkins.rb +64 -0
- data/lib/faker/travel/airport.rb +2 -2
- data/lib/faker/travel/train_station.rb +54 -0
- data/lib/faker/tv_shows/archer.rb +51 -0
- data/lib/faker/tv_shows/south_park.rb +15 -0
- data/lib/faker/version.rb +1 -1
- data/lib/faker.rb +13 -5
- data/lib/helpers/positional_generator.rb +480 -0
- data/lib/locales/README.md +18 -2
- data/lib/locales/da-DK.yml +2 -0
- data/lib/locales/de-CH.yml +4336 -12
- data/lib/locales/en/archer.yml +75 -0
- data/lib/locales/en/final_fantasy_xiv.yml +754 -0
- data/lib/locales/en/minecraft.yml +4 -4
- data/lib/locales/en/opera.yml +1 -1
- data/lib/locales/en/smashing_pumpkins.yml +382 -0
- data/lib/locales/en/south_park.yml +360 -2
- data/lib/locales/en/train_station.yml +280 -0
- data/lib/locales/fr/name.yml +2 -1
- data/lib/locales/ja/sport.yml +130 -0
- data/lib/locales/ja/touhou.yml +466 -0
- data/lib/locales/uk.yml +2 -0
- data/lib/locales/zh-CN/bank.yml +17 -0
- metadata +16 -143
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a39a95efd06da2c5f87dfd84f6c251e7731ece3edffc9c9d52a6f95a5ec0751e
|
|
4
|
+
data.tar.gz: a881cedce22c1ca2c8bd7d1cc8789371e99829f354872e325ebeada4460de382
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ed6d8dfc1d75c7639f26ff617755cd421f7bff7152277aa999c26af5991d94c8efe9bb9abfdaadf1349bfd93d2b3ddb16d5c36783680fa463cf86f5836698b39
|
|
7
|
+
data.tar.gz: 6d2f16a39cca245bfc2e28cd55f4a76f5066787719bb371b3ee4edb53fbf59c31098c7c0997e32ad6af280e3b1e742762dbbd6d6a569fba91665427775c4925d
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,77 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [v3.2.1](https://github.com/faker-ruby/faker/tree/v3.2.1) (2023-08-11)
|
|
4
|
+
|
|
5
|
+
Happy August with a new Faker release! 🎉
|
|
6
|
+
|
|
7
|
+
This version:
|
|
8
|
+
|
|
9
|
+
- adds generators
|
|
10
|
+
- fixes bugs
|
|
11
|
+
- updates dev dependencies
|
|
12
|
+
|
|
13
|
+
This version fixes a bug with setting the locale in multi-threaded environments. It's now possible to set the locale per thread. For more details, see [How to set the default locale for in threaded server environments](https://github.com/faker-ruby/faker/blob/main/lib/locales/README.md#how-to-set-the-default-locale-for-in-threaded-server-environments).
|
|
14
|
+
|
|
15
|
+
Other changes included in this version:
|
|
16
|
+
|
|
17
|
+
## Features
|
|
18
|
+
* Add Final Fantasy XIV by @old-dead-account in https://github.com/faker-ruby/faker/pull/2742
|
|
19
|
+
* Add the Ukrainian country calling code by @kyrylo in https://github.com/faker-ruby/faker/pull/2758
|
|
20
|
+
* Add `exclude_words` filter to `Faker::Lorem.word` generator by @geophilusd in https://github.com/faker-ruby/faker/pull/2761
|
|
21
|
+
* Add Japanese translations for Sports category. by @yamat47 in https://github.com/faker-ruby/faker/pull/2770
|
|
22
|
+
* Add type support for Faker::Types.rb_array by @ruban-thilak in https://github.com/faker-ruby/faker/pull/2771
|
|
23
|
+
* Added Archer into tv category. by @lepari23 in https://github.com/faker-ruby/faker/pull/2750
|
|
24
|
+
* Add train station generator by @AngusDSR in https://github.com/faker-ruby/faker/pull/2755
|
|
25
|
+
* Add custom start date for `Faker::Date.forward` by @luciagirasoles in https://github.com/faker-ruby/faker/pull/2791
|
|
26
|
+
* Add `max_rut` option to `Faker::ChileRut.rut` by @hacktivista in https://github.com/faker-ruby/faker/pull/2778
|
|
27
|
+
* Add Faker::Date.day_of_week_between by @aramvisser in https://github.com/faker-ruby/faker/pull/2713
|
|
28
|
+
* Html generator for Faker by @ruban-thilak in https://github.com/faker-ruby/faker/pull/2769
|
|
29
|
+
|
|
30
|
+
## Bug fixes
|
|
31
|
+
* Fix locale setting by @mateusdeap in https://github.com/faker-ruby/faker/pull/2734
|
|
32
|
+
* add tests for password and fix an edge case by @DeepakRaj228 in https://github.com/faker-ruby/faker/pull/2741
|
|
33
|
+
* Remove broken chars from minecraft.yml by @ujihisa in https://github.com/faker-ruby/faker/pull/2765
|
|
34
|
+
* Fix flaky specs for `name` and `id` by @ruban-thilak in https://github.com/faker-ruby/faker/pull/2782
|
|
35
|
+
* Fixes `Faker::Music::Opera.saint_saens` issue by @devashishTaneja in https://github.com/faker-ruby/faker/pull/2792
|
|
36
|
+
* Fix flaky specs for dota `test_player` by @ruban-thilak in https://github.com/faker-ruby/faker/pull/2798
|
|
37
|
+
* Add prefixes to french name locale (`Faker::Name.name`) by @thdaraujo in https://github.com/faker-ruby/faker/pull/2800
|
|
38
|
+
|
|
39
|
+
## What's Changed
|
|
40
|
+
* Introduce PositionalGenerator by @mike-burns in https://github.com/faker-ruby/faker/pull/2710
|
|
41
|
+
* Update South Park by @IvanReyesO7 in https://github.com/faker-ruby/faker/pull/2744
|
|
42
|
+
* Speed up Internet::Password generation using constants by @MicBruz in https://github.com/faker-ruby/faker/pull/2725
|
|
43
|
+
* Improve de-CH locale with new formats and content by @stefnnn in https://github.com/faker-ruby/faker/pull/2768
|
|
44
|
+
|
|
45
|
+
## Update local dependencies
|
|
46
|
+
* Bump rubocop from 1.55.1 to 1.56.0 by @dependabot in https://github.com/faker-ruby/faker/pull/2807
|
|
47
|
+
* Update test-unit requirement from = 3.5.9 to = 3.6.1 by @dependabot in https://github.com/faker-ruby/faker/pull/2788
|
|
48
|
+
* Bump i18n from 1.12.0 to 1.13.0 by @dependabot in https://github.com/faker-ruby/faker/pull/2756
|
|
49
|
+
* Update rubocop-minitest requirement from = 0.30.0 to = 0.31.0 by @dependabot in https://github.com/faker-ruby/faker/pull/2759
|
|
50
|
+
* Bump minitest from 5.18.1 to 5.19.0 by @dependabot in https://github.com/faker-ruby/faker/pull/2804
|
|
51
|
+
|
|
52
|
+
## New Contributors
|
|
53
|
+
* @old-dead-account made their first contribution in https://github.com/faker-ruby/faker/pull/2742
|
|
54
|
+
* @IvanReyesO7 made their first contribution in https://github.com/faker-ruby/faker/pull/2744
|
|
55
|
+
* @DeepakRaj228 made their first contribution in https://github.com/faker-ruby/faker/pull/2741
|
|
56
|
+
* @MicBruz made their first contribution in https://github.com/faker-ruby/faker/pull/2725
|
|
57
|
+
* @kyrylo made their first contribution in https://github.com/faker-ruby/faker/pull/2758
|
|
58
|
+
* @ujihisa made their first contribution in https://github.com/faker-ruby/faker/pull/2765
|
|
59
|
+
* @geophilusd made their first contribution in https://github.com/faker-ruby/faker/pull/2761
|
|
60
|
+
* @stefnnn made their first contribution in https://github.com/faker-ruby/faker/pull/2768
|
|
61
|
+
* @yamat47 made their first contribution in https://github.com/faker-ruby/faker/pull/2770
|
|
62
|
+
* @ruban-thilak made their first contribution in https://github.com/faker-ruby/faker/pull/2782
|
|
63
|
+
* @lepari23 made their first contribution in https://github.com/faker-ruby/faker/pull/2750
|
|
64
|
+
* @AngusDSR made their first contribution in https://github.com/faker-ruby/faker/pull/2755
|
|
65
|
+
* @devashishTaneja made their first contribution in https://github.com/faker-ruby/faker/pull/2792
|
|
66
|
+
* @mike-burns made their first contribution in https://github.com/faker-ruby/faker/pull/2710
|
|
67
|
+
* @hacktivista made their first contribution in https://github.com/faker-ruby/faker/pull/2778
|
|
68
|
+
* @mateusdeap made their first contribution in https://github.com/faker-ruby/faker/pull/2734
|
|
69
|
+
* @aramvisser made their first contribution in https://github.com/faker-ruby/faker/pull/2713
|
|
70
|
+
|
|
71
|
+
**Full Changelog**: https://github.com/faker-ruby/faker/compare/v3.2.0...v3.2.1
|
|
72
|
+
|
|
73
|
+
-------------------------
|
|
74
|
+
|
|
3
75
|
## [v3.2.0](https://github.com/faker-ruby/faker/tree/v3.2.0) (2023-04-14)
|
|
4
76
|
|
|
5
77
|
Happy Spring with a new Faker release! 🌼
|
data/README.md
CHANGED
|
@@ -169,9 +169,7 @@ Faker::Config.locale = 'es'
|
|
|
169
169
|
Faker::Config.locale = :es
|
|
170
170
|
```
|
|
171
171
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
To override Faker's locales,
|
|
172
|
+
To override Faker's locales, and set it on threaded server environments
|
|
175
173
|
check out the [locales README](lib/locales/README.md).
|
|
176
174
|
|
|
177
175
|
### Minitest and Faker >= 2.22
|
|
@@ -325,6 +323,7 @@ gem 'faker', :git => 'https://github.com/faker-ruby/faker.git', :branch => 'main
|
|
|
325
323
|
<summary>Travel</summary>
|
|
326
324
|
|
|
327
325
|
- [Faker:Travel::Airport](doc/travel/airport.md)
|
|
326
|
+
- [Faker:Travel::TrainStation](doc/travel/train_station.md)
|
|
328
327
|
</details>
|
|
329
328
|
|
|
330
329
|
<details>
|
|
@@ -346,6 +345,7 @@ gem 'faker', :git => 'https://github.com/faker-ruby/faker.git', :branch => 'main
|
|
|
346
345
|
- [Faker::Games::Dota](doc/games/dota.md)
|
|
347
346
|
- [Faker::Games::ElderScrolls](doc/games/elder_scrolls.md)
|
|
348
347
|
- [Faker::Games::Fallout](doc/games/fallout.md)
|
|
348
|
+
- [Faker::Games::FinalFantasyXIV](doc/games/final_fantasy_xiv.md)
|
|
349
349
|
- [Faker::Games::HalfLife](doc/games/half_life.md)
|
|
350
350
|
- [Faker::Games::Heroes](doc/games/heroes.md)
|
|
351
351
|
- [Faker::Games::HeroesOfTheStorm](doc/games/heroes_of_the_storm.md)
|
|
@@ -411,6 +411,7 @@ gem 'faker', :git => 'https://github.com/faker-ruby/faker.git', :branch => 'main
|
|
|
411
411
|
- [Faker::Music::Prince](doc/music/prince.md)
|
|
412
412
|
- [Faker::Music::RockBand](doc/music/rock_band.md)
|
|
413
413
|
- [Faker::Music::Rush](doc/music/rush.md)
|
|
414
|
+
- [Faker::Music::SmashingPumpkins](doc/music/smashing_pumpkins.md)
|
|
414
415
|
- [Faker::Music::UmphreysMcgee](doc/music/umphreys_mcgee.md)
|
|
415
416
|
</details>
|
|
416
417
|
|
|
@@ -438,6 +439,7 @@ gem 'faker', :git => 'https://github.com/faker-ruby/faker.git', :branch => 'main
|
|
|
438
439
|
<summary>Tv Shows</summary>
|
|
439
440
|
|
|
440
441
|
- [Faker::TvShows::AquaTeenHungerForce](doc/tv_shows/aqua_teen_hunger_force.md)
|
|
442
|
+
- [Faker::TvShows::Archer](doc/tv_shows/archer.md)
|
|
441
443
|
- [Faker::TvShows::BigBangTheory](doc/tv_shows/big_bang_theory.md)
|
|
442
444
|
- [Faker::TvShows::BojackHorseman](doc/tv_shows/bojack_horseman.md)
|
|
443
445
|
- [Faker::TvShows::BreakingBad](doc/tv_shows/breaking_bad.md)
|
|
@@ -8,18 +8,19 @@ module Faker
|
|
|
8
8
|
##
|
|
9
9
|
# Produces a random Chilean RUT (Rol Unico Tributario, ID with 8 digits).
|
|
10
10
|
#
|
|
11
|
-
# @param min_rut [Integer] Specifies the minimum value of the
|
|
12
|
-
# @param
|
|
11
|
+
# @param min_rut [Integer] Specifies the minimum value of the RUT.
|
|
12
|
+
# @param max_rut [Integer] Specifies the maximum value of the RUT.
|
|
13
|
+
# @param fixed [Boolean] Determines if the RUT is fixed (returns the min_rut value).
|
|
13
14
|
# @return [Number]
|
|
14
15
|
#
|
|
15
16
|
# @example
|
|
16
17
|
# Faker::ChileRut.rut #=> 11235813
|
|
17
|
-
# Faker::ChileRut.rut(min_rut:
|
|
18
|
-
# Faker::ChileRut.rut(min_rut:
|
|
18
|
+
# Faker::ChileRut.rut(min_rut: 10_000_000, max_rut: 30_000_000) #=> 21853211
|
|
19
|
+
# Faker::ChileRut.rut(min_rut: 20_890_156, fixed: true) #=> 20890156
|
|
19
20
|
#
|
|
20
|
-
# @faker.version
|
|
21
|
-
def rut(min_rut: 1, fixed: false)
|
|
22
|
-
@last_rut = fixed ? min_rut : rand_in_range(min_rut,
|
|
21
|
+
# @faker.version next
|
|
22
|
+
def rut(min_rut: 1, max_rut: 99_999_999, fixed: false)
|
|
23
|
+
@last_rut = fixed ? min_rut : rand_in_range(min_rut, max_rut)
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
##
|
|
@@ -68,25 +69,30 @@ module Faker
|
|
|
68
69
|
##
|
|
69
70
|
# Produces a random Chilean RUT (Rol Unico Tributario, ID with 8 digits) with a dv (digito verificador, check-digit).
|
|
70
71
|
#
|
|
71
|
-
# @param min_rut [Integer] Specifies the minimum value of the
|
|
72
|
-
# @param
|
|
72
|
+
# @param min_rut [Integer] Specifies the minimum value of the RUT.
|
|
73
|
+
# @param max_rut [Integer] Specifies the maximum value of the RUT.
|
|
74
|
+
# @param fixed [Boolean] Determines if the RUT is fixed (returns the min_rut value).
|
|
73
75
|
# @return [String]
|
|
74
76
|
#
|
|
75
77
|
# @example
|
|
76
78
|
# Faker::ChileRut.full_rut #=> "30686957-4"
|
|
77
|
-
# Faker::ChileRut.full_rut(min_rut:
|
|
78
|
-
# Faker::ChileRut.full_rut(min_rut:
|
|
79
|
+
# Faker::ChileRut.full_rut(min_rut: 10_000_000, max_rut: 30_000_000) #=> "20686957-4"
|
|
80
|
+
# Faker::ChileRut.full_rut(min_rut: 30_686_957, fixed: true) #=> "30686957-4"
|
|
79
81
|
#
|
|
80
82
|
# @faker.version next
|
|
81
|
-
def full_rut(min_rut:
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
"#{rut(min_rut: min_rut, fixed: fixed)}-#{dv}"
|
|
86
|
-
end
|
|
83
|
+
def full_rut(min_rut: 1, max_rut: 99_999_999, fixed: false, formatted: false)
|
|
84
|
+
this_rut = rut(min_rut: min_rut, max_rut: max_rut, fixed: fixed)
|
|
85
|
+
this_rut = format_rut(this_rut) if formatted
|
|
86
|
+
"#{this_rut}-#{dv}"
|
|
87
87
|
end
|
|
88
88
|
|
|
89
89
|
attr_reader :last_rut
|
|
90
|
+
|
|
91
|
+
private
|
|
92
|
+
|
|
93
|
+
def format_rut(rut)
|
|
94
|
+
rut.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1.').reverse
|
|
95
|
+
end
|
|
90
96
|
end
|
|
91
97
|
end
|
|
92
98
|
end
|
data/lib/faker/default/code.rb
CHANGED
|
@@ -93,11 +93,23 @@ module Faker
|
|
|
93
93
|
# @faker.version 2.2.0
|
|
94
94
|
def nric(min_age: 18, max_age: 65)
|
|
95
95
|
birthyear = Date.birthday(min_age: min_age, max_age: max_age).year
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
96
|
+
|
|
97
|
+
generate(:string) do |g|
|
|
98
|
+
g.computed(name: :prefix) do
|
|
99
|
+
if birthyear < 2000
|
|
100
|
+
'S'
|
|
101
|
+
else
|
|
102
|
+
'T'
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
g.computed(name: :yy) do
|
|
106
|
+
birthyear.to_s[-2..]
|
|
107
|
+
end
|
|
108
|
+
g.int(name: :values, length: 5)
|
|
109
|
+
g.computed(name: :check, deps: %i[prefix yy values]) do |prefix, yy, values|
|
|
110
|
+
generate_nric_check_alphabet("#{yy}#{values}", prefix)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
101
113
|
end
|
|
102
114
|
|
|
103
115
|
##
|
|
@@ -197,15 +209,29 @@ module Faker
|
|
|
197
209
|
end
|
|
198
210
|
|
|
199
211
|
def generate_base10_isbn
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
212
|
+
generate(:string) do |g|
|
|
213
|
+
g.int(name: :values, length: 9)
|
|
214
|
+
g.lit('-')
|
|
215
|
+
g.computed(name: :checksum, deps: [:values]) do |values|
|
|
216
|
+
remainder = sum(values.to_s) { |value, offset| (offset + 1) * value.to_i } % 11
|
|
217
|
+
if remainder == 10
|
|
218
|
+
'X'
|
|
219
|
+
else
|
|
220
|
+
remainder.to_s
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
end
|
|
203
224
|
end
|
|
204
225
|
|
|
205
226
|
def generate_base13_isbn
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
227
|
+
generate(:string) do |g|
|
|
228
|
+
g.int(name: :values, length: 12)
|
|
229
|
+
g.lit('-')
|
|
230
|
+
g.computed(name: :checksum, deps: [:values]) do |values|
|
|
231
|
+
remainder = sum(values.to_s) { |value, offset| offset.even? ? value.to_i : value.to_i * 3 } % 10
|
|
232
|
+
(10 - remainder) % 10
|
|
233
|
+
end
|
|
234
|
+
end
|
|
209
235
|
end
|
|
210
236
|
|
|
211
237
|
def sum(values)
|
|
@@ -215,15 +241,31 @@ module Faker
|
|
|
215
241
|
end
|
|
216
242
|
|
|
217
243
|
def generate_base8_ean
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
244
|
+
generate(:string) do |g|
|
|
245
|
+
g.int(name: :values, length: 7)
|
|
246
|
+
g.computed(name: :checksum, deps: [:values]) do |values|
|
|
247
|
+
check_digit = 10 - values.to_s.chars.each_with_index.inject(0) { |s, (v, i)| s + v.to_i * EAN_CHECK_DIGIT8[i] } % 10
|
|
248
|
+
if check_digit == 10
|
|
249
|
+
0
|
|
250
|
+
else
|
|
251
|
+
check_digit
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
end
|
|
221
255
|
end
|
|
222
256
|
|
|
223
257
|
def generate_base13_ean
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
258
|
+
generate(:string) do |g|
|
|
259
|
+
g.int(name: :values, length: 12)
|
|
260
|
+
g.computed(name: :checksum, deps: [:values]) do |values|
|
|
261
|
+
check_digit = 10 - values.to_s.chars.each_with_index.inject(0) { |s, (v, i)| s + v.to_i * EAN_CHECK_DIGIT13[i] } % 10
|
|
262
|
+
if check_digit == 10
|
|
263
|
+
0
|
|
264
|
+
else
|
|
265
|
+
check_digit
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
end
|
|
227
269
|
end
|
|
228
270
|
|
|
229
271
|
EAN_CHECK_DIGIT8 = [3, 1, 3, 1, 3, 1, 3].freeze
|
|
@@ -231,7 +273,7 @@ module Faker
|
|
|
231
273
|
|
|
232
274
|
def rut_verificator_digit(rut)
|
|
233
275
|
total = rut.to_s.rjust(8, '0').chars.zip(%w[3 2 7 6 5 4 3 2]).collect { |a, b| a.to_i * b.to_i }.inject(:+)
|
|
234
|
-
(11 - total % 11).to_s.gsub(
|
|
276
|
+
(11 - total % 11).to_s.gsub('10', 'k').gsub('11', '0')
|
|
235
277
|
end
|
|
236
278
|
|
|
237
279
|
def generate_nric_check_alphabet(values, prefix)
|
|
@@ -343,7 +343,12 @@ module Faker
|
|
|
343
343
|
#
|
|
344
344
|
# @faker.version 1.9.2
|
|
345
345
|
def south_african_pty_ltd_registration_number
|
|
346
|
-
|
|
346
|
+
generate(:string) do |g|
|
|
347
|
+
g.int(length: 4)
|
|
348
|
+
g.lit('/')
|
|
349
|
+
g.int(ranges: [1000..9_999_999_999])
|
|
350
|
+
g.lit('/07')
|
|
351
|
+
end
|
|
347
352
|
end
|
|
348
353
|
|
|
349
354
|
##
|
|
@@ -356,7 +361,18 @@ module Faker
|
|
|
356
361
|
#
|
|
357
362
|
# @faker.version 1.9.2
|
|
358
363
|
def south_african_close_corporation_registration_number
|
|
359
|
-
|
|
364
|
+
generate(:string) do |g|
|
|
365
|
+
g.oneof do |one|
|
|
366
|
+
one.group do |g_|
|
|
367
|
+
g_.lit('CK')
|
|
368
|
+
g_.int(length: 2)
|
|
369
|
+
end
|
|
370
|
+
one.int(length: 4)
|
|
371
|
+
end
|
|
372
|
+
g.lit('/')
|
|
373
|
+
g.int(ranges: [1000..9_999_999_999])
|
|
374
|
+
g.lit('/23')
|
|
375
|
+
end
|
|
360
376
|
end
|
|
361
377
|
|
|
362
378
|
##
|
|
@@ -369,7 +385,12 @@ module Faker
|
|
|
369
385
|
#
|
|
370
386
|
# @faker.version 1.9.2
|
|
371
387
|
def south_african_listed_company_registration_number
|
|
372
|
-
|
|
388
|
+
generate(:string) do |g|
|
|
389
|
+
g.int(length: 4)
|
|
390
|
+
g.lit('/')
|
|
391
|
+
g.int(ranges: [1000..9_999_999_999])
|
|
392
|
+
g.lit('/06')
|
|
393
|
+
end
|
|
373
394
|
end
|
|
374
395
|
|
|
375
396
|
##
|
|
@@ -382,7 +403,12 @@ module Faker
|
|
|
382
403
|
#
|
|
383
404
|
# @faker.version 1.9.2
|
|
384
405
|
def south_african_trust_registration_number
|
|
385
|
-
|
|
406
|
+
generate(:string) do |g|
|
|
407
|
+
g.lit('IT')
|
|
408
|
+
g.int(ranges: [10..9999])
|
|
409
|
+
g.lit('/')
|
|
410
|
+
g.int(ranges: [10..9_999_999_999])
|
|
411
|
+
end
|
|
386
412
|
end
|
|
387
413
|
|
|
388
414
|
##
|
|
@@ -438,6 +464,61 @@ module Faker
|
|
|
438
464
|
fetch('company.sic_code')
|
|
439
465
|
end
|
|
440
466
|
|
|
467
|
+
##
|
|
468
|
+
# Get a random Indian Goods and Services Tax (GST) number.
|
|
469
|
+
# For more on Indian tax number here:
|
|
470
|
+
# https://simple.wikipedia.org/wiki/GSTIN
|
|
471
|
+
# @params state code [String] Any state code.
|
|
472
|
+
#
|
|
473
|
+
# @return [String]
|
|
474
|
+
# @example
|
|
475
|
+
# Faker::Company.indian_gst_number #=> "15VQPNZ2126J2ZU"
|
|
476
|
+
# Faker::Company.indian_gst_number(state_code: "22") #=> "22ZVWEY6632K0ZN"
|
|
477
|
+
#
|
|
478
|
+
# @faker.version 3.2.1
|
|
479
|
+
def indian_gst_number(state_code: nil)
|
|
480
|
+
# Check if state code is valid
|
|
481
|
+
state_code_ranges = [('02'..'38'), ['98']]
|
|
482
|
+
if state_code && !(state_code_ranges[0].include?(state_code) || state_code == '98')
|
|
483
|
+
raise ArgumentError, 'state code must be in a range of 02 to 38 or 98'
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
PositionalGenerator.new(:string) do |gen|
|
|
487
|
+
# Generate a state code if not given
|
|
488
|
+
if state_code
|
|
489
|
+
gen.lit(state_code, name: :state_code_param)
|
|
490
|
+
else
|
|
491
|
+
gen.letter(name: :state_code_param, length: 1, ranges: state_code_ranges)
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
# Construct taxpayer number
|
|
495
|
+
gen.group(name: :taxpayer_number) do |g_|
|
|
496
|
+
g_.letter(length: 3, ranges: ['A'..'Z'])
|
|
497
|
+
g_.letter(length: 1, ranges: [%w[A B C F G H L J P T K]].to_a)
|
|
498
|
+
g_.letter(length: 1, ranges: ['A'..'Z'])
|
|
499
|
+
g_.int(length: 4, ranges: [0..9999])
|
|
500
|
+
g_.letter(length: 1, ranges: ['A'..'Z'])
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
gen.int(name: :registration_number, length: 1, ranges: [0..9])
|
|
504
|
+
|
|
505
|
+
gen.letter(name: :z_char, length: 1, ranges: [['Z']])
|
|
506
|
+
|
|
507
|
+
gen.computed(deps: %i[state_code_param taxpayer_number registration_number]) do |state_code_param, taxpayer_number, registration_number|
|
|
508
|
+
gst_base = "#{state_code_param}#{taxpayer_number}#{registration_number}"
|
|
509
|
+
chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'.chars
|
|
510
|
+
values = gst_base.chars
|
|
511
|
+
sum = values.map.with_index do |char, index|
|
|
512
|
+
product = chars.index(char) * (index.odd? ? 2 : 1)
|
|
513
|
+
(product / chars.length).floor + (product % chars.length)
|
|
514
|
+
end.reduce(:+)
|
|
515
|
+
|
|
516
|
+
checksum = (chars.length - (sum % chars.length)) % chars.length
|
|
517
|
+
chars[checksum]
|
|
518
|
+
end
|
|
519
|
+
end.generate
|
|
520
|
+
end
|
|
521
|
+
|
|
441
522
|
private
|
|
442
523
|
|
|
443
524
|
# Mod11 functionality from https://github.com/badmanski/mod11/blob/master/lib/mod11.rb
|
|
@@ -567,7 +648,7 @@ module Faker
|
|
|
567
648
|
end
|
|
568
649
|
|
|
569
650
|
control = control.to_s[-1].to_i
|
|
570
|
-
control =
|
|
651
|
+
control = 10 - control unless control.zero?
|
|
571
652
|
|
|
572
653
|
%w[A B C D E F G H J U V].include?(organization_type) ? control : letters[control]
|
|
573
654
|
end
|
|
@@ -579,6 +660,19 @@ module Faker
|
|
|
579
660
|
|
|
580
661
|
result.to_s[0].to_i + result.to_s[1].to_i
|
|
581
662
|
end
|
|
663
|
+
|
|
664
|
+
def calculate_gst_checksum(state_code, taxpayer_number, registration_number)
|
|
665
|
+
gst_base = "#{state_code}#{taxpayer_number}#{registration_number}"
|
|
666
|
+
chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'.chars
|
|
667
|
+
values = gst_base.upcase.chars
|
|
668
|
+
sum = values.map.with_index do |char, index|
|
|
669
|
+
product = chars.index(char) * (index.odd? ? 2 : 1)
|
|
670
|
+
(product / chars.length).floor + (product % chars.length)
|
|
671
|
+
end.reduce(:+)
|
|
672
|
+
|
|
673
|
+
checksum = (chars.length - (sum % chars.length)) % chars.length
|
|
674
|
+
chars[checksum]
|
|
675
|
+
end
|
|
582
676
|
end
|
|
583
677
|
end
|
|
584
678
|
end
|
data/lib/faker/default/date.rb
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Faker
|
|
4
4
|
class Date < Base
|
|
5
|
+
DAYS_OF_WEEK = %i[sunday monday tuesday wednesday thursday friday saturday].freeze
|
|
6
|
+
|
|
5
7
|
class << self
|
|
6
8
|
##
|
|
7
9
|
# Produce a random date between two dates.
|
|
@@ -53,18 +55,26 @@ module Faker
|
|
|
53
55
|
##
|
|
54
56
|
# Produce a random date in the future (up to N days).
|
|
55
57
|
#
|
|
58
|
+
# @param from [Integer] The start of the usable forward date range.
|
|
56
59
|
# @param days [Integer] The maximum number of days to go into the future.
|
|
57
60
|
# @return [Date]
|
|
58
61
|
#
|
|
59
|
-
# @example
|
|
62
|
+
# @example if used with or without Rails (Active Support)
|
|
60
63
|
# Faker::Date.forward(days: 23) #=> #<Date: 2014-10-03>
|
|
61
64
|
#
|
|
65
|
+
# @example if used with Rails (Active Support)
|
|
66
|
+
# Faker::Date.forward(from: Date.current, days: 17) #=> #<Date: 2022-06-22>
|
|
67
|
+
#
|
|
68
|
+
# @example if used with or without Rails (Active Support)
|
|
69
|
+
# Faker::Date.forward(from: '2022-06-03', days: 10) #=> #<Date: 2022-10-13>
|
|
70
|
+
#
|
|
62
71
|
# @faker.version 1.0.0
|
|
63
|
-
def forward(days: 365)
|
|
64
|
-
|
|
65
|
-
|
|
72
|
+
def forward(from: ::Date.today, days: 365)
|
|
73
|
+
start_date = get_date_object(from)
|
|
74
|
+
since = start_date + 1
|
|
75
|
+
to = start_date + days
|
|
66
76
|
|
|
67
|
-
between(from:
|
|
77
|
+
between(from: since, to: to).to_date
|
|
68
78
|
end
|
|
69
79
|
|
|
70
80
|
##
|
|
@@ -128,6 +138,52 @@ module Faker
|
|
|
128
138
|
between(from: from, to: to).to_date
|
|
129
139
|
end
|
|
130
140
|
|
|
141
|
+
##
|
|
142
|
+
# Produce a random date at given day(s) of the week between two dates.
|
|
143
|
+
#
|
|
144
|
+
# @param day [Symbol, Array<Symbol>] # The day(s) of the week. See {DAYS_OF_WEEK}.
|
|
145
|
+
# @param from [Date, String] The start of the usable date range.
|
|
146
|
+
# @param to [Date, String] The end of the usable date range.
|
|
147
|
+
# @return [Date]
|
|
148
|
+
#
|
|
149
|
+
# @example if used with or without Rails (Active Support)
|
|
150
|
+
# Faker::Date.on_day_of_week_between(day: :tuesday, from: '2023-01-01', to: '2023-02-01') #=> #<Date: 2032-01-10>
|
|
151
|
+
#
|
|
152
|
+
# @example if used with Rails (Active Support)
|
|
153
|
+
# Faker::Date.on_day_of_week_between(day: [:saturday, :sunday], from: 1.month.ago, to: Date.today) #=> #<Date: 2014-09-24>
|
|
154
|
+
#
|
|
155
|
+
# @faker.version next
|
|
156
|
+
def on_day_of_week_between(day:, from:, to:)
|
|
157
|
+
days = [day].flatten
|
|
158
|
+
raise ArgumentError, 'Day of week cannot be empty' if days.empty?
|
|
159
|
+
|
|
160
|
+
# Convert given days of the week to numbers used by `Date#wday` method
|
|
161
|
+
numeric_weekdays = days.map do |d|
|
|
162
|
+
DAYS_OF_WEEK.index(d.to_sym.downcase) || raise(ArgumentError, "#{d} is not a valid day of the week")
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
from = get_date_object(from)
|
|
166
|
+
to = get_date_object(to)
|
|
167
|
+
date = Faker::Base.rand_in_range(from, to)
|
|
168
|
+
|
|
169
|
+
# If the initial date is not on one of the wanted days of the week...
|
|
170
|
+
unless numeric_weekdays.include? date.wday
|
|
171
|
+
# ...pick a date nearby that is on one of the wanted days of the week instead
|
|
172
|
+
date += sample(numeric_weekdays) - date.wday
|
|
173
|
+
|
|
174
|
+
# Move date 1 week earlier or later if the adjusted date is now outside the date range
|
|
175
|
+
date += 7 if date < from
|
|
176
|
+
date -= 7 if date > to
|
|
177
|
+
|
|
178
|
+
if date > to || date < from
|
|
179
|
+
raise ArgumentError,
|
|
180
|
+
"There is no #{DAYS_OF_WEEK[date.wday].capitalize} between #{from} and #{to}. Increase the from/to date range or choose a different day of the week."
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
date
|
|
185
|
+
end
|
|
186
|
+
|
|
131
187
|
private
|
|
132
188
|
|
|
133
189
|
def birthday_date(date, age)
|
|
@@ -98,17 +98,28 @@ module Faker
|
|
|
98
98
|
end
|
|
99
99
|
|
|
100
100
|
def gb_licence_year(dob, gender)
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
101
|
+
generate(:string) do |g|
|
|
102
|
+
g.computed do
|
|
103
|
+
(dob.year / 10) % 10
|
|
104
|
+
end
|
|
105
|
+
g.computed do
|
|
106
|
+
gender_marker = gender == :female ? 50 : 0
|
|
107
|
+
format('%02d', (dob.month + gender_marker))
|
|
108
|
+
end
|
|
109
|
+
g.computed do
|
|
110
|
+
format('%02d', dob.day)
|
|
111
|
+
end
|
|
112
|
+
g.computed do
|
|
113
|
+
dob.year % 10
|
|
114
|
+
end
|
|
115
|
+
end
|
|
108
116
|
end
|
|
109
117
|
|
|
110
118
|
def gb_licence_checksum
|
|
111
|
-
|
|
119
|
+
generate(:string) do |g|
|
|
120
|
+
g.int
|
|
121
|
+
g.letter(ranges: ['A'..'Z'], length: 2)
|
|
122
|
+
end
|
|
112
123
|
end
|
|
113
124
|
end
|
|
114
125
|
end
|