ffaker 2.1.0 → 2.2.0

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.
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