faker 3.2.0 → 3.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|