ffaker 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +32 -21
  3. data/README.md +16 -16
  4. data/REFERENCE.md +925 -646
  5. data/ffaker.gemspec +73 -5
  6. data/lib/ffaker.rb +1 -1
  7. data/lib/ffaker/address.rb +4 -0
  8. data/lib/ffaker/address_ch.rb +21 -0
  9. data/lib/ffaker/address_ch_de.rb +16 -0
  10. data/lib/ffaker/address_ch_fr.rb +16 -0
  11. data/lib/ffaker/address_ch_it.rb +16 -0
  12. data/lib/ffaker/address_da.rb +2 -4
  13. data/lib/ffaker/address_in.rb +56 -0
  14. data/lib/ffaker/address_ru.rb +39 -0
  15. data/lib/ffaker/address_ua.rb +58 -0
  16. data/lib/ffaker/avatar.rb +3 -5
  17. data/lib/ffaker/cheesy_lingo.rb +39 -0
  18. data/lib/ffaker/color_ua.rb +12 -0
  19. data/lib/ffaker/data/address/time_zone +128 -0
  20. data/lib/ffaker/data/address_ch/canton_abbr +26 -0
  21. data/lib/ffaker/data/address_chde/canton +26 -0
  22. data/lib/ffaker/data/address_chfr/canton +26 -0
  23. data/lib/ffaker/data/address_chit/canton +26 -0
  24. data/lib/ffaker/data/address_da/city +3 -3
  25. data/lib/ffaker/data/address_da/kommune +0 -4
  26. data/lib/ffaker/data/address_in/state +29 -0
  27. data/lib/ffaker/data/address_in/state_abbr +29 -0
  28. data/lib/ffaker/data/address_in/union_territory +7 -0
  29. data/lib/ffaker/data/address_in/union_territory_abbr +7 -0
  30. data/lib/ffaker/data/address_ru/city +74 -0
  31. data/lib/ffaker/data/address_ru/province +83 -0
  32. data/lib/ffaker/data/address_ru/street +49 -0
  33. data/lib/ffaker/data/address_ua/city +57 -0
  34. data/lib/ffaker/data/address_ua/country +193 -0
  35. data/lib/ffaker/data/address_ua/province +27 -0
  36. data/lib/ffaker/data/address_ua/street +13 -0
  37. data/lib/ffaker/data/cheesy_lingo/cheesy_phrases +54 -0
  38. data/lib/ffaker/data/cheesy_lingo/cheesy_words +34 -0
  39. data/lib/ffaker/data/color_ua/names_list +114 -0
  40. data/lib/ffaker/data/lorem_ua/capital_chars +33 -0
  41. data/lib/ffaker/data/lorem_ua/chars +33 -0
  42. data/lib/ffaker/data/lorem_ua/words +362 -0
  43. data/lib/ffaker/data/music/albums +91 -0
  44. data/lib/ffaker/data/music/artists +100 -0
  45. data/lib/ffaker/data/music/genres +20 -0
  46. data/lib/ffaker/data/music/songs +100 -0
  47. data/lib/ffaker/data/name_da/female_first_names +291 -480
  48. data/lib/ffaker/data/name_da/male_first_names +294 -383
  49. data/lib/ffaker/data/name_ua/first_names_female +193 -0
  50. data/lib/ffaker/data/name_ua/first_names_male +195 -0
  51. data/lib/ffaker/data/name_ua/last_names_female +230 -0
  52. data/lib/ffaker/data/name_ua/last_names_male +239 -0
  53. data/lib/ffaker/data/name_ua/middle_names_female +116 -0
  54. data/lib/ffaker/data/name_ua/middle_names_male +116 -0
  55. data/lib/ffaker/data/vehicle/displacements_list +21 -0
  56. data/lib/ffaker/data/vehicle/fuel_types_list +6 -0
  57. data/lib/ffaker/data/vehicle/transmissions_list +4 -0
  58. data/lib/ffaker/data/vehicle/upholstery_list +5 -0
  59. data/lib/ffaker/internet.rb +20 -20
  60. data/lib/ffaker/lorem_ua.rb +59 -0
  61. data/lib/ffaker/music.rb +24 -0
  62. data/lib/ffaker/name_da.rb +17 -28
  63. data/lib/ffaker/name_ja.rb +2 -4
  64. data/lib/ffaker/name_ua.rb +59 -0
  65. data/lib/ffaker/phone_number.rb +4 -1
  66. data/lib/ffaker/phone_number_br.rb +74 -0
  67. data/lib/ffaker/phone_number_ch.rb +46 -0
  68. data/lib/ffaker/phone_number_da.rb +3 -3
  69. data/lib/ffaker/string.rb +14 -6
  70. data/lib/ffaker/vehicle.rb +26 -0
  71. data/test/test_address.rb +4 -0
  72. data/test/test_address_ch.rb +13 -0
  73. data/test/test_address_ch_de.rb +9 -0
  74. data/test/test_address_ch_fr.rb +9 -0
  75. data/test/test_address_ch_it.rb +11 -0
  76. data/test/test_address_da.rb +10 -10
  77. data/test/test_address_in.rb +50 -0
  78. data/test/test_address_ru.rb +30 -0
  79. data/test/test_address_ua.rb +49 -0
  80. data/test/test_avatar.rb +7 -6
  81. data/test/test_cheesy_lingo.rb +37 -0
  82. data/test/test_color_ua.rb +9 -0
  83. data/test/test_internet.rb +11 -3
  84. data/test/test_lorem_ua.rb +45 -0
  85. data/test/test_music.rb +21 -0
  86. data/test/test_name_br.rb +1 -1
  87. data/test/test_name_da.rb +48 -0
  88. data/test/test_name_ja.rb +32 -1
  89. data/test/test_name_ua.rb +59 -0
  90. data/test/test_phone_number.rb +8 -3
  91. data/test/test_phone_number_br.rb +47 -0
  92. data/test/test_phone_number_da.rb +39 -0
  93. data/test/test_string.rb +6 -0
  94. data/test/test_time.rb +2 -2
  95. data/test/test_vehicle.rb +24 -0
  96. data/test/test_venue.rb +1 -1
  97. metadata +86 -5
