faker 1.8.7 → 1.9.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/CHANGELOG.md +146 -6
- data/README.md +44 -4
- data/lib/extensions/array.rb +10 -10
- data/lib/extensions/symbol.rb +0 -1
- data/lib/faker.rb +42 -35
- data/lib/faker/address.rb +39 -13
- data/lib/faker/app.rb +1 -3
- data/lib/faker/appliance.rb +13 -0
- data/lib/faker/avatar.rb +2 -2
- data/lib/faker/bank.rb +72 -15
- data/lib/faker/beer.rb +0 -1
- data/lib/faker/bitcoin.rb +4 -5
- data/lib/faker/bojack_horseman.rb +17 -0
- data/lib/faker/breaking_bad.rb +0 -3
- data/lib/faker/business.rb +1 -2
- data/lib/faker/cannabis.rb +42 -0
- data/lib/faker/chuck_norris.rb +3 -2
- data/lib/faker/code.rb +59 -20
- data/lib/faker/coffee.rb +4 -0
- data/lib/faker/color.rb +2 -2
- data/lib/faker/commerce.rb +3 -4
- data/lib/faker/community.rb +13 -0
- data/lib/faker/company.rb +80 -24
- data/lib/faker/currency.rb +17 -0
- data/lib/faker/date.rb +13 -27
- data/lib/faker/demographic.rb +2 -2
- data/lib/faker/device.rb +29 -0
- data/lib/faker/dota.rb +25 -0
- data/lib/faker/dr_who.rb +7 -8
- data/lib/faker/dumb_and_dumber.rb +1 -1
- data/lib/faker/dune.rb +4 -4
- data/lib/faker/elder_scrolls.rb +16 -0
- data/lib/faker/electrical_components.rb +19 -0
- data/lib/faker/ethereum.rb +12 -0
- data/lib/faker/famous_last_words.rb +11 -0
- data/lib/faker/file.rb +2 -5
- data/lib/faker/fillmurray.rb +3 -4
- data/lib/faker/finance.rb +3 -4
- data/lib/faker/food.rb +21 -1
- data/lib/faker/football.rb +21 -0
- data/lib/faker/gender.rb +13 -0
- data/lib/faker/greek_philosophers.rb +13 -0
- data/lib/faker/hacker.rb +9 -11
- data/lib/faker/harry_potter.rb +4 -0
- data/lib/faker/hipster.rb +12 -4
- data/lib/faker/id_number.rb +24 -9
- data/lib/faker/internet.rb +69 -57
- data/lib/faker/invoice.rb +94 -0
- data/lib/faker/job.rb +10 -3
- data/lib/faker/lebowski.rb +2 -2
- data/lib/faker/lord_of_the_rings.rb +5 -1
- data/lib/faker/lorem.rb +32 -8
- data/lib/faker/lorem_flickr.rb +43 -0
- data/lib/faker/lorem_pixel.rb +20 -5
- data/lib/faker/lovecraft.rb +12 -5
- data/lib/faker/markdown.rb +12 -4
- data/lib/faker/measurement.rb +35 -80
- data/lib/faker/michael_scott.rb +9 -0
- data/lib/faker/military.rb +25 -0
- data/lib/faker/music.rb +13 -1
- data/lib/faker/myst.rb +25 -0
- data/lib/faker/name.rb +22 -8
- data/lib/faker/nation.rb +24 -0
- data/lib/faker/nato_phonetic_alphabet.rb +9 -0
- data/lib/faker/new_girl.rb +13 -0
- data/lib/faker/number.rb +12 -12
- data/lib/faker/omniauth.rb +110 -122
- data/lib/faker/parks_and_rec.rb +13 -0
- data/lib/faker/phone_number.rb +11 -19
- data/lib/faker/placeholdit.rb +11 -2
- data/lib/faker/princess_bride.rb +13 -0
- data/lib/faker/rick_and_morty.rb +1 -1
- data/lib/faker/science.rb +4 -2
- data/lib/faker/seinfeld.rb +1 -1
- data/lib/faker/shakespeare.rb +0 -3
- data/lib/faker/silicon_valley.rb +4 -0
- data/lib/faker/simpsons.rb +3 -8
- data/lib/faker/singular_siegler.rb +9 -0
- data/lib/faker/slack_emoji.rb +0 -2
- data/lib/faker/source.rb +18 -0
- data/lib/faker/space.rb +4 -0
- data/lib/faker/star_trek.rb +2 -2
- data/lib/faker/star_wars.rb +5 -6
- data/lib/faker/stranger_thing.rb +13 -0
- data/lib/faker/string.rb +45 -0
- data/lib/faker/stripe.rb +63 -0
- data/lib/faker/sword_art_online.rb +21 -0
- data/lib/faker/team.rb +4 -1
- data/lib/faker/the_it_crowd.rb +21 -0
- data/lib/faker/time.rb +10 -10
- data/lib/faker/twin_peaks.rb +2 -2
- data/lib/faker/twitter.rb +1 -1
- data/lib/faker/types.rb +36 -40
- data/lib/faker/university.rb +3 -3
- data/lib/faker/vehicle.rb +72 -10
- data/lib/faker/verb.rb +25 -0
- data/lib/faker/version.rb +1 -1
- data/lib/faker/world_cup.rb +25 -0
- data/lib/helpers/char.rb +19 -20
- data/lib/helpers/unique_generator.rb +7 -1
- data/lib/locales/ca-CAT.yml +1 -1
- data/lib/locales/da-DK.yml +1 -0
- data/lib/locales/de-AT.yml +3 -2
- data/lib/locales/de.yml +6 -5
- data/lib/locales/ee.yml +59 -0
- data/lib/locales/en-CA.yml +23 -1
- data/lib/locales/en-GB.yml +1 -0
- data/lib/locales/en-NZ.yml +4 -3
- data/lib/locales/en-US.yml +2 -0
- data/lib/locales/en.yml +2 -2
- data/lib/locales/en/appliance.yml +5 -0
- data/lib/locales/en/bank.yml +274 -59
- data/lib/locales/en/bojack_horseman.yml +6 -0
- data/lib/locales/en/cannabis.yml +12 -0
- data/lib/locales/en/community.yml +33 -0
- data/lib/locales/en/currency.yml +6 -0
- data/lib/locales/en/dessert.yml +3 -3
- data/lib/locales/en/device.yml +7 -0
- data/lib/locales/en/dota.yml +102 -0
- data/lib/locales/en/dr_who.yml +5 -1
- data/lib/locales/en/dumb_and_dumber.yml +1 -1
- data/lib/locales/en/elder_scrolls.yml +8 -5
- data/lib/locales/en/electrical_components.yml +6 -0
- data/lib/locales/en/famous_last_words.yml +4 -0
- data/lib/locales/en/food.yml +6 -3
- data/lib/locales/en/football.yml +7 -0
- data/lib/locales/en/gender.yml +5 -0
- data/lib/locales/en/greek_philosophers.yml +26 -0
- data/lib/locales/en/harry_potter.yml +2 -1
- data/lib/locales/en/invoice.yml +6 -0
- data/lib/locales/en/job.yml +2 -2
- data/lib/locales/en/lord_of_the_rings.yml +1 -0
- data/lib/locales/en/lorem.yml +4 -0
- data/lib/locales/en/michael_scott.yml +45 -0
- data/lib/locales/en/military.yml +8 -0
- data/lib/locales/en/music.yml +29 -1
- data/lib/locales/en/myst.yml +47 -0
- data/lib/locales/en/name.yml +13 -12
- data/lib/locales/en/nation.yml +8 -0
- data/lib/locales/en/nato_phonetic_alphabet.yml +4 -0
- data/lib/locales/en/new_girl.yml +40 -0
- data/lib/locales/en/overwatch.yml +3 -2
- data/lib/locales/en/parks_and_rec.yml +7 -0
- data/lib/locales/en/princess_bride.yml +5 -0
- data/lib/locales/en/programming_language.yml +2 -1
- data/lib/locales/en/science.yml +1 -0
- data/lib/locales/en/silicon_valley.yml +1 -0
- data/lib/locales/en/singular_siegler.yml +37 -0
- data/lib/locales/en/source.yml +16 -0
- data/lib/locales/en/space.yml +2 -1
- data/lib/locales/en/star_wars.yml +10 -0
- data/lib/locales/en/stranger_thing.yml +36 -0
- data/lib/locales/en/stripe.yml +42 -0
- data/lib/locales/en/sword_art_online.yml +334 -0
- data/lib/locales/en/team.yml +1 -1
- data/lib/locales/en/the_it_crowd.yml +155 -0
- data/lib/locales/en/vehicle.yml +24 -0
- data/lib/locales/en/verbs.yml +8 -0
- data/lib/locales/en/world_cup.yml +271 -0
- data/lib/locales/es.yml +6 -1
- data/lib/locales/fi-FI.yml +9 -4
- data/lib/locales/fr-CA.yml +90 -0
- data/lib/locales/fr-CH.yml +73 -0
- data/lib/locales/fr.yml +4 -2
- data/lib/locales/it.yml +1 -1
- data/lib/locales/ja.yml +11 -0
- data/lib/locales/lv.yml +53 -0
- data/lib/locales/nl.yml +1 -1
- data/lib/locales/no.yml +7 -0
- data/lib/locales/pl.yml +1 -0
- data/lib/locales/pt-BR.yml +21 -13
- data/lib/locales/pt.yml +1 -0
- data/lib/locales/sv.yml +4 -4
- data/lib/locales/tr.yml +8 -0
- data/lib/locales/uk.yml +9 -0
- metadata +167 -3
data/lib/faker/dune.rb
CHANGED
@@ -26,11 +26,11 @@ module Faker
|
|
26
26
|
|
27
27
|
unless quoted_characters.include?(character.to_sym)
|
28
28
|
raise ArgumentError,
|
29
|
-
|
29
|
+
"Characters quoted can be left blank or #{quoted_characters.join(', ')}"
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
|
33
|
+
fetch('dune.quotes.' + character)
|
34
34
|
end
|
35
35
|
|
36
36
|
def saying(source = nil)
|
@@ -43,11 +43,11 @@ module Faker
|
|
43
43
|
|
44
44
|
unless sourced_sayings.include?(source.to_sym)
|
45
45
|
raise ArgumentError,
|
46
|
-
|
46
|
+
"Sources quoted in sayings can be left blank or #{sourced_sayings.join(', ')}"
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
|
50
|
+
fetch('dune.sayings.' + source)
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
data/lib/faker/elder_scrolls.rb
CHANGED
@@ -5,6 +5,10 @@ module Faker
|
|
5
5
|
fetch('elder_scrolls.race')
|
6
6
|
end
|
7
7
|
|
8
|
+
def city
|
9
|
+
fetch('elder_scrolls.city')
|
10
|
+
end
|
11
|
+
|
8
12
|
def creature
|
9
13
|
fetch('elder_scrolls.creature')
|
10
14
|
end
|
@@ -16,6 +20,18 @@ module Faker
|
|
16
20
|
def dragon
|
17
21
|
fetch('elder_scrolls.dragon')
|
18
22
|
end
|
23
|
+
|
24
|
+
def name
|
25
|
+
"#{fetch('elder_scrolls.first_name')} #{fetch('elder_scrolls.last_name')}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def first_name
|
29
|
+
fetch('elder_scrolls.first_name')
|
30
|
+
end
|
31
|
+
|
32
|
+
def last_name
|
33
|
+
fetch('elder_scrolls.last_name')
|
34
|
+
end
|
19
35
|
end
|
20
36
|
end
|
21
37
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Faker
|
2
|
+
class ElectricalComponents < Base
|
3
|
+
flexible :electrical_components
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def active
|
7
|
+
fetch('electrical_components.active')
|
8
|
+
end
|
9
|
+
|
10
|
+
def passive
|
11
|
+
fetch('electrical_components.passive')
|
12
|
+
end
|
13
|
+
|
14
|
+
def electromechanical
|
15
|
+
fetch('electrical_components.electromechanical')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/faker/file.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
module Faker
|
2
2
|
class File < Base
|
3
3
|
class << self
|
4
|
-
|
5
4
|
def extension
|
6
5
|
fetch('file.extension')
|
7
6
|
end
|
@@ -11,14 +10,12 @@ module Faker
|
|
11
10
|
end
|
12
11
|
|
13
12
|
def file_name(dir = nil, name = nil, ext = nil, directory_separator = '/')
|
14
|
-
|
15
|
-
|
16
|
-
name = Faker::Lorem::word.downcase unless name
|
13
|
+
dir ||= Faker::Internet.slug
|
14
|
+
name ||= Faker::Lorem.word.downcase
|
17
15
|
ext ||= extension
|
18
16
|
|
19
17
|
[dir, name].join(directory_separator) + ".#{ext}"
|
20
18
|
end
|
21
|
-
|
22
19
|
end
|
23
20
|
end
|
24
21
|
end
|
data/lib/faker/fillmurray.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
module Faker
|
2
2
|
class Fillmurray < Base
|
3
3
|
class << self
|
4
|
-
|
5
4
|
def image(grayscale = false, width = 200, height = 200)
|
6
|
-
raise ArgumentError,
|
7
|
-
raise ArgumentError,
|
8
|
-
raise ArgumentError,
|
5
|
+
raise ArgumentError, 'Width should be a number' unless width.to_s =~ /^\d+$/
|
6
|
+
raise ArgumentError, 'Height should be a number' unless height.to_s =~ /^\d+$/
|
7
|
+
raise ArgumentError, 'Grayscale should be a boolean' unless [true, false].include?(grayscale)
|
9
8
|
|
10
9
|
grayscale == true ? "https://fillmurray.com/g/#{width}/#{height}" : "https://fillmurray.com/#{width}/#{height}"
|
11
10
|
end
|
data/lib/faker/finance.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
module Faker
|
2
2
|
class Finance < Base
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
:maestro, :forbrugsforeningen, :laser].freeze
|
3
|
+
CREDIT_CARD_TYPES = %i[visa mastercard discover american_express
|
4
|
+
diners_club jcb switch solo dankort
|
5
|
+
maestro forbrugsforeningen laser].freeze
|
7
6
|
|
8
7
|
class << self
|
9
8
|
def credit_card(*types)
|
data/lib/faker/food.rb
CHANGED
@@ -1,22 +1,42 @@
|
|
1
1
|
module Faker
|
2
2
|
class Food < Base
|
3
3
|
class << self
|
4
|
+
# Retrieves a typical dish from each country
|
4
5
|
def dish
|
5
6
|
fetch('food.dish')
|
6
7
|
end
|
7
8
|
|
9
|
+
# Retrieves a description about some dish
|
10
|
+
def description
|
11
|
+
fetch('food.descriptions')
|
12
|
+
end
|
13
|
+
|
14
|
+
# Retrieves an ingredient
|
8
15
|
def ingredient
|
9
16
|
fetch('food.ingredients')
|
10
17
|
end
|
11
18
|
|
19
|
+
# Retrieves a fruit
|
20
|
+
def fruits
|
21
|
+
fetch('food.fruits')
|
22
|
+
end
|
23
|
+
|
24
|
+
# Retrieves a vegetable
|
25
|
+
def vegetables
|
26
|
+
fetch('food.vegetables')
|
27
|
+
end
|
28
|
+
|
29
|
+
# Retrieves some random spice
|
12
30
|
def spice
|
13
31
|
fetch('food.spices')
|
14
32
|
end
|
15
33
|
|
34
|
+
# Retrieves cooking measures
|
16
35
|
def measurement
|
17
36
|
fetch('food.measurement_sizes') + ' ' + fetch('food.measurements')
|
18
37
|
end
|
19
|
-
|
38
|
+
|
39
|
+
# Retrieves metric mesurements
|
20
40
|
def metric_measurement
|
21
41
|
fetch('food.metric_measurements')
|
22
42
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Faker
|
2
|
+
class Football < Base
|
3
|
+
class << self
|
4
|
+
def team
|
5
|
+
fetch('football.teams')
|
6
|
+
end
|
7
|
+
|
8
|
+
def player
|
9
|
+
fetch('football.players')
|
10
|
+
end
|
11
|
+
|
12
|
+
def coach
|
13
|
+
fetch('football.coaches')
|
14
|
+
end
|
15
|
+
|
16
|
+
def competition
|
17
|
+
fetch('football.competitions')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/faker/gender.rb
ADDED
data/lib/faker/hacker.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#Port of http://shinytoylabs.com/jargon/
|
1
|
+
# Port of http://shinytoylabs.com/jargon/
|
2
2
|
module Faker
|
3
3
|
class Hacker < Base
|
4
4
|
flexible :hacker
|
@@ -29,17 +29,15 @@ module Faker
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def phrases
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
]
|
32
|
+
["If we #{verb} the #{noun}, we can get to the #{abbreviation} #{noun} through the #{adjective} #{abbreviation} #{noun}!",
|
33
|
+
"We need to #{verb} the #{adjective} #{abbreviation} #{noun}!",
|
34
|
+
"Try to #{verb} the #{abbreviation} #{noun}, maybe it will #{verb} the #{adjective} #{noun}!",
|
35
|
+
"You can't #{verb} the #{noun} without #{ingverb} the #{adjective} #{abbreviation} #{noun}!",
|
36
|
+
"Use the #{adjective} #{abbreviation} #{noun}, then you can #{verb} the #{adjective} #{noun}!",
|
37
|
+
"The #{abbreviation} #{noun} is down, #{verb} the #{adjective} #{noun} so we can #{verb} the #{abbreviation} #{noun}!",
|
38
|
+
"#{ingverb} the #{noun} won't do anything, we need to #{verb} the #{adjective} #{abbreviation} #{noun}!".capitalize,
|
39
|
+
"I'll #{verb} the #{adjective} #{abbreviation} #{noun}, that should #{noun} the #{abbreviation} #{noun}!"]
|
41
40
|
end
|
42
41
|
end
|
43
|
-
|
44
42
|
end
|
45
43
|
end
|
data/lib/faker/harry_potter.rb
CHANGED
data/lib/faker/hipster.rb
CHANGED
@@ -3,7 +3,7 @@ module Faker
|
|
3
3
|
class << self
|
4
4
|
def word
|
5
5
|
random_word = sample(translate('faker.hipster.words'))
|
6
|
-
random_word
|
6
|
+
random_word =~ /\s/ ? word : random_word
|
7
7
|
end
|
8
8
|
|
9
9
|
def words(num = 3, supplemental = false, spaces_allowed = false)
|
@@ -12,11 +12,11 @@ module Faker
|
|
12
12
|
translate('faker.hipster.words') +
|
13
13
|
(supplemental ? translate('faker.lorem.words') : [])
|
14
14
|
)
|
15
|
-
word_list
|
15
|
+
word_list *= ((resolved_num / word_list.length) + 1)
|
16
16
|
|
17
17
|
return shuffle(word_list)[0, resolved_num] if spaces_allowed
|
18
18
|
words = shuffle(word_list)[0, resolved_num]
|
19
|
-
words.each_with_index { |w, i| words[i] = word if w
|
19
|
+
words.each_with_index { |w, i| words[i] = word if w =~ /\s/ }
|
20
20
|
end
|
21
21
|
|
22
22
|
def sentence(word_count = 4, supplemental = false, random_words_to_add = 6)
|
@@ -43,7 +43,15 @@ module Faker
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
|
46
|
+
def paragraph_by_chars(chars = 256, supplemental = false)
|
47
|
+
paragraph = paragraph(3, supplemental)
|
48
|
+
|
49
|
+
paragraph += ' ' + paragraph(3, supplemental) while paragraph.length < chars
|
50
|
+
|
51
|
+
paragraph[0...chars - 1] + '.'
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
47
55
|
|
48
56
|
# If an array or range is passed, a random value will be selected.
|
49
57
|
# All other values are simply returned.
|
data/lib/faker/id_number.rb
CHANGED
@@ -1,16 +1,15 @@
|
|
1
1
|
module Faker
|
2
2
|
class IDNumber < Base
|
3
|
-
|
3
|
+
CHECKS = 'TRWAGMYFPDXBNJZSQVHLCKE'.freeze
|
4
4
|
INVALID_SSN = [
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
]
|
5
|
+
/0{3}-\d{2}-\d{4}/,
|
6
|
+
/\d{3}-0{2}-\d{4}/,
|
7
|
+
/\d{3}-\d{2}-0{4}/,
|
8
|
+
/666-\d{2}-\d{4}/,
|
9
|
+
/9\d{2}-\d{2}-\d{4}/
|
10
|
+
].freeze
|
11
11
|
|
12
12
|
class << self
|
13
|
-
|
14
13
|
def valid
|
15
14
|
_translate('valid')
|
16
15
|
end
|
@@ -25,12 +24,28 @@ module Faker
|
|
25
24
|
INVALID_SSN.any? { |regex| regex =~ ssn } ? ssn_valid : ssn
|
26
25
|
end
|
27
26
|
|
27
|
+
def spanish_citizen_number
|
28
|
+
num = Faker::Number.number(8)
|
29
|
+
mod = num.to_i % 23
|
30
|
+
check = CHECKS[mod]
|
31
|
+
"#{num}-#{check}"
|
32
|
+
end
|
33
|
+
|
34
|
+
def spanish_foreign_citizen_number
|
35
|
+
code = 'XYZ'
|
36
|
+
digits = Faker::Number.number(7)
|
37
|
+
prefix = code[rand(code.length)]
|
38
|
+
prefix_val = 'XYZ'.index(prefix).to_s
|
39
|
+
mod = "#{prefix_val}#{digits}".to_i % 23
|
40
|
+
check = CHECKS[mod]
|
41
|
+
"#{prefix}-#{digits}-#{check}"
|
42
|
+
end
|
43
|
+
|
28
44
|
private
|
29
45
|
|
30
46
|
def _translate(key)
|
31
47
|
parse("id_number.#{key}")
|
32
48
|
end
|
33
49
|
end
|
34
|
-
|
35
50
|
end
|
36
51
|
end
|
data/lib/faker/internet.rb
CHANGED
@@ -1,47 +1,53 @@
|
|
1
1
|
module Faker
|
2
2
|
class Internet < Base
|
3
3
|
class << self
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
def email(name = nil, *separators)
|
5
|
+
if separators
|
6
|
+
[username(name, separators), domain_name].join('@')
|
7
|
+
else
|
8
|
+
[username(name), domain_name].join('@')
|
9
|
+
end
|
7
10
|
end
|
8
11
|
|
9
12
|
def free_email(name = nil)
|
10
|
-
[
|
13
|
+
[username(name), fetch('internet.free_email')].join('@')
|
11
14
|
end
|
12
15
|
|
13
16
|
def safe_email(name = nil)
|
14
|
-
[
|
17
|
+
[username(name), 'example.' + sample(%w[org com net])].join('@')
|
15
18
|
end
|
16
19
|
|
17
|
-
def
|
20
|
+
def username(specifier = nil, separators = %w[. _])
|
18
21
|
with_locale(:en) do
|
19
|
-
if specifier.respond_to?(:scan)
|
20
|
-
|
21
|
-
elsif specifier.kind_of?(Integer)
|
22
|
+
return shuffle(specifier.scan(/\w+/)).join(sample(separators)).downcase if specifier.respond_to?(:scan)
|
23
|
+
if specifier.is_a?(Integer)
|
22
24
|
# If specifier is Integer and has large value, Argument error exception is raised to overcome memory full error
|
23
|
-
raise ArgumentError,
|
25
|
+
raise ArgumentError, 'Given argument is too large' if specifier > 10**6
|
24
26
|
tries = 0 # Don't try forever in case we get something like 1_000_000.
|
25
|
-
|
26
|
-
|
27
|
+
result = nil
|
28
|
+
loop do
|
29
|
+
result = username(nil, separators)
|
27
30
|
tries += 1
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
+
break unless result.length < specifier && tries < 7
|
32
|
+
end
|
33
|
+
return result * (specifier / result.length + 1) if specifier > 0
|
34
|
+
elsif specifier.is_a?(Range)
|
31
35
|
tries = 0
|
32
|
-
|
33
|
-
|
36
|
+
result = nil
|
37
|
+
loop do
|
38
|
+
result = username(specifier.min, separators)
|
34
39
|
tries += 1
|
35
|
-
|
40
|
+
break unless !specifier.include?(result.length) && tries < 7
|
41
|
+
end
|
36
42
|
return result[0...specifier.max]
|
37
43
|
end
|
38
44
|
|
39
45
|
sample([
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
46
|
+
Char.prepare(Name.first_name),
|
47
|
+
[Name.first_name, Name.last_name].map do |name|
|
48
|
+
Char.prepare(name)
|
49
|
+
end.join(sample(separators))
|
50
|
+
])
|
45
51
|
end
|
46
52
|
end
|
47
53
|
|
@@ -60,7 +66,7 @@ module Faker
|
|
60
66
|
end
|
61
67
|
|
62
68
|
if special_chars
|
63
|
-
chars = %w
|
69
|
+
chars = %w[! @ # $ % ^ & *]
|
64
70
|
rand(1..min_length).times do |i|
|
65
71
|
temp[i] = chars[rand(chars.length)]
|
66
72
|
end
|
@@ -73,7 +79,7 @@ module Faker
|
|
73
79
|
with_locale(:en) { [Char.prepare(domain_word), domain_suffix].join('.') }
|
74
80
|
end
|
75
81
|
|
76
|
-
def fix_umlauts(string='')
|
82
|
+
def fix_umlauts(string = '')
|
77
83
|
Char.fix_umlauts(string)
|
78
84
|
end
|
79
85
|
|
@@ -85,87 +91,91 @@ module Faker
|
|
85
91
|
fetch('internet.domain_suffix')
|
86
92
|
end
|
87
93
|
|
88
|
-
def mac_address(prefix='')
|
89
|
-
prefix_digits = prefix.split(':').map{ |d| d.to_i(16) }
|
90
|
-
address_digits = (6 - prefix_digits.size)
|
91
|
-
(prefix_digits + address_digits).map{ |d| '%02x'
|
94
|
+
def mac_address(prefix = '')
|
95
|
+
prefix_digits = prefix.split(':').map { |d| d.to_i(16) }
|
96
|
+
address_digits = Array.new((6 - prefix_digits.size)) { rand(256) }
|
97
|
+
(prefix_digits + address_digits).map { |d| format('%02x', d) }.join(':')
|
92
98
|
end
|
93
99
|
|
94
100
|
def ip_v4_address
|
95
101
|
ary = (2..254).to_a
|
96
|
-
[
|
102
|
+
[sample(ary), sample(ary), sample(ary), sample(ary)].join('.')
|
97
103
|
end
|
98
104
|
|
99
105
|
def private_ip_v4_address
|
100
|
-
|
106
|
+
addr = nil
|
107
|
+
loop do
|
101
108
|
addr = ip_v4_address
|
102
|
-
|
109
|
+
break if private_net_checker[addr]
|
110
|
+
end
|
103
111
|
addr
|
104
112
|
end
|
105
113
|
|
106
114
|
def public_ip_v4_address
|
107
|
-
|
115
|
+
addr = nil
|
116
|
+
loop do
|
108
117
|
addr = ip_v4_address
|
109
|
-
|
118
|
+
break unless reserved_net_checker[addr]
|
119
|
+
end
|
110
120
|
addr
|
111
121
|
end
|
112
122
|
|
113
123
|
def private_nets_regex
|
114
124
|
[
|
115
|
-
/^10\./, # 10.0.0.0
|
116
|
-
/^100\.(6[4-9]|[7-9]\d|1[0-1]\d|12[0-7])\./, # 100.64.0.0
|
117
|
-
/^127\./, # 127.0.0.0
|
118
|
-
/^169\.254\./, # 169.254.0.0
|
119
|
-
/^172\.(1[6-9]|2\d|3[0-1])\./, # 172.16.0.0
|
120
|
-
/^192\.0\.0\./, # 192.0.0.0
|
121
|
-
/^192\.168\./, # 192.168.0.0
|
122
|
-
/^198\.(1[8-9])\./ # 198.18.0.0
|
125
|
+
/^10\./, # 10.0.0.0 - 10.255.255.255
|
126
|
+
/^100\.(6[4-9]|[7-9]\d|1[0-1]\d|12[0-7])\./, # 100.64.0.0 - 100.127.255.255
|
127
|
+
/^127\./, # 127.0.0.0 - 127.255.255.255
|
128
|
+
/^169\.254\./, # 169.254.0.0 - 169.254.255.255
|
129
|
+
/^172\.(1[6-9]|2\d|3[0-1])\./, # 172.16.0.0 - 172.31.255.255
|
130
|
+
/^192\.0\.0\./, # 192.0.0.0 - 192.0.0.255
|
131
|
+
/^192\.168\./, # 192.168.0.0 - 192.168.255.255
|
132
|
+
/^198\.(1[8-9])\./ # 198.18.0.0 - 198.19.255.255
|
123
133
|
]
|
124
134
|
end
|
125
135
|
|
126
136
|
def private_net_checker
|
127
|
-
|
137
|
+
->(addr) { private_nets_regex.any? { |net| net =~ addr } }
|
128
138
|
end
|
129
139
|
|
130
140
|
def reserved_nets_regex
|
131
141
|
[
|
132
|
-
/^0\./, # 0.0.0.0
|
133
|
-
/^192\.0\.2\./, # 192.0.2.0
|
134
|
-
/^192\.88\.99\./, # 192.88.99.0
|
135
|
-
/^198\.51\.100\./, # 198.51.100.0
|
136
|
-
/^203\.0\.113\./, # 203.0.113.0
|
137
|
-
/^(22[4-9]|23\d)\./, # 224.0.0.0
|
138
|
-
/^(24\d|25[0-5])\./ # 240.0.0.0
|
142
|
+
/^0\./, # 0.0.0.0 - 0.255.255.255
|
143
|
+
/^192\.0\.2\./, # 192.0.2.0 - 192.0.2.255
|
144
|
+
/^192\.88\.99\./, # 192.88.99.0 - 192.88.99.255
|
145
|
+
/^198\.51\.100\./, # 198.51.100.0 - 198.51.100.255
|
146
|
+
/^203\.0\.113\./, # 203.0.113.0 - 203.0.113.255
|
147
|
+
/^(22[4-9]|23\d)\./, # 224.0.0.0 - 239.255.255.255
|
148
|
+
/^(24\d|25[0-5])\./ # 240.0.0.0 - 255.255.255.254 and 255.255.255.255
|
139
149
|
]
|
140
150
|
end
|
141
151
|
|
142
152
|
def reserved_net_checker
|
143
|
-
->(addr){ (private_nets_regex + reserved_nets_regex).any? { |net| net =~ addr } }
|
153
|
+
->(addr) { (private_nets_regex + reserved_nets_regex).any? { |net| net =~ addr } }
|
144
154
|
end
|
145
155
|
|
146
156
|
def ip_v4_cidr
|
147
|
-
"#{ip_v4_address}/#{
|
157
|
+
"#{ip_v4_address}/#{rand(1..31)}"
|
148
158
|
end
|
149
159
|
|
150
160
|
def ip_v6_address
|
151
|
-
(1..8).map { rand(
|
161
|
+
(1..8).map { rand(65_536).to_s(16) }.join(':')
|
152
162
|
end
|
153
163
|
|
154
164
|
def ip_v6_cidr
|
155
|
-
"#{ip_v6_address}/#{
|
165
|
+
"#{ip_v6_address}/#{rand(1..127)}"
|
156
166
|
end
|
157
167
|
|
158
|
-
def url(host = domain_name, path = "/#{
|
168
|
+
def url(host = domain_name, path = "/#{username}", scheme = 'http')
|
159
169
|
"#{scheme}://#{host}#{path}"
|
160
170
|
end
|
161
171
|
|
162
172
|
def slug(words = nil, glue = nil)
|
163
173
|
glue ||= sample(%w[- _ .])
|
164
|
-
(words || Faker::Lorem
|
174
|
+
(words || Faker::Lorem.words(2).join(' ')).delete(',.').gsub(' ', glue).downcase
|
165
175
|
end
|
166
176
|
|
167
177
|
def device_token
|
168
|
-
shuffle(rand(16
|
178
|
+
shuffle(rand(16**64).to_s(16).rjust(64, '0').chars.to_a).join
|
169
179
|
end
|
170
180
|
|
171
181
|
def user_agent(vendor = nil)
|
@@ -173,6 +183,8 @@ module Faker
|
|
173
183
|
agents = vendor.respond_to?(:to_sym) && agent_hash[vendor.to_sym] || agent_hash[sample(agent_hash.keys)]
|
174
184
|
sample(agents)
|
175
185
|
end
|
186
|
+
|
187
|
+
alias user_name username
|
176
188
|
end
|
177
189
|
end
|
178
190
|
end
|