ffaker 2.12.0 → 2.17.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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +28 -0
  3. data/README.md +8 -1
  4. data/REFERENCE.md +1365 -1234
  5. data/Rakefile +0 -6
  6. data/ffaker.gemspec +14 -5
  7. data/lib/ffaker.rb +12 -6
  8. data/lib/ffaker/address_fr.rb +5 -1
  9. data/lib/ffaker/address_nl.rb +1 -3
  10. data/lib/ffaker/address_us.rb +22 -2
  11. data/lib/ffaker/{animals.rb → animal.rb} +0 -0
  12. data/lib/ffaker/{animals_cn.rb → animal_cn.rb} +0 -0
  13. data/lib/ffaker/animal_es.rb +12 -0
  14. data/lib/ffaker/{animals_us.rb → animal_us.rb} +0 -0
  15. data/lib/ffaker/bank.rb +15 -3
  16. data/lib/ffaker/code.rb +17 -0
  17. data/lib/ffaker/color_pl.rb +14 -0
  18. data/lib/ffaker/company_ja.rb +24 -0
  19. data/lib/ffaker/data/address_fr/region +27 -0
  20. data/lib/ffaker/data/address_ja/city +0 -23
  21. data/lib/ffaker/data/address_us/state_abbr +0 -1
  22. data/lib/ffaker/data/animal_es/common_names +135 -0
  23. data/lib/ffaker/data/bank/card_types +12 -0
  24. data/lib/ffaker/data/book/nouns +2 -2
  25. data/lib/ffaker/data/color_pl/names_list +122 -0
  26. data/lib/ffaker/data/filesystem/extension +31 -31
  27. data/lib/ffaker/data/movie/nouns +2 -2
  28. data/lib/ffaker/data/name/first_names_female +0 -230
  29. data/lib/ffaker/data/name/first_names_male +0 -37
  30. data/lib/ffaker/data/sport_pl/summer +53 -0
  31. data/lib/ffaker/data/sport_pl/winter +14 -0
  32. data/lib/ffaker/data/vehicle/color_prefixes +25 -0
  33. data/lib/ffaker/education.rb +4 -8
  34. data/lib/ffaker/education_cn.rb +3 -6
  35. data/lib/ffaker/filesystem.rb +7 -7
  36. data/lib/ffaker/identification_in.rb +15 -0
  37. data/lib/ffaker/identification_kr.rb +2 -2
  38. data/lib/ffaker/identification_mx.rb +1 -1
  39. data/lib/ffaker/identification_pl.rb +77 -0
  40. data/lib/ffaker/identification_tw.rb +23 -0
  41. data/lib/ffaker/internet.rb +4 -6
  42. data/lib/ffaker/internet_se.rb +1 -1
  43. data/lib/ffaker/name_mx.rb +2 -2
  44. data/lib/ffaker/phone_number_br.rb +2 -2
  45. data/lib/ffaker/product.rb +1 -1
  46. data/lib/ffaker/sport_pl.rb +25 -0
  47. data/lib/ffaker/ssn.rb +1 -3
  48. data/lib/ffaker/string.rb +5 -5
  49. data/lib/ffaker/unit.rb +9 -10
  50. data/lib/ffaker/unit_english.rb +18 -19
  51. data/lib/ffaker/unit_metric.rb +15 -16
  52. data/lib/ffaker/utils/random_utils.rb +2 -0
  53. data/lib/ffaker/utils/unique_utils.rb +0 -2
  54. data/lib/ffaker/vehicle.rb +1 -6
  55. data/lib/version.rb +5 -0
  56. data/scripts/benchmark.rb +10 -11
  57. data/test/helper.rb +35 -0
  58. data/test/test_address_au.rb +2 -2
  59. data/test/test_address_br.rb +1 -1
  60. data/test/test_address_fi.rb +2 -2
  61. data/test/test_address_fr.rb +1 -1
  62. data/test/test_address_id.rb +1 -1
  63. data/test/test_address_ja.rb +1 -1
  64. data/test/test_address_nl.rb +1 -1
  65. data/test/test_address_se.rb +2 -2
  66. data/test/test_address_us.rb +9 -0
  67. data/test/test_animal_es.rb +17 -0
  68. data/test/test_array_utils.rb +0 -1
  69. data/test/test_aws.rb +1 -1
  70. data/test/test_bank.rb +41 -5
  71. data/test/test_book.rb +4 -4
  72. data/test/test_code.rb +22 -1
  73. data/test/test_color_pl.rb +13 -0
  74. data/test/test_company_ja.rb +28 -0
  75. data/test/{test_faker.rb → test_ffaker.rb} +5 -1
  76. data/test/test_filesystem.rb +11 -3
  77. data/test/test_geolocation.rb +2 -2
  78. data/test/test_healthcare_ru.rb +1 -1
  79. data/test/test_html_ipsum.rb +1 -1
  80. data/test/test_identification_co.rb +2 -2
  81. data/test/test_identification_es_cl.rb +1 -1
  82. data/test/test_identification_in.rb +20 -0
  83. data/test/test_identification_pl.rb +28 -0
  84. data/test/test_identification_tw.rb +17 -0
  85. data/test/test_image.rb +3 -3
  86. data/test/test_internet.rb +9 -9
  87. data/test/test_internet_se.rb +1 -1
  88. data/test/test_job_cn.rb +1 -1
  89. data/test/test_job_ja.rb +1 -1
  90. data/test/test_job_kr.rb +1 -1
  91. data/test/test_job_vn.rb +1 -1
  92. data/test/test_lorem_cn.rb +6 -6
  93. data/test/test_lorem_ja.rb +3 -3
  94. data/test/test_lorem_pl.rb +1 -1
  95. data/test/test_lorem_ru.rb +1 -1
  96. data/test/test_lorem_ua.rb +1 -1
  97. data/test/test_music.rb +4 -4
  98. data/test/test_name_da.rb +3 -3
  99. data/test/test_phone_number_se.rb +2 -2
  100. data/test/test_sport_pl.rb +30 -0
  101. data/test/test_ssn_se.rb +6 -8
  102. data/test/test_string.rb +3 -3
  103. data/test/test_time.rb +13 -6
  104. data/test/test_tweet.rb +9 -9
  105. data/test/test_vehicle.rb +2 -2
  106. metadata +201 -162
  107. data/lib/ffaker/data/address_jp/city +0 -127
  108. data/lib/ffaker/data/address_jp/designated_city +0 -20
  109. data/lib/ffaker/data/address_jp/street +0 -37
  110. data/lib/ffaker/data/address_jp/tokyo_ward +0 -23
  111. data/lib/ffaker/data/address_jp/village +0 -183
  112. data/lib/ffaker/data/address_jp/ward +0 -188
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FFaker
4
+ module IdentificationTW
5
+ extend ModuleUtils
6
+ extend self
7
+
8
+ AREA_CODE = { a: 10, b: 11, c: 12, d: 13, e: 14, f: 15, g: 16, h: 17, i: 34, j: 18, k: 19, l: 20, m: 21, n: 22, o: 35, p: 23, q: 24, r: 25, s: 26, t: 27, u: 28, v: 29, w: 30, x: 31, y: 32, z: 33 }.freeze
9
+
10
+ # Identity Card Number
11
+ # https://en.wikipedia.org/wiki/National_identification_card_(Taiwan)#Identity_card_number
12
+ def id
13
+ letter = FFaker.letterify('?')
14
+ code = AREA_CODE[letter.to_sym]
15
+ gender = fetch_sample([1, 2])
16
+ serial = FFaker.numerify('#######')
17
+ a, b, c, d, e, f, g, h, i, j = "#{code}#{gender}#{serial}".split(//).map(&:to_i)
18
+
19
+ checksum = (9 * a + b + 2 * c + 3 * d + 4 * e + 5 * f + 6 * g + 7 * h + 8 * i + 9 * j) % 10
20
+ "#{letter.upcase}#{gender}#{serial}#{checksum}"
21
+ end
22
+ end
23
+ end
@@ -5,7 +5,7 @@ module FFaker
5
5
  extend ModuleUtils
6
6
  extend self
7
7
 
8
- BYTE = [*'0'..'255'].freeze
8
+ BYTE = Array('0'..'255').freeze
9
9
  HOSTS = %w[gmail.com yahoo.com hotmail.com].freeze
10
10
  DISPOSABLE_HOSTS = %w[
11
11
  mailinator.com suremail.info spamherelots.com binkmail.com safetymail.info
@@ -39,7 +39,7 @@ module FFaker
39
39
 
40
40
  return sanitize(Name.first_name) if rand(0..1).zero?
41
41
 
42
- [Name.first_name, Name.last_name].join(fetch_sample(%w[. _])).downcase
42
+ [sanitize(Name.first_name), sanitize(Name.last_name)].join(fetch_sample(%w[. _]))
43
43
  end
44
44
 
45
45
  def domain_name
@@ -47,9 +47,7 @@ module FFaker
47
47
  end
48
48
 
49
49
  def domain_word
50
- dw = Company.name.split(' ').first
51
- dw.gsub!(/\W/, '')
52
- dw.downcase
50
+ sanitize(Company.name.split(' ').first)
53
51
  end
54
52
 
55
53
  def domain_suffix
@@ -75,7 +73,7 @@ module FFaker
75
73
  end
76
74
 
77
75
  def password(min_length = 8, max_length = 16)
78
- length = min_length > max_length ? min_length : fetch_sample([*min_length..max_length])
76
+ length = min_length > max_length ? min_length : fetch_sample(min_length..max_length)
79
77
  String.from_regexp(/\w{#{length}}/)
80
78
  end
81
79
 
@@ -9,7 +9,7 @@ module FFaker
9
9
  extend ModuleUtils
10
10
  extend self
11
11
 
12
- BYTE = [*'0'..'255'].freeze
12
+ BYTE = Array('0'..'255').freeze
13
13
  HOSTS = %w[gmail.com yahoo.com hotmail.com spray.se passagen.se].freeze
14
14
  DOMAIN_SUFFIXES = %w[se nu com].freeze
15
15
  DISPOSABLE_HOSTS = %w[
@@ -26,7 +26,7 @@ module FFaker
26
26
  # Full name with prefix according to gender, possibly with middle_name
27
27
  def full_name_prefix(gender = :any)
28
28
  case gender
29
- when :any then
29
+ when :any
30
30
  case rand(0..8)
31
31
  when 0, 3, 6, 8 then "#{female_prefix} #{female_name} #{paternal_last_names}"
32
32
  else "#{male_prefix} #{male_name} #{paternal_last_names}"
@@ -40,7 +40,7 @@ module FFaker
40
40
  # Full name with no prefix according to gender, possibly with middle_name
41
41
  def full_name_no_prefix(gender = :any)
42
42
  case gender
43
- when :any then
43
+ when :any
44
44
  case rand(0..8)
45
45
  when 0, 3, 6, 8 then "#{female_name} #{paternal_last_names}"
46
46
  else "#{male_name} #{paternal_last_names}"
@@ -14,8 +14,8 @@ module FFaker
14
14
 
15
15
  COUNTRY_PREFIX = '+55'
16
16
  AREA_CODE = [
17
- 10..19, 21..22, 24, 27..28, 31..35, 37..38, 41..49,
18
- 51..54, 55, 61..69, 71..75, 77, 79, 81..89, 91..99
17
+ 11..19, 21..22, 24, 27..28, 31..35, 37..38, 41..49,
18
+ 51, 53..55, 61..69, 71, 73..75, 77, 79, 81..89, 91..99
19
19
  ].flat_map { |x| Array(x) }.map(&:to_s).freeze
20
20
 
21
21
  HOME_WORK_PHONE_PREFIX = %w[2 3 4 5].freeze
@@ -14,7 +14,7 @@ module FFaker
14
14
  def brand
15
15
  case rand(0..11)
16
16
  when (0..4) then fetch_sample(B1) + fetch_sample(B2)
17
- when (5..10) then
17
+ when (5..10)
18
18
  [
19
19
  fetch_sample(START), fetch_sample(VOWELS), fetch_sample(SUFFIX),
20
20
  rand(0..1).zero? ? fetch_sample(ADDON) : nil
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FFaker
4
+ # Inspirations:
5
+ # https://pl.wikipedia.org/wiki/Kategoria:Dyscypliny_sportowe
6
+ # https://pl.wikipedia.org/wiki/Igrzyska_olimpijskie
7
+ module SportPL
8
+ extend ModuleUtils
9
+ extend self
10
+
11
+ ALL = SUMMER + WINTER
12
+
13
+ def name
14
+ fetch_sample(ALL)
15
+ end
16
+
17
+ def summer
18
+ fetch_sample(SUMMER)
19
+ end
20
+
21
+ def winter
22
+ fetch_sample(WINTER)
23
+ end
24
+ end
25
+ end
@@ -16,9 +16,7 @@ module FFaker
16
16
  third_group = rand(1..9999)
17
17
 
18
18
  group_numbers = [first_group, second_group, third_group]
19
- result = format('%.3d-%.2d-%.4d', *group_numbers)
20
-
21
- result
19
+ format('%.3d-%.2d-%.4d', *group_numbers)
22
20
  end
23
21
  end
24
22
  end
@@ -8,10 +8,10 @@ module FFaker
8
8
  BACKSLASH = '\\'
9
9
  DASH = '-'
10
10
 
11
- LOWERS = [*'a'..'z'].freeze
12
- UPPERS = [*'A'..'Z'].freeze
11
+ LOWERS = Array('a'..'z').freeze
12
+ UPPERS = Array('A'..'Z').freeze
13
13
  LETTERS = LOWERS + UPPERS
14
- NUMBERS = [*'0'..'9'].freeze
14
+ NUMBERS = Array('0'..'9').freeze
15
15
  WORD_CHARS = LETTERS + NUMBERS + ['_']
16
16
  SPACES = [' ', "\t"].freeze
17
17
  ESCAPEABLE_CHARS = ['\\', '/', '.', '(', ')', '[', ']', '{', '}'].freeze
@@ -34,7 +34,7 @@ module FFaker
34
34
  while tokens.any?
35
35
  token = tokens.shift
36
36
  if token == DASH && tokens.first && result.last
37
- result += [*result.pop..tokens.shift]
37
+ result += Array(result.pop..tokens.shift)
38
38
  elsif token == BACKSLASH
39
39
  result << special(tokens.shift)
40
40
  else
@@ -50,7 +50,7 @@ module FFaker
50
50
  token = tokens.shift
51
51
 
52
52
  case token
53
- when '?' then
53
+ when '?'
54
54
  # TODO: Let ? generate nothing
55
55
  '' # We already printed its target
56
56
  when '+' then
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ostruct'
4
-
5
3
  module FFaker
6
4
  module Unit
7
5
  extend ModuleUtils
@@ -10,9 +8,10 @@ module FFaker
10
8
  TIME_UNITS = [
11
9
  { name: 'Years', abbreviation: 'yr' },
12
10
  { name: 'Days', abbreviation: 'd' },
13
- { name: 'Hours', abbreviation: 'Minutes' },
11
+ { name: 'Hours', abbreviation: 'h' },
12
+ { name: 'Minutes', abbreviation: 'm' },
14
13
  { name: 'Seconds', abbreviation: 's' },
15
- { name: 'Milliseconds', abbreviation: 'msec' }
14
+ { name: 'Milliseconds', abbreviation: 'ms' }
16
15
  ].freeze
17
16
  TEMPERATURE_UNITS = [
18
17
  { name: 'Kelvin', abbreviation: 'K' },
@@ -21,29 +20,29 @@ module FFaker
21
20
  ].freeze
22
21
 
23
22
  def time_name
24
- time.name
23
+ time[:name]
25
24
  end
26
25
 
27
26
  def time_abbr
28
- time.abbreviation
27
+ time[:abbreviation]
29
28
  end
30
29
 
31
30
  def temperature_name
32
- temperature.name
31
+ temperature[:name]
33
32
  end
34
33
 
35
34
  def temperature_abbr
36
- temperature.abbreviation
35
+ temperature[:abbreviation]
37
36
  end
38
37
 
39
38
  private
40
39
 
41
40
  def time
42
- OpenStruct.new(fetch_sample(TIME_UNITS))
41
+ fetch_sample(TIME_UNITS)
43
42
  end
44
43
 
45
44
  def temperature
46
- OpenStruct.new(fetch_sample(TEMPERATURE_UNITS))
45
+ fetch_sample(TEMPERATURE_UNITS)
47
46
  end
48
47
  end
49
48
  end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'ffaker/unit'
4
- require 'ostruct'
5
4
 
6
5
  module FFaker
7
6
  module UnitEnglish
@@ -15,7 +14,7 @@ module FFaker
15
14
  { name: 'foot', abbreviation: 'ft' },
16
15
  { name: 'yard', abbreviation: 'yd' },
17
16
  { name: 'furlong', abbreviation: 'fur' },
18
- { name: 'mile', abbreviation: 'm' }
17
+ { name: 'mile', abbreviation: 'mi' }
19
18
  ].freeze
20
19
  MASS_UNITS = [
21
20
  { name: 'grains', abbreviation: 'gr' },
@@ -36,75 +35,75 @@ module FFaker
36
35
  { name: 'cubic yard', abbreviation: 'CY' }
37
36
  ].freeze
38
37
  AREA_UNITS = [
39
- { name: 'square inch', abbreviation: 'sq. in' },
38
+ { name: 'square inch', abbreviation: 'sq in' },
40
39
  { name: 'square foot', abbreviation: 'sq ft' },
41
40
  { name: 'square yard', abbreviation: 'sq yd' },
42
41
  { name: 'acre', abbreviation: 'ac' },
43
42
  { name: 'section', abbreviation: 's' },
44
43
  { name: 'square mile', abbreviation: 'sq mi' },
45
- { name: 'township', abbreviation: 'Twp' }
44
+ { name: 'township', abbreviation: 'twp' }
46
45
  ].freeze
47
46
 
48
47
  def mass_name
49
- mass.name
48
+ mass[:name]
50
49
  end
51
50
 
52
51
  def mass_abbr
53
- mass.abbreviation
52
+ mass[:abbreviation]
54
53
  end
55
54
 
56
55
  def length_name
57
- length.name
56
+ length[:name]
58
57
  end
59
58
 
60
59
  def length_abbr
61
- length.abbreviation
60
+ length[:abbreviation]
62
61
  end
63
62
 
64
63
  def liquid_name
65
- liquid.name
64
+ liquid[:name]
66
65
  end
67
66
 
68
67
  def liquid_abbr
69
- liquid.abbreviation
68
+ liquid[:abbreviation]
70
69
  end
71
70
 
72
71
  def volume_name
73
- volume.name
72
+ volume[:name]
74
73
  end
75
74
 
76
75
  def volume_abbr
77
- volume.abbreviation
76
+ volume[:abbreviation]
78
77
  end
79
78
 
80
79
  def area_name
81
- area.name
80
+ area[:name]
82
81
  end
83
82
 
84
83
  def area_abbr
85
- area.abbreviation
84
+ area[:abbreviation]
86
85
  end
87
86
 
88
87
  private
89
88
 
90
89
  def length
91
- OpenStruct.new(fetch_sample(LENGTH_UNITS))
90
+ fetch_sample(LENGTH_UNITS)
92
91
  end
93
92
 
94
93
  def mass
95
- OpenStruct.new(fetch_sample(MASS_UNITS))
94
+ fetch_sample(MASS_UNITS)
96
95
  end
97
96
 
98
97
  def liquid
99
- OpenStruct.new(fetch_sample(LIQUID_UNITS))
98
+ fetch_sample(LIQUID_UNITS)
100
99
  end
101
100
 
102
101
  def volume
103
- OpenStruct.new(fetch_sample(VOLUME_UNITS))
102
+ fetch_sample(VOLUME_UNITS)
104
103
  end
105
104
 
106
105
  def area
107
- OpenStruct.new(fetch_sample(AREA_UNITS))
106
+ fetch_sample(AREA_UNITS)
108
107
  end
109
108
  end
110
109
  end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'ffaker/unit'
4
- require 'ostruct'
5
4
 
6
5
  module FFaker
7
6
  module UnitMetric
@@ -37,65 +36,65 @@ module FFaker
37
36
  ].freeze
38
37
 
39
38
  def mass_name
40
- mass.name
39
+ mass[:name]
41
40
  end
42
41
 
43
42
  def mass_abbr
44
- mass.abbreviation
43
+ mass[:abbreviation]
45
44
  end
46
45
 
47
46
  def length_name
48
- length.name
47
+ length[:name]
49
48
  end
50
49
 
51
50
  def length_abbr
52
- length.abbreviation
51
+ length[:abbreviation]
53
52
  end
54
53
 
55
54
  def liquid_name
56
- liquid.name
55
+ liquid[:name]
57
56
  end
58
57
 
59
58
  def liquid_abbr
60
- liquid.abbreviation
59
+ liquid[:abbreviation]
61
60
  end
62
61
 
63
62
  def volume_name
64
- volume.name
63
+ volume[:name]
65
64
  end
66
65
 
67
66
  def volume_abbr
68
- volume.abbreviation
67
+ volume[:abbreviation]
69
68
  end
70
69
 
71
70
  def area_name
72
- area.name
71
+ area[:name]
73
72
  end
74
73
 
75
74
  def area_abbr
76
- area.abbreviation
75
+ area[:abbreviation]
77
76
  end
78
77
 
79
78
  private
80
79
 
81
80
  def length
82
- OpenStruct.new(fetch_sample(LENGTH_UNITS))
81
+ fetch_sample(LENGTH_UNITS)
83
82
  end
84
83
 
85
84
  def mass
86
- OpenStruct.new(fetch_sample(MASS_UNITS))
85
+ fetch_sample(MASS_UNITS)
87
86
  end
88
87
 
89
88
  def liquid
90
- OpenStruct.new(fetch_sample(LIQUID_UNITS))
89
+ fetch_sample(LIQUID_UNITS)
91
90
  end
92
91
 
93
92
  def volume
94
- OpenStruct.new(fetch_sample(VOLUME_UNITS))
93
+ fetch_sample(VOLUME_UNITS)
95
94
  end
96
95
 
97
96
  def area
98
- OpenStruct.new(fetch_sample(AREA_UNITS))
97
+ fetch_sample(AREA_UNITS)
99
98
  end
100
99
  end
101
100
  end
@@ -20,6 +20,8 @@ module FFaker
20
20
  def fetch_sample(list, options = {})
21
21
  if (count = options.delete(:count))
22
22
  list.sample(count, random: FFaker::Random)
23
+ elsif list.is_a?(Range)
24
+ FFaker::Random.rand(list)
23
25
  else
24
26
  list.sample(random: FFaker::Random)
25
27
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'set'
4
-
5
3
  module FFaker
6
4
  class UniqueUtils
7
5
  def initialize(generator, max_retries)