ffaker 2.12.0 → 2.17.0

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