ffaker 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changelog.md +32 -21
- data/README.md +16 -16
- data/REFERENCE.md +925 -646
- data/ffaker.gemspec +73 -5
- data/lib/ffaker.rb +1 -1
- data/lib/ffaker/address.rb +4 -0
- data/lib/ffaker/address_ch.rb +21 -0
- data/lib/ffaker/address_ch_de.rb +16 -0
- data/lib/ffaker/address_ch_fr.rb +16 -0
- data/lib/ffaker/address_ch_it.rb +16 -0
- data/lib/ffaker/address_da.rb +2 -4
- data/lib/ffaker/address_in.rb +56 -0
- data/lib/ffaker/address_ru.rb +39 -0
- data/lib/ffaker/address_ua.rb +58 -0
- data/lib/ffaker/avatar.rb +3 -5
- data/lib/ffaker/cheesy_lingo.rb +39 -0
- data/lib/ffaker/color_ua.rb +12 -0
- data/lib/ffaker/data/address/time_zone +128 -0
- data/lib/ffaker/data/address_ch/canton_abbr +26 -0
- data/lib/ffaker/data/address_chde/canton +26 -0
- data/lib/ffaker/data/address_chfr/canton +26 -0
- data/lib/ffaker/data/address_chit/canton +26 -0
- data/lib/ffaker/data/address_da/city +3 -3
- data/lib/ffaker/data/address_da/kommune +0 -4
- data/lib/ffaker/data/address_in/state +29 -0
- data/lib/ffaker/data/address_in/state_abbr +29 -0
- data/lib/ffaker/data/address_in/union_territory +7 -0
- data/lib/ffaker/data/address_in/union_territory_abbr +7 -0
- data/lib/ffaker/data/address_ru/city +74 -0
- data/lib/ffaker/data/address_ru/province +83 -0
- data/lib/ffaker/data/address_ru/street +49 -0
- data/lib/ffaker/data/address_ua/city +57 -0
- data/lib/ffaker/data/address_ua/country +193 -0
- data/lib/ffaker/data/address_ua/province +27 -0
- data/lib/ffaker/data/address_ua/street +13 -0
- data/lib/ffaker/data/cheesy_lingo/cheesy_phrases +54 -0
- data/lib/ffaker/data/cheesy_lingo/cheesy_words +34 -0
- data/lib/ffaker/data/color_ua/names_list +114 -0
- data/lib/ffaker/data/lorem_ua/capital_chars +33 -0
- data/lib/ffaker/data/lorem_ua/chars +33 -0
- data/lib/ffaker/data/lorem_ua/words +362 -0
- data/lib/ffaker/data/music/albums +91 -0
- data/lib/ffaker/data/music/artists +100 -0
- data/lib/ffaker/data/music/genres +20 -0
- data/lib/ffaker/data/music/songs +100 -0
- data/lib/ffaker/data/name_da/female_first_names +291 -480
- data/lib/ffaker/data/name_da/male_first_names +294 -383
- data/lib/ffaker/data/name_ua/first_names_female +193 -0
- data/lib/ffaker/data/name_ua/first_names_male +195 -0
- data/lib/ffaker/data/name_ua/last_names_female +230 -0
- data/lib/ffaker/data/name_ua/last_names_male +239 -0
- data/lib/ffaker/data/name_ua/middle_names_female +116 -0
- data/lib/ffaker/data/name_ua/middle_names_male +116 -0
- data/lib/ffaker/data/vehicle/displacements_list +21 -0
- data/lib/ffaker/data/vehicle/fuel_types_list +6 -0
- data/lib/ffaker/data/vehicle/transmissions_list +4 -0
- data/lib/ffaker/data/vehicle/upholstery_list +5 -0
- data/lib/ffaker/internet.rb +20 -20
- data/lib/ffaker/lorem_ua.rb +59 -0
- data/lib/ffaker/music.rb +24 -0
- data/lib/ffaker/name_da.rb +17 -28
- data/lib/ffaker/name_ja.rb +2 -4
- data/lib/ffaker/name_ua.rb +59 -0
- data/lib/ffaker/phone_number.rb +4 -1
- data/lib/ffaker/phone_number_br.rb +74 -0
- data/lib/ffaker/phone_number_ch.rb +46 -0
- data/lib/ffaker/phone_number_da.rb +3 -3
- data/lib/ffaker/string.rb +14 -6
- data/lib/ffaker/vehicle.rb +26 -0
- data/test/test_address.rb +4 -0
- data/test/test_address_ch.rb +13 -0
- data/test/test_address_ch_de.rb +9 -0
- data/test/test_address_ch_fr.rb +9 -0
- data/test/test_address_ch_it.rb +11 -0
- data/test/test_address_da.rb +10 -10
- data/test/test_address_in.rb +50 -0
- data/test/test_address_ru.rb +30 -0
- data/test/test_address_ua.rb +49 -0
- data/test/test_avatar.rb +7 -6
- data/test/test_cheesy_lingo.rb +37 -0
- data/test/test_color_ua.rb +9 -0
- data/test/test_internet.rb +11 -3
- data/test/test_lorem_ua.rb +45 -0
- data/test/test_music.rb +21 -0
- data/test/test_name_br.rb +1 -1
- data/test/test_name_da.rb +48 -0
- data/test/test_name_ja.rb +32 -1
- data/test/test_name_ua.rb +59 -0
- data/test/test_phone_number.rb +8 -3
- data/test/test_phone_number_br.rb +47 -0
- data/test/test_phone_number_da.rb +39 -0
- data/test/test_string.rb +6 -0
- data/test/test_time.rb +2 -2
- data/test/test_vehicle.rb +24 -0
- data/test/test_venue.rb +1 -1
- metadata +86 -5
data/lib/ffaker/internet.rb
CHANGED
@@ -5,20 +5,21 @@ module FFaker
|
|
5
5
|
extend ModuleUtils
|
6
6
|
extend self
|
7
7
|
|
8
|
-
BYTE = [*
|
8
|
+
BYTE = [*"0".."255"]
|
9
9
|
HOSTS = %w(gmail.com yahoo.com hotmail.com)
|
10
10
|
DISPOSABLE_HOSTS = %w(mailinator.com suremail.info spamherelots.com binkmail.com safetymail.info)
|
11
11
|
DOMAIN_SUFFIXES = %w(co.uk com us ca biz info name)
|
12
|
+
SAFE_DOMAIN_SUFFIXES = %w[org com net]
|
12
13
|
SLUG_DELIMITERS = %w[- _ .]
|
13
14
|
|
14
15
|
def email(name = nil)
|
15
|
-
[
|
16
|
+
[user_name(name), domain_name].join("@")
|
16
17
|
end
|
17
18
|
|
18
19
|
# returns an email address of an online disposable email service (like tempinbox.com).
|
19
20
|
# you can really send an email to these addresses an access it by going to the service web pages.
|
20
21
|
def disposable_email(name = nil)
|
21
|
-
[
|
22
|
+
[user_name(name), DISPOSABLE_HOSTS.sample].join("@")
|
22
23
|
end
|
23
24
|
|
24
25
|
def free_email(name = nil)
|
@@ -26,7 +27,7 @@ module FFaker
|
|
26
27
|
end
|
27
28
|
|
28
29
|
def safe_email(name = nil)
|
29
|
-
|
30
|
+
"#{user_name(name)}@example.#{SAFE_DOMAIN_SUFFIXES.sample}"
|
30
31
|
end
|
31
32
|
|
32
33
|
def user_name(name = nil)
|
@@ -36,11 +37,11 @@ module FFaker
|
|
36
37
|
else
|
37
38
|
case rand(2)
|
38
39
|
when 0
|
39
|
-
Name.first_name
|
40
|
+
sanitize(Name.first_name)
|
40
41
|
when 1
|
41
|
-
|
42
|
-
|
43
|
-
|
42
|
+
[Name.first_name, Name.last_name].
|
43
|
+
map { |n| sanitize(n) }.
|
44
|
+
join(%w(. _).sample)
|
44
45
|
end
|
45
46
|
end
|
46
47
|
end
|
@@ -50,8 +51,8 @@ module FFaker
|
|
50
51
|
end
|
51
52
|
|
52
53
|
def domain_word
|
53
|
-
dw = Company.name.split(
|
54
|
-
dw.gsub!(/\W/,
|
54
|
+
dw = Company.name.split(" ").first
|
55
|
+
dw.gsub!(/\W/, "")
|
55
56
|
dw.downcase!
|
56
57
|
dw
|
57
58
|
end
|
@@ -73,22 +74,21 @@ module FFaker
|
|
73
74
|
end
|
74
75
|
|
75
76
|
def slug(words = nil, glue = nil)
|
77
|
+
words ||= Lorem.words(2).join(" ")
|
76
78
|
glue ||= SLUG_DELIMITERS.sample
|
77
|
-
|
78
|
-
(words || FFaker::Lorem::words(2).join(glue)).downcase
|
79
|
+
words.downcase.gsub(/[^a-z0-9]+/, glue)
|
79
80
|
end
|
80
81
|
|
81
82
|
def password(min_length = 8, max_length = 16)
|
82
|
-
|
83
|
+
length =
|
84
|
+
min_length > max_length ? min_length : [*min_length..max_length].sample
|
85
|
+
String.from_regexp(/[a-z]{#{length}}/)
|
86
|
+
end
|
83
87
|
|
84
|
-
|
85
|
-
temp += Lorem.word
|
86
|
-
end
|
87
|
-
if max_length >= min_length && temp.length > max_length
|
88
|
-
temp = temp.slice(0, max_length)
|
89
|
-
end
|
88
|
+
private
|
90
89
|
|
91
|
-
|
90
|
+
def sanitize(string)
|
91
|
+
string.gsub(/\W/, "").downcase
|
92
92
|
end
|
93
93
|
end
|
94
94
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module FFaker
|
4
|
+
module LoremUA
|
5
|
+
extend ModuleUtils
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def word
|
9
|
+
WORDS.sample
|
10
|
+
end
|
11
|
+
|
12
|
+
def words(num = 3)
|
13
|
+
WORDS.sample(num)
|
14
|
+
end
|
15
|
+
|
16
|
+
def sentence(word_count = 7)
|
17
|
+
elements = words(word_count + rand(10))
|
18
|
+
if elements.count > 10
|
19
|
+
elements.insert(rand(3..(elements.count - 3)), ',')
|
20
|
+
end
|
21
|
+
result = elements.join(' ').gsub(' , ', ', ')
|
22
|
+
capitalize_ukrainian("#{result}#{sentence_type_mark}")
|
23
|
+
end
|
24
|
+
|
25
|
+
alias_method :phrase, :sentence
|
26
|
+
|
27
|
+
def sentences(sentence_count = 3)
|
28
|
+
(1..sentence_count).map { sentence }
|
29
|
+
end
|
30
|
+
|
31
|
+
alias_method :phrases, :sentences
|
32
|
+
|
33
|
+
def paragraph(sentence_count = 5)
|
34
|
+
sentences(sentence_count + rand(3)).join(' ')
|
35
|
+
end
|
36
|
+
|
37
|
+
def paragraphs(paragraph_count = 3)
|
38
|
+
(1..paragraph_count).map { paragraph }
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def sentence_type_mark
|
44
|
+
case rand(10)
|
45
|
+
when 0..7 then "."
|
46
|
+
when 8 then "!"
|
47
|
+
when 9 then "?"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def capitalize_ukrainian(string)
|
52
|
+
unless CAPITAL_CHARS.include?(string[0])
|
53
|
+
string[0] = CAPITAL_CHARS[CHARS.index(string[0])]
|
54
|
+
end
|
55
|
+
string
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
data/lib/ffaker/music.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module FFaker
|
4
|
+
module Music
|
5
|
+
extend ModuleUtils
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def genre
|
9
|
+
GENRES.sample
|
10
|
+
end
|
11
|
+
|
12
|
+
def album
|
13
|
+
ALBUMS.sample
|
14
|
+
end
|
15
|
+
|
16
|
+
def artist
|
17
|
+
ARTISTS.sample
|
18
|
+
end
|
19
|
+
|
20
|
+
def song
|
21
|
+
SONGS.sample
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/ffaker/name_da.rb
CHANGED
@@ -11,49 +11,29 @@ module FFaker
|
|
11
11
|
|
12
12
|
PREFIXES = %w(Hr. Fr. Dr. Prof.)
|
13
13
|
|
14
|
-
def name
|
15
|
-
|
16
|
-
when :any then any_name
|
17
|
-
when :male then male_name
|
18
|
-
when :female then female_name
|
19
|
-
else
|
20
|
-
raise ArgumentError, "Invalid gender, must be one of :any, :male, :female"
|
21
|
-
end
|
14
|
+
def name(gender = :any)
|
15
|
+
generate_name(first_name(gender))
|
22
16
|
end
|
23
17
|
|
24
18
|
def any_name
|
25
|
-
|
26
|
-
when 0 then "#{prefix} #{first_name} #{last_name}"
|
27
|
-
when 1..2 then "#{first_name} #{last_name} #{last_name}"
|
28
|
-
else "#{first_name} #{last_name}"
|
29
|
-
end
|
19
|
+
name(:any)
|
30
20
|
end
|
31
21
|
|
32
22
|
def male_name
|
33
|
-
|
34
|
-
case rand(8)
|
35
|
-
when 0 then "#{prefix} #{fname} #{last_name}"
|
36
|
-
when 1..2 then "#{fname} #{last_name} #{last_name}"
|
37
|
-
else "#{fname} #{last_name}"
|
38
|
-
end
|
23
|
+
name(:male)
|
39
24
|
end
|
40
25
|
|
41
26
|
def female_name
|
42
|
-
|
43
|
-
case rand(8)
|
44
|
-
when 0 then "#{prefix} #{fname} #{last_name}"
|
45
|
-
when 1..2 then "#{fname} #{last_name} #{last_name}"
|
46
|
-
else "#{fname} #{last_name}"
|
47
|
-
end
|
27
|
+
name(:female)
|
48
28
|
end
|
49
29
|
|
50
|
-
def first_name
|
30
|
+
def first_name(gender = :any)
|
51
31
|
case gender
|
52
|
-
when :any then (rand(2) == 0) ?
|
32
|
+
when :any then (rand(2) == 0) ? first_name(:male) : first_name(:female)
|
53
33
|
when :male then MALE_FIRST_NAMES.sample
|
54
34
|
when :female then FEMALE_FIRST_NAMES.sample
|
55
35
|
else
|
56
|
-
|
36
|
+
fail ArgumentError, 'Invalid gender, must be one of :any, :male, :female'
|
57
37
|
end
|
58
38
|
end
|
59
39
|
|
@@ -65,5 +45,14 @@ module FFaker
|
|
65
45
|
PREFIXES.sample
|
66
46
|
end
|
67
47
|
|
48
|
+
private
|
49
|
+
|
50
|
+
def generate_name(first_name)
|
51
|
+
case rand(8)
|
52
|
+
when 0 then "#{prefix} #{first_name} #{last_name}"
|
53
|
+
when 1..2 then "#{first_name} #{last_name} #{last_name}"
|
54
|
+
else "#{first_name} #{last_name}"
|
55
|
+
end
|
56
|
+
end
|
68
57
|
end
|
69
58
|
end
|
data/lib/ffaker/name_ja.rb
CHANGED
@@ -5,10 +5,6 @@ module FFaker
|
|
5
5
|
extend ModuleUtils
|
6
6
|
extend self
|
7
7
|
|
8
|
-
def name
|
9
|
-
"#{first_name}#{last_name}"
|
10
|
-
end
|
11
|
-
|
12
8
|
def first_name
|
13
9
|
FIRST_NAMES.sample
|
14
10
|
end
|
@@ -20,5 +16,7 @@ module FFaker
|
|
20
16
|
def last_first
|
21
17
|
"#{last_name}#{first_name}"
|
22
18
|
end
|
19
|
+
|
20
|
+
alias_method :name, :last_first
|
23
21
|
end
|
24
22
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'ffaker/name'
|
4
|
+
|
5
|
+
module FFaker
|
6
|
+
module NameUA
|
7
|
+
extend ModuleUtils
|
8
|
+
extend self
|
9
|
+
|
10
|
+
FIRST_NAMES = FIRST_NAMES_MALE + FIRST_NAMES_FEMALE
|
11
|
+
LAST_NAMES = LAST_NAMES_MALE + LAST_NAMES_FEMALE
|
12
|
+
MIDDLE_NAMES = MIDDLE_NAMES_MALE + MIDDLE_NAMES_FEMALE
|
13
|
+
|
14
|
+
def first_name_female
|
15
|
+
FIRST_NAMES_FEMALE.sample
|
16
|
+
end
|
17
|
+
|
18
|
+
def first_name_male
|
19
|
+
FIRST_NAMES_MALE.sample
|
20
|
+
end
|
21
|
+
|
22
|
+
def middle_name_female
|
23
|
+
MIDDLE_NAMES_FEMALE.sample
|
24
|
+
end
|
25
|
+
|
26
|
+
def middle_name_male
|
27
|
+
MIDDLE_NAMES_MALE.sample
|
28
|
+
end
|
29
|
+
|
30
|
+
def last_name_female
|
31
|
+
LAST_NAMES_FEMALE.sample
|
32
|
+
end
|
33
|
+
|
34
|
+
def last_name_male
|
35
|
+
LAST_NAMES_MALE.sample
|
36
|
+
end
|
37
|
+
|
38
|
+
def first_name
|
39
|
+
FIRST_NAMES.sample
|
40
|
+
end
|
41
|
+
|
42
|
+
def last_name
|
43
|
+
LAST_NAMES.sample
|
44
|
+
end
|
45
|
+
|
46
|
+
def name
|
47
|
+
case rand(8)
|
48
|
+
when 0 then first_name_male
|
49
|
+
when 1 then first_name_female
|
50
|
+
when 2 then "#{first_name_male} #{middle_name_male}"
|
51
|
+
when 3 then "#{first_name_female} #{middle_name_male}"
|
52
|
+
when 4 then "#{last_name_male} #{first_name_male}"
|
53
|
+
when 5 then "#{last_name_female} #{first_name_female}"
|
54
|
+
when 6 then "#{last_name_male} #{first_name_male} #{middle_name_male}"
|
55
|
+
when 7 then "#{last_name_female} #{first_name_female} #{middle_name_female}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/ffaker/phone_number.rb
CHANGED
@@ -30,7 +30,10 @@ module FFaker
|
|
30
30
|
# The North American Numbering Plan (NANP) does not permit the digits 0
|
31
31
|
# and 1 as the leading digit of an area code.
|
32
32
|
# https://en.wikipedia.org/wiki/List_of_North_American_Numbering_Plan_area_codes
|
33
|
-
|
33
|
+
loop do
|
34
|
+
rand_area_code = rand(201..999)
|
35
|
+
return rand_area_code unless rand_area_code % 100 == 11
|
36
|
+
end
|
34
37
|
end
|
35
38
|
|
36
39
|
def short_phone_number
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module FFaker
|
4
|
+
# Author: Gustavo Souza https://github.com/gustavor-souza
|
5
|
+
# Source https://en.wikipedia.org/wiki/Telephone_numbers_in_Brazil
|
6
|
+
#
|
7
|
+
module PhoneNumberBR
|
8
|
+
extend ModuleUtils
|
9
|
+
extend self
|
10
|
+
|
11
|
+
COUNTRY_PREFIX = '+55'
|
12
|
+
AREA_CODE = %w[1# 2# 3# 4# 5# 6# 7# 8# 9#]
|
13
|
+
HOME_WORK_PHONE_PREFIX = %w[2 3 4 5]
|
14
|
+
MOBILE_PHONE_PREFIX = %w[6 7 8 9 96 97 98 99]
|
15
|
+
PHONE_NUMBER = %w[####### ###-####]
|
16
|
+
|
17
|
+
# generate a random phone number
|
18
|
+
#
|
19
|
+
def phone_number
|
20
|
+
case rand(2)
|
21
|
+
when 0 then home_work_phone_number
|
22
|
+
when 1 then mobile_phone_number
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def home_work_phone_number
|
27
|
+
number HOME_WORK_PHONE_PREFIX
|
28
|
+
end
|
29
|
+
|
30
|
+
def mobile_phone_number
|
31
|
+
number MOBILE_PHONE_PREFIX
|
32
|
+
end
|
33
|
+
|
34
|
+
# pick a random phone number with the international prefix code
|
35
|
+
#
|
36
|
+
def international_phone_number
|
37
|
+
case rand(2)
|
38
|
+
when 0 then international_mobile_phone_number
|
39
|
+
when 1 then international_home_work_phone_number
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def international_mobile_phone_number
|
44
|
+
number MOBILE_PHONE_PREFIX, COUNTRY_PREFIX
|
45
|
+
end
|
46
|
+
|
47
|
+
def international_home_work_phone_number
|
48
|
+
number HOME_WORK_PHONE_PREFIX, COUNTRY_PREFIX
|
49
|
+
end
|
50
|
+
|
51
|
+
def country_code
|
52
|
+
COUNTRY_PREFIX
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
def number(prefixes, country_prefix = '')
|
57
|
+
space = random_space
|
58
|
+
p = [
|
59
|
+
country_prefix,
|
60
|
+
space,
|
61
|
+
AREA_CODE.sample,
|
62
|
+
space,
|
63
|
+
prefixes.sample,
|
64
|
+
PHONE_NUMBER.sample
|
65
|
+
].join('').strip
|
66
|
+
|
67
|
+
FFaker.numerify p
|
68
|
+
end
|
69
|
+
|
70
|
+
def random_space
|
71
|
+
rand(2) == 1 ? ' ' : ''
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|