@@ -0,0 +1,21 @@
1
+ 1.0
2
+ 1.6
3
+ 2.0
4
+ 2.5
5
+ 3.0
6
+ 4.0
7
+ 4.1
8
+ 4.2
9
+ 4.3
10
+ 4.9
11
+ 5.0
12
+ 5.2
13
+ 5.7
14
+ 5.8
15
+ 5.9
16
+ 7.0
17
+ 7.2
18
+ 7.4
19
+ 7.5
20
+ 7.7
21
+ 11.3
@@ -0,0 +1,6 @@
1
+ Gas
2
+ Hybrid
3
+ Diesel
4
+ Electric
5
+ Natural Gas (CNG)
6
+ Hydrogen Fuel Cell (FCV)
@@ -0,0 +1,4 @@
1
+ Automatic
2
+ Manual
3
+ Automated Manual
4
+ Continuously Variable
@@ -0,0 +1,5 @@
1
+ Leather
2
+ Vinyl
3
+ Faux Vinyl
4
+ PVC
5
+ Nylon Fabric
@@ -5,20 +5,21 @@ module FFaker
5
5
  extend ModuleUtils
6
6
  extend self
7
7
 
8
- BYTE = [*'0'..'255']
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
- [ user_name(name), domain_name ].join('@')
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
- [ user_name(name), DISPOSABLE_HOSTS.sample ].join('@')
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
- [user_name(name), 'example.'+ %w[org com net].sample].join('@')
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.gsub(/\W/, '').downcase
40
+ sanitize(Name.first_name)
40
41
  when 1
41
- parts = [ Name.first_name, Name.last_name ].map{|n| n.gsub(/\W/, '') }
42
- parts = parts.join(%w(. _).sample)
43
- parts.downcase
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(' ').first
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
- temp = Lorem.words.join
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
- while temp.length < min_length
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
- temp
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
+
@@ -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
@@ -11,49 +11,29 @@ module FFaker
11
11
 
12
12
  PREFIXES = %w(Hr. Fr. Dr. Prof.)
13
13
 
14
- def name gender = :any
15
- case gender
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
- case rand(8)
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
- fname = first_name :male
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
- fname = first_name :female
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 gender = :any
30
+ def first_name(gender = :any)
51
31
  case gender
52
- when :any then (rand(2) == 0) ? name(:male) : name(:female)
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
- raise ArgumentError, "Invalid gender, must be one of :any, :male, :female"
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
@@ -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
@@ -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
- rand(201..999)
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