faker 3.2.0 → 3.2.1
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/README.md +4 -3
- data/lib/faker/default/chile_rut.rb +23 -17
- data/lib/faker/default/code.rb +60 -18
- data/lib/faker/default/company.rb +31 -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/release notes.md +59 -0
- 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/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/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/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/uk.yml +2 -0
- metadata +13 -143
@@ -46,9 +46,23 @@ module Faker
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def ssn_valid
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
generate(:string) do |g|
|
50
|
+
g.computed(name: :first) do
|
51
|
+
range = [1..665, 667..899].sample(random: Faker::Config.random)
|
52
|
+
n = Faker::Base.rand(range)
|
53
|
+
format('%03d', n)
|
54
|
+
end
|
55
|
+
g.lit('-')
|
56
|
+
g.computed(name: :second) do
|
57
|
+
n = Faker::Base.rand(1..99)
|
58
|
+
format('%02d', n)
|
59
|
+
end
|
60
|
+
g.lit('-')
|
61
|
+
g.computed(name: :third) do
|
62
|
+
n = Faker::Base.rand(1..9999)
|
63
|
+
format('%04d', n)
|
64
|
+
end
|
65
|
+
end
|
52
66
|
end
|
53
67
|
|
54
68
|
##
|
@@ -159,7 +159,8 @@ module Faker
|
|
159
159
|
#
|
160
160
|
# @faker.version 2.1.3
|
161
161
|
def password(min_length: 8, max_length: 16, mix_case: true, special_characters: false)
|
162
|
-
raise ArgumentError, 'max_length must be
|
162
|
+
raise ArgumentError, 'min_length and max_length must be greater than or equal to one' if min_length < 1 || max_length < 1
|
163
|
+
raise ArgumentError, 'min_length must be smaller than or equal to max_length' unless min_length <= max_length
|
163
164
|
|
164
165
|
character_types = []
|
165
166
|
required_min_length = 0
|
@@ -182,27 +183,27 @@ module Faker
|
|
182
183
|
character_bag = []
|
183
184
|
|
184
185
|
# use lower_chars by default and add upper_chars if mix_case
|
185
|
-
lower_chars =
|
186
|
-
password <<
|
186
|
+
lower_chars = self::LLetters
|
187
|
+
password << sample(lower_chars)
|
187
188
|
character_bag += lower_chars
|
188
189
|
|
189
|
-
digits = ('
|
190
|
-
password <<
|
190
|
+
digits = ('0'..'9').to_a
|
191
|
+
password << sample(digits)
|
191
192
|
character_bag += digits
|
192
193
|
|
193
|
-
if
|
194
|
-
upper_chars =
|
195
|
-
password <<
|
194
|
+
if mix_case
|
195
|
+
upper_chars = self::ULetters
|
196
|
+
password << sample(upper_chars)
|
196
197
|
character_bag += upper_chars
|
197
198
|
end
|
198
199
|
|
199
|
-
if
|
200
|
+
if special_characters
|
200
201
|
special_chars = %w[! @ # $ % ^ & *]
|
201
|
-
password <<
|
202
|
+
password << sample(special_chars)
|
202
203
|
character_bag += special_chars
|
203
204
|
end
|
204
205
|
|
205
|
-
password <<
|
206
|
+
password << sample(character_bag) while password.length < target_length
|
206
207
|
|
207
208
|
shuffle(password).join
|
208
209
|
end
|
data/lib/faker/default/lorem.rb
CHANGED
@@ -10,10 +10,13 @@ module Faker
|
|
10
10
|
#
|
11
11
|
# @example
|
12
12
|
# Faker::Lorem.word #=> "soluto"
|
13
|
+
# Faker::Lorem.word(exclude_words: 'error') #=> "nisi"
|
14
|
+
# Faker::Lorem.word(exclude_words: 'id, error') #=> "et"
|
15
|
+
# Faker::Lorem.word(exclude_words: ['id', 'error']) #=> "consequatur"
|
13
16
|
#
|
14
17
|
# @faker.version 2.1.3
|
15
|
-
def word
|
16
|
-
|
18
|
+
def word(exclude_words: nil)
|
19
|
+
words(number: 1, exclude_words: exclude_words).first
|
17
20
|
end
|
18
21
|
|
19
22
|
##
|
@@ -0,0 +1,59 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
## What's Changed
|
4
|
+
* Add Final Fantasy XIV by @old-dead-account in https://github.com/faker-ruby/faker/pull/2742
|
5
|
+
* Update rubocop requirement from = 1.50.1 to = 1.50.2 by @dependabot in https://github.com/faker-ruby/faker/pull/2752
|
6
|
+
* Update South Park by @IvanReyesO7 in https://github.com/faker-ruby/faker/pull/2744
|
7
|
+
* add tests for password and fix an edge case by @DeepakRaj228 in https://github.com/faker-ruby/faker/pull/2741
|
8
|
+
* Speed up Internet::Password generation using constants by @MicBruz in https://github.com/faker-ruby/faker/pull/2725
|
9
|
+
* Add the Ukrainian country calling code by @kyrylo in https://github.com/faker-ruby/faker/pull/2758
|
10
|
+
* Update test-unit requirement from = 3.5.7 to = 3.5.8 by @dependabot in https://github.com/faker-ruby/faker/pull/2760
|
11
|
+
* Bump i18n from 1.12.0 to 1.13.0 by @dependabot in https://github.com/faker-ruby/faker/pull/2756
|
12
|
+
* Update rubocop-minitest requirement from = 0.30.0 to = 0.31.0 by @dependabot in https://github.com/faker-ruby/faker/pull/2759
|
13
|
+
* Remove broken chars from minecraft.yml by @ujihisa in https://github.com/faker-ruby/faker/pull/2765
|
14
|
+
* Update test-unit requirement from = 3.5.8 to = 3.5.9 by @dependabot in https://github.com/faker-ruby/faker/pull/2766
|
15
|
+
* Add `exclude_words` filter to `Faker::Lorem.word` generator by @geophilusd in https://github.com/faker-ruby/faker/pull/2761
|
16
|
+
* Improve de-CH locale with new formats and content by @stefnnn in https://github.com/faker-ruby/faker/pull/2768
|
17
|
+
* Add Japanese translations for Sports category. by @yamat47 in https://github.com/faker-ruby/faker/pull/2770
|
18
|
+
* Fix flaky specs for `name` and `id` by @ruban-thilak in https://github.com/faker-ruby/faker/pull/2782
|
19
|
+
* Add type support for Faker::Types.rb_array by @ruban-thilak in https://github.com/faker-ruby/faker/pull/2771
|
20
|
+
* Added Archer into tv category. by @lepari23 in https://github.com/faker-ruby/faker/pull/2750
|
21
|
+
* Add train station generator by @AngusDSR in https://github.com/faker-ruby/faker/pull/2755
|
22
|
+
* Fixes `Faker::Music::Opera.saint_saens` issue by @devashishTaneja in https://github.com/faker-ruby/faker/pull/2792
|
23
|
+
* Add custom start date for `Faker::Date.forward` by @luciagirasoles in https://github.com/faker-ruby/faker/pull/2791
|
24
|
+
* Fix flaky specs for dota `test_player` by @ruban-thilak in https://github.com/faker-ruby/faker/pull/2798
|
25
|
+
* Update minitest requirement from = 5.18.0 to = 5.18.1 by @dependabot in https://github.com/faker-ruby/faker/pull/2781
|
26
|
+
* Update test-unit requirement from = 3.5.9 to = 3.6.1 by @dependabot in https://github.com/faker-ruby/faker/pull/2788
|
27
|
+
* Introduce PositionalGenerator by @mike-burns in https://github.com/faker-ruby/faker/pull/2710
|
28
|
+
* Bump rubocop 1.54.2 + offenses fixes by @stefannibrasil in https://github.com/faker-ruby/faker/pull/2801
|
29
|
+
* Add prefixes to french name locale (`Faker::Name.name`) by @thdaraujo in https://github.com/faker-ruby/faker/pull/2800
|
30
|
+
* Add `max_rut` option to `Faker::ChileRut.rut` by @hacktivista in https://github.com/faker-ruby/faker/pull/2778
|
31
|
+
* Fix locale setting by @mateusdeap in https://github.com/faker-ruby/faker/pull/2734
|
32
|
+
* Test default locale + and update README by @stefannibrasil in https://github.com/faker-ruby/faker/pull/2802
|
33
|
+
* Bump minitest from 5.18.1 to 5.19.0 by @dependabot in https://github.com/faker-ruby/faker/pull/2804
|
34
|
+
* Bump rubocop from 1.54.2 to 1.55.0 by @dependabot in https://github.com/faker-ruby/faker/pull/2803
|
35
|
+
* Bump rubocop from 1.55.0 to 1.55.1 by @dependabot in https://github.com/faker-ruby/faker/pull/2805
|
36
|
+
* Add Faker::Date.day_of_week_between by @aramvisser in https://github.com/faker-ruby/faker/pull/2713
|
37
|
+
* Html generator for Faker by @ruban-thilak in https://github.com/faker-ruby/faker/pull/2769
|
38
|
+
* Bump rubocop from 1.55.1 to 1.56.0 by @dependabot in https://github.com/faker-ruby/faker/pull/2807
|
39
|
+
|
40
|
+
## New Contributors
|
41
|
+
* @old-dead-account made their first contribution in https://github.com/faker-ruby/faker/pull/2742
|
42
|
+
* @IvanReyesO7 made their first contribution in https://github.com/faker-ruby/faker/pull/2744
|
43
|
+
* @DeepakRaj228 made their first contribution in https://github.com/faker-ruby/faker/pull/2741
|
44
|
+
* @MicBruz made their first contribution in https://github.com/faker-ruby/faker/pull/2725
|
45
|
+
* @kyrylo made their first contribution in https://github.com/faker-ruby/faker/pull/2758
|
46
|
+
* @ujihisa made their first contribution in https://github.com/faker-ruby/faker/pull/2765
|
47
|
+
* @geophilusd made their first contribution in https://github.com/faker-ruby/faker/pull/2761
|
48
|
+
* @stefnnn made their first contribution in https://github.com/faker-ruby/faker/pull/2768
|
49
|
+
* @yamat47 made their first contribution in https://github.com/faker-ruby/faker/pull/2770
|
50
|
+
* @ruban-thilak made their first contribution in https://github.com/faker-ruby/faker/pull/2782
|
51
|
+
* @lepari23 made their first contribution in https://github.com/faker-ruby/faker/pull/2750
|
52
|
+
* @AngusDSR made their first contribution in https://github.com/faker-ruby/faker/pull/2755
|
53
|
+
* @devashishTaneja made their first contribution in https://github.com/faker-ruby/faker/pull/2792
|
54
|
+
* @mike-burns made their first contribution in https://github.com/faker-ruby/faker/pull/2710
|
55
|
+
* @hacktivista made their first contribution in https://github.com/faker-ruby/faker/pull/2778
|
56
|
+
* @mateusdeap made their first contribution in https://github.com/faker-ruby/faker/pull/2734
|
57
|
+
* @aramvisser made their first contribution in https://github.com/faker-ruby/faker/pull/2713
|
58
|
+
|
59
|
+
**Full Changelog**: https://github.com/faker-ruby/faker/compare/v3.2.0...v3.2.1
|
data/lib/faker/default/types.rb
CHANGED
@@ -97,12 +97,13 @@ module Faker
|
|
97
97
|
# @example
|
98
98
|
# Faker::Types.rb_array #=> ["a"]
|
99
99
|
# Faker::Types.rb_array(len: 4) #=> ["a", 1, 2, "bob"]
|
100
|
+
# Faker::Types.rb_array(len: 2, type: -> { Faker::Types.rb_string }) #=> ["cat", "foo"]
|
100
101
|
#
|
101
102
|
# @faker.version 1.8.6
|
102
|
-
def rb_array(len: 1)
|
103
|
+
def rb_array(len: 1, type: -> { random_type })
|
103
104
|
[].tap do |ar|
|
104
105
|
len.times do
|
105
|
-
ar.push
|
106
|
+
ar.push type.is_a?(Proc) ? type.call : type
|
106
107
|
end
|
107
108
|
end
|
108
109
|
end
|
@@ -22,14 +22,25 @@ module Faker
|
|
22
22
|
#
|
23
23
|
# @faker.version 1.6.4
|
24
24
|
def vin
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
25
|
+
generate(:string) do |g|
|
26
|
+
g.letter(name: :wmi, ranges: ['100'..'199', '400'..'499', '500'..'599', '700'..'799', '7A0'..'7F9'])
|
27
|
+
g.letter(name: :vds, length: 5, ranges: [VIN_KEYSPACE])
|
28
|
+
g.computed(name: :checksum, deps: %i[wmi vds model_year plant_code vis]) do |wmi, vds, model_year, plant_code, vis|
|
29
|
+
checksum = "#{wmi}#{vds}0#{model_year}#{plant_code}#{vis}".chars.each_with_index.map do |char, i|
|
30
|
+
value = (char =~ /\A\d\z/ ? char.to_i : VIN_TRANSLITERATION[char.to_sym])
|
31
|
+
value * VIN_WEIGHT[i]
|
32
|
+
end.inject(:+) % 11
|
33
|
+
|
34
|
+
if checksum == 10
|
35
|
+
'X'
|
36
|
+
else
|
37
|
+
checksum
|
38
|
+
end
|
39
|
+
end
|
40
|
+
g.letter(name: :model_year, length: 1, ranges: [VIN_KEYSPACE - %w[U Z 0]])
|
41
|
+
g.letter(name: :plant_code, length: 1, ranges: [VIN_KEYSPACE])
|
42
|
+
g.int(name: :vis, length: 6)
|
43
|
+
end
|
33
44
|
end
|
34
45
|
|
35
46
|
# Produces a random vehicle manufacturer.
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Faker
|
4
|
+
class Games
|
5
|
+
class FinalFantasyXIV < Base
|
6
|
+
class << self
|
7
|
+
##
|
8
|
+
# Produces the name of a character from FFXIV.
|
9
|
+
#
|
10
|
+
# @return [String]
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# Faker::Games::FinalFantasyXIV.character #=> "Y'shtola Rhul"
|
14
|
+
#
|
15
|
+
# @faker.version next
|
16
|
+
def character
|
17
|
+
fetch('games.final_fantasy_xiv.characters')
|
18
|
+
end
|
19
|
+
|
20
|
+
##
|
21
|
+
# Produces a job name from Final Fantasy XIV. Either a battle or non-battle playable job.
|
22
|
+
#
|
23
|
+
# @return [String]
|
24
|
+
#
|
25
|
+
# @example
|
26
|
+
# Faker::Games::FinalFantasyXIV.job #=> "Paladin"
|
27
|
+
#
|
28
|
+
# @faker.version next
|
29
|
+
def job
|
30
|
+
fetch('games.final_fantasy_xiv.jobs')
|
31
|
+
end
|
32
|
+
|
33
|
+
# Produces the name of a playable race from Final Fantasy XIV.
|
34
|
+
#
|
35
|
+
# @return [String]
|
36
|
+
#
|
37
|
+
# @example
|
38
|
+
# Faker::Games::FinalFantasyXIV.race #=> "Miqo'te"
|
39
|
+
#
|
40
|
+
# @faker.version next
|
41
|
+
def race
|
42
|
+
fetch('games.final_fantasy_xiv.races')
|
43
|
+
end
|
44
|
+
|
45
|
+
##
|
46
|
+
# Produces a data center from Final Fantasy XIV.
|
47
|
+
#
|
48
|
+
# @return [String]
|
49
|
+
#
|
50
|
+
# @example
|
51
|
+
# Faker::Games::FinalFantasyXIV.data_center #=> "Aether"
|
52
|
+
#
|
53
|
+
# @faker.version next
|
54
|
+
def data_center
|
55
|
+
fetch('games.final_fantasy_xiv.data_centers')
|
56
|
+
end
|
57
|
+
|
58
|
+
##
|
59
|
+
# Produces a geographical zone from Final Fantasy XIV.
|
60
|
+
#
|
61
|
+
# @return [String]
|
62
|
+
#
|
63
|
+
# @example
|
64
|
+
# Faker::Games::FinalFantasyXIV.zone #=> "Eastern La Noscea"
|
65
|
+
#
|
66
|
+
# @faker.version next
|
67
|
+
def zone
|
68
|
+
fetch('games.final_fantasy_xiv.zones')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
data/lib/faker/travel/airport.rb
CHANGED
@@ -11,7 +11,7 @@ module Faker
|
|
11
11
|
#
|
12
12
|
# @param region [String] airport region, currently available -> united_states or european_union
|
13
13
|
#
|
14
|
-
# @
|
14
|
+
# @return [String]
|
15
15
|
#
|
16
16
|
# @example
|
17
17
|
# Faker::Travel::Airport.name(size: 'large', region: 'united_states') => "Los Angeles International Airport"
|
@@ -28,7 +28,7 @@ module Faker
|
|
28
28
|
#
|
29
29
|
# @param region [String] airport region, currently available -> united_states or european_union
|
30
30
|
#
|
31
|
-
# @
|
31
|
+
# @return [String]
|
32
32
|
#
|
33
33
|
# @example
|
34
34
|
# Faker::Travel::Airport.iata(size: 'large', region: 'united_states') => "LAX"
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Faker
|
4
|
+
class Travel
|
5
|
+
class TrainStation < Base
|
6
|
+
class << self
|
7
|
+
##
|
8
|
+
# Produces random Train Station by name and takes optional arguments for region and type
|
9
|
+
#
|
10
|
+
# @param region [String] Train station region: germany, spain, united_kingdom, united_states
|
11
|
+
#
|
12
|
+
# @param type [String] Train station type: metro, railway
|
13
|
+
#
|
14
|
+
# @return [String]
|
15
|
+
#
|
16
|
+
# @examples
|
17
|
+
# Faker::Travel::TrainStation.name(region: 'united_kingdom', type: 'metro') => "Brockley"
|
18
|
+
# Faker::Travel::TrainStation.name(type: 'railway') => "Düsseldorf Hauptbahnhof"
|
19
|
+
# Faker::Travel::TrainStation.name(region: 'spain') => "Santa Eulàlia"
|
20
|
+
#
|
21
|
+
# @faker.version next
|
22
|
+
def name(region: nil, type: nil)
|
23
|
+
region, type = fill_missing_inputs_with_samples(region, type)
|
24
|
+
fetch("train_station.#{region}.#{type}")
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def fill_missing_inputs_with_samples(region, type)
|
30
|
+
regions = %w[germany spain united_kingdom united_states]
|
31
|
+
types = %w[metro railway]
|
32
|
+
|
33
|
+
if region.nil? && type.nil?
|
34
|
+
region = sample(regions)
|
35
|
+
type = sample(types)
|
36
|
+
elsif region.nil?
|
37
|
+
validate_arguments(type, types, 'type')
|
38
|
+
region = sample(regions)
|
39
|
+
elsif type.nil?
|
40
|
+
validate_arguments(region, regions, 'region')
|
41
|
+
type = sample(types)
|
42
|
+
end
|
43
|
+
[region, type]
|
44
|
+
end
|
45
|
+
|
46
|
+
def validate_arguments(argument, correct_values, argument_name)
|
47
|
+
return if correct_values.include?(argument)
|
48
|
+
|
49
|
+
raise ArgumentError, "'#{argument}' not found, #{argument_name} can be blank, or one of the following, as strings: #{correct_values.join(', ')}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Faker
|
4
|
+
class TvShows
|
5
|
+
class Archer < Base
|
6
|
+
flexible :archer
|
7
|
+
|
8
|
+
class << self
|
9
|
+
##
|
10
|
+
# Produces a character from Archer.
|
11
|
+
#
|
12
|
+
# @return [String]
|
13
|
+
#
|
14
|
+
# @example
|
15
|
+
# Faker::TvShows::Archer.character #=> "Sterling Archer"
|
16
|
+
#
|
17
|
+
# @faker.version next
|
18
|
+
def character
|
19
|
+
fetch('archer.characters')
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# Produces a location from Archer.
|
24
|
+
#
|
25
|
+
# @return [String]
|
26
|
+
#
|
27
|
+
# @example
|
28
|
+
# Faker::TvShows::Archer.location #=> "The Tuntmore Towers"
|
29
|
+
#
|
30
|
+
# @faker.version next
|
31
|
+
def location
|
32
|
+
fetch('archer.locations')
|
33
|
+
end
|
34
|
+
|
35
|
+
##
|
36
|
+
# Produces a quote from Archer.
|
37
|
+
#
|
38
|
+
# @return [String]
|
39
|
+
#
|
40
|
+
# @example
|
41
|
+
# Faker::TvShows::Archer.quote
|
42
|
+
# #=> "You're not my supervisor!"
|
43
|
+
#
|
44
|
+
# @faker.version next
|
45
|
+
def quote
|
46
|
+
fetch('archer.quotes')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -32,6 +32,21 @@ module Faker
|
|
32
32
|
def quote
|
33
33
|
fetch('south_park.quotes')
|
34
34
|
end
|
35
|
+
|
36
|
+
##
|
37
|
+
# Produces an episode name from South Park.
|
38
|
+
#
|
39
|
+
# @return [String]
|
40
|
+
#
|
41
|
+
# @example
|
42
|
+
# Faker::TvShows::SouthPark.episode_name
|
43
|
+
# #=> "Make Love, Not Warcraft"
|
44
|
+
#
|
45
|
+
# @faker.version next
|
46
|
+
|
47
|
+
def episode_name
|
48
|
+
fetch('south_park.episodes')
|
49
|
+
end
|
35
50
|
end
|
36
51
|
end
|
37
52
|
end
|
data/lib/faker/version.rb
CHANGED
data/lib/faker.rb
CHANGED
@@ -11,14 +11,18 @@ I18n.load_path += Dir[File.join(mydir, 'locales', '**/*.yml')]
|
|
11
11
|
|
12
12
|
module Faker
|
13
13
|
module Config
|
14
|
+
@default_locale = nil
|
15
|
+
|
14
16
|
class << self
|
17
|
+
attr_writer :default_locale
|
18
|
+
|
15
19
|
def locale=(new_locale)
|
16
20
|
Thread.current[:faker_config_locale] = new_locale
|
17
21
|
end
|
18
22
|
|
19
23
|
def locale
|
20
24
|
# Because I18n.locale defaults to :en, if we don't have :en in our available_locales, errors will happen
|
21
|
-
Thread.current[:faker_config_locale] || (I18n.available_locales.include?(I18n.locale) ? I18n.locale : I18n.available_locales.first)
|
25
|
+
Thread.current[:faker_config_locale] || @default_locale || (I18n.available_locales.include?(I18n.locale) ? I18n.locale : I18n.available_locales.first)
|
22
26
|
end
|
23
27
|
|
24
28
|
def own_locale
|
@@ -48,19 +52,23 @@ module Faker
|
|
48
52
|
|
49
53
|
## by default numerify results do not start with a zero
|
50
54
|
def numerify(number_string, leading_zero: false)
|
51
|
-
return number_string.gsub(
|
55
|
+
return number_string.gsub('#') { rand(10).to_s } if leading_zero
|
52
56
|
|
53
|
-
number_string.sub(
|
57
|
+
number_string.sub('#') { rand(1..9).to_s }.gsub('#') { rand(10).to_s }
|
54
58
|
end
|
55
59
|
|
56
60
|
def letterify(letter_string)
|
57
|
-
letter_string.gsub(
|
61
|
+
letter_string.gsub('?') { sample(ULetters) }
|
58
62
|
end
|
59
63
|
|
60
64
|
def bothify(string)
|
61
65
|
letterify(numerify(string))
|
62
66
|
end
|
63
67
|
|
68
|
+
def generate(as_type, &block)
|
69
|
+
PositionalGenerator.new(as_type, &block).generate
|
70
|
+
end
|
71
|
+
|
64
72
|
# Given a regular expression, attempt to generate a string
|
65
73
|
# that would match it. This is a rather simple implementation,
|
66
74
|
# so don't be shocked if it blows up on you in a spectacular fashion.
|
@@ -84,7 +92,7 @@ module Faker
|
|
84
92
|
reg = reg.source if reg.respond_to?(:source) # Handle either a Regexp or a String that looks like a Regexp
|
85
93
|
reg
|
86
94
|
.gsub(%r{^/?\^?}, '').gsub(%r{\$?/?$}, '') # Ditch the anchors
|
87
|
-
.gsub(/\{(\d+)\}/, '{\1,\1}').gsub(
|
95
|
+
.gsub(/\{(\d+)\}/, '{\1,\1}').gsub('?', '{0,1}') # All {2} become {2,2} and ? become {0,1}
|
88
96
|
.gsub(/(\[[^\]]+\])\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # [12]{1,2} becomes [12] or [12][12]
|
89
97
|
.gsub(/(\([^)]+\))\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # (12|34){1,2} becomes (12|34) or (12|34)(12|34)
|
90
98
|
.gsub(/(\\?.)\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # A{1,2} becomes A or AA or \d{3} becomes \d\d\d
|