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