ffaker 2.6.0 → 2.7.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 (120) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +5 -0
  3. data/README.md +8 -0
  4. data/REFERENCE.md +21 -1
  5. data/Rakefile +1 -1
  6. data/ffaker.gemspec +6 -6
  7. data/lib/ffaker.rb +2 -2
  8. data/lib/ffaker/address.rb +9 -9
  9. data/lib/ffaker/address_au.rb +2 -2
  10. data/lib/ffaker/address_br.rb +2 -2
  11. data/lib/ffaker/address_ca.rb +2 -2
  12. data/lib/ffaker/address_da.rb +2 -2
  13. data/lib/ffaker/address_de.rb +2 -2
  14. data/lib/ffaker/address_fi.rb +1 -2
  15. data/lib/ffaker/address_fr.rb +1 -1
  16. data/lib/ffaker/address_gr.rb +2 -2
  17. data/lib/ffaker/address_id.rb +1 -1
  18. data/lib/ffaker/address_in.rb +3 -5
  19. data/lib/ffaker/address_kr.rb +9 -8
  20. data/lib/ffaker/address_mx.rb +2 -2
  21. data/lib/ffaker/address_nl.rb +1 -1
  22. data/lib/ffaker/address_pl.rb +5 -5
  23. data/lib/ffaker/address_ru.rb +1 -1
  24. data/lib/ffaker/address_ua.rb +3 -3
  25. data/lib/ffaker/address_us.rb +2 -2
  26. data/lib/ffaker/avatar.rb +1 -1
  27. data/lib/ffaker/book.rb +2 -2
  28. data/lib/ffaker/boolean.rb +1 -1
  29. data/lib/ffaker/cheesy_lingo.rb +2 -2
  30. data/lib/ffaker/color.rb +2 -2
  31. data/lib/ffaker/company.rb +6 -6
  32. data/lib/ffaker/company_cn.rb +2 -2
  33. data/lib/ffaker/company_it.rb +18 -2
  34. data/lib/ffaker/company_se.rb +4 -4
  35. data/lib/ffaker/data/company_it/piva_office_codes +99 -0
  36. data/lib/ffaker/education.rb +8 -8
  37. data/lib/ffaker/filesystem.rb +3 -3
  38. data/lib/ffaker/food.rb +1 -1
  39. data/lib/ffaker/gender.rb +1 -1
  40. data/lib/ffaker/gender_br.rb +1 -1
  41. data/lib/ffaker/gender_cn.rb +1 -1
  42. data/lib/ffaker/gender_id.rb +1 -1
  43. data/lib/ffaker/gender_kr.rb +1 -1
  44. data/lib/ffaker/html_ipsum.rb +4 -4
  45. data/lib/ffaker/identification.rb +1 -1
  46. data/lib/ffaker/identification_br.rb +1 -1
  47. data/lib/ffaker/identification_es.rb +1 -1
  48. data/lib/ffaker/identification_es_cl.rb +2 -2
  49. data/lib/ffaker/identification_es_co.rb +5 -5
  50. data/lib/ffaker/identification_mx.rb +4 -4
  51. data/lib/ffaker/internet.rb +9 -9
  52. data/lib/ffaker/internet_se.rb +6 -8
  53. data/lib/ffaker/job_fr.rb +2 -2
  54. data/lib/ffaker/lorem.rb +2 -2
  55. data/lib/ffaker/lorem_ar.rb +2 -2
  56. data/lib/ffaker/lorem_cn.rb +2 -2
  57. data/lib/ffaker/lorem_fr.rb +2 -2
  58. data/lib/ffaker/lorem_kr.rb +2 -2
  59. data/lib/ffaker/lorem_ru.rb +2 -2
  60. data/lib/ffaker/lorem_ua.rb +3 -3
  61. data/lib/ffaker/movie.rb +7 -7
  62. data/lib/ffaker/name.rb +4 -11
  63. data/lib/ffaker/name_br.rb +2 -2
  64. data/lib/ffaker/name_cs.rb +13 -11
  65. data/lib/ffaker/name_da.rb +3 -3
  66. data/lib/ffaker/name_de.rb +2 -2
  67. data/lib/ffaker/name_fr.rb +2 -4
  68. data/lib/ffaker/name_ga.rb +3 -10
  69. data/lib/ffaker/name_gr.rb +3 -3
  70. data/lib/ffaker/name_id.rb +2 -2
  71. data/lib/ffaker/name_it.rb +3 -6
  72. data/lib/ffaker/name_mx.rb +8 -8
  73. data/lib/ffaker/name_nb.rb +3 -4
  74. data/lib/ffaker/name_nl.rb +5 -5
  75. data/lib/ffaker/name_ph.rb +4 -6
  76. data/lib/ffaker/name_pl.rb +4 -4
  77. data/lib/ffaker/name_ru.rb +14 -12
  78. data/lib/ffaker/name_se.rb +3 -4
  79. data/lib/ffaker/name_sn.rb +13 -19
  80. data/lib/ffaker/name_ua.rb +1 -1
  81. data/lib/ffaker/nato_alphabet.rb +2 -2
  82. data/lib/ffaker/phone_number.rb +16 -16
  83. data/lib/ffaker/phone_number_au.rb +7 -7
  84. data/lib/ffaker/phone_number_br.rb +7 -7
  85. data/lib/ffaker/phone_number_ch.rb +7 -7
  86. data/lib/ffaker/phone_number_cu.rb +10 -10
  87. data/lib/ffaker/phone_number_de.rb +2 -2
  88. data/lib/ffaker/phone_number_fr.rb +4 -4
  89. data/lib/ffaker/phone_number_id.rb +1 -1
  90. data/lib/ffaker/phone_number_kr.rb +4 -4
  91. data/lib/ffaker/phone_number_mx.rb +2 -2
  92. data/lib/ffaker/phone_number_nl.rb +3 -3
  93. data/lib/ffaker/phone_number_se.rb +3 -3
  94. data/lib/ffaker/phone_number_sg.rb +1 -1
  95. data/lib/ffaker/phone_number_sn.rb +5 -5
  96. data/lib/ffaker/product.rb +9 -9
  97. data/lib/ffaker/ssn_se.rb +4 -4
  98. data/lib/ffaker/string.rb +3 -3
  99. data/lib/ffaker/time.rb +6 -1
  100. data/lib/ffaker/utils/module_utils.rb +5 -0
  101. data/lib/ffaker/utils/unique_utils.rb +45 -0
  102. data/lib/ffaker/vehicle.rb +5 -5
  103. data/scripts/reference.rb +1 -1
  104. data/test/test_address_gr.rb +5 -5
  105. data/test/test_address_ja.rb +2 -1
  106. data/test/test_address_kr.rb +1 -0
  107. data/test/test_array_utils.rb +3 -3
  108. data/test/test_color.rb +1 -1
  109. data/test/test_company_it.rb +5 -1
  110. data/test/test_identification_es_mx.rb +1 -1
  111. data/test/test_module_utils.rb +1 -1
  112. data/test/test_name_ar.rb +4 -6
  113. data/test/test_name_cs.rb +2 -2
  114. data/test/test_name_ja.rb +2 -2
  115. data/test/test_name_ru.rb +2 -2
  116. data/test/test_phone_number.rb +2 -2
  117. data/test/test_string.rb +1 -1
  118. data/test/test_time.rb +9 -1
  119. data/test/test_unique_utils.rb +54 -0
  120. metadata +6 -2
@@ -23,7 +23,7 @@ module FFaker
23
23
  extend ModuleUtils
24
24
  extend self
25
25
 
26
- GENDERS = %w(female male).freeze
26
+ GENDERS = %w[female male].freeze
27
27
 
28
28
  def ssn(opts = {})
29
29
  from = opts[:from] || ::Time.local(1940, 1, 1)
@@ -66,15 +66,15 @@ module FFaker
66
66
  end
67
67
 
68
68
  def get_random_region_even
69
- rand(499) * 2
69
+ rand(0..498) * 2
70
70
  end
71
71
 
72
72
  def get_random_region_odd
73
- rand(499) * 2 + 1
73
+ rand(0..498) * 2 + 1
74
74
  end
75
75
 
76
76
  def three_character_string(number)
77
- '%03d' % number
77
+ format('%03d', number)
78
78
  end
79
79
 
80
80
  # http://en.wikipedia.org/wiki/Luhn_algorithm
@@ -54,11 +54,11 @@ module FFaker
54
54
  # TODO: Let ? generate nothing
55
55
  '' # We already printed its target
56
56
  when '+' then
57
- tokens.unshift(token) if rand(2) == 1 # Leave the `+` on to run again
57
+ tokens.unshift(token) if rand(0..1) == 1 # Leave the `+` on to run again
58
58
  process_token(@last_token) # Run the last one at least once
59
59
  when '*' then
60
- tokens.unshift(token) if rand(2) == 1 # Leave the `*` on to run again
61
- return '' if rand(2) == 1 # Or maybe do nothing
60
+ tokens.unshift(token) if rand(0..1) == 1 # Leave the `*` on to run again
61
+ return '' if rand(0..1) == 1 # Or maybe do nothing
62
62
  process_token(@last_token) # Else run the last one again
63
63
  when '{' then
64
64
  number = ''
@@ -5,12 +5,17 @@ module FFaker
5
5
  extend ModuleUtils
6
6
  extend self
7
7
 
8
- MONTHS = %w(January February March April May June July August September October November December).freeze
8
+ MONTHS = %w[January February March April May June July August September October November December].freeze
9
+ DAYS_OF_WEEK = %w[Monday Tuesday Wednesday Thursday Friday Saturday Sunday].freeze
9
10
 
10
11
  def month
11
12
  fetch_sample(MONTHS)
12
13
  end
13
14
 
15
+ def day_of_week(options = {})
16
+ fetch_sample(DAYS_OF_WEEK)[0..(options[:long] ? 10 : 2)]
17
+ end
18
+
14
19
  def date(params = {})
15
20
  years_back = params[:year_range] || 5
16
21
  latest_year = params [:year_latest] || 0
@@ -1,5 +1,6 @@
1
1
  require 'ffaker/utils/array_utils'
2
2
  require 'ffaker/utils/random_utils'
3
+ require 'ffaker/utils/unique_utils'
3
4
 
4
5
  module FFaker
5
6
  module ModuleUtils
@@ -28,5 +29,9 @@ module FFaker
28
29
  .tr('-', '_')
29
30
  .downcase
30
31
  end
32
+
33
+ def unique(max_retries = 10_000)
34
+ @unique_generator ||= FFaker::UniqueUtils.new(self, max_retries)
35
+ end
31
36
  end
32
37
  end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'set'
4
+
5
+ module FFaker
6
+ class UniqueUtils
7
+ def initialize(generator, max_retries)
8
+ @generator = generator
9
+ @max_retries = max_retries
10
+ @previous_results = Hash.new { |hash, key| hash[key] = Set.new }
11
+ end
12
+
13
+ def method_missing(name, *arguments)
14
+ @generator.respond_to?(name) ? add_results_to_hash(name, *arguments) : super
15
+ end
16
+
17
+ def respond_to_missing?(method_name, include_private = false)
18
+ super
19
+ end
20
+
21
+ RetryLimitExceeded = Class.new(StandardError)
22
+
23
+ def clear
24
+ @previous_results.clear
25
+ end
26
+
27
+ def self.clear
28
+ ObjectSpace.each_object(self, &:clear)
29
+ end
30
+
31
+ private
32
+
33
+ def add_results_to_hash(name, *arguments)
34
+ @max_retries.times do
35
+ result = @generator.send(name, *arguments)
36
+
37
+ next if @previous_results[[name, arguments]].include?(result)
38
+
39
+ @previous_results[[name, arguments]] << result
40
+ return result
41
+ end
42
+ raise RetryLimitExceeded
43
+ end
44
+ end
45
+ end
@@ -5,14 +5,14 @@ module FFaker
5
5
  extend ModuleUtils
6
6
  extend self
7
7
 
8
- DRIVETRAINS = %w(4WD 4X4 AWD FWD RWD).freeze
8
+ DRIVETRAINS = %w[4WD 4X4 AWD FWD RWD].freeze
9
9
  YEARS = [*'1900'..(Date.today.year + 1).to_s].freeze
10
- COLOR_PREFIXES = k(%w(
10
+ COLOR_PREFIXES = k(%w[
11
11
  beautiful bright calm dangerous dark dull fast magnetic magnificent majestic melodic metallic
12
12
  mundane mute mysterious new pleasant pretty resonant royal slate soft tranquil vibrant weak
13
- ))
14
- TRANSMISSIONS_ABBR = %w(AT MT AM CVT).freeze
15
- CYLINDERS = %w(2 5 6 8).freeze
13
+ ])
14
+ TRANSMISSIONS_ABBR = %w[AT MT AM CVT].freeze
15
+ CYLINDERS = %w[2 5 6 8].freeze
16
16
 
17
17
  def base_color
18
18
  FFaker::Color.name
@@ -22,7 +22,7 @@ end
22
22
  # Returns faker methods for a given module
23
23
  def faker_methods(mod)
24
24
  methods = mod.methods - Module.methods -
25
- [:k, :underscore, :fetch_sample, :rand, :shuffle]
25
+ %i[k underscore fetch_sample rand shuffle]
26
26
 
27
27
  # For Company.name (et al), don't discard :name if it was reimplemented
28
28
  methods << :name if mod.send(:name) != mod.to_s
@@ -16,23 +16,23 @@ class TestAddressGR < Test::Unit::TestCase
16
16
  end
17
17
 
18
18
  def test_city
19
- assert_match /\p{Greek}/, @address_gr.city
19
+ assert_match(/\p{Greek}/, @address_gr.city)
20
20
  end
21
21
 
22
22
  def test_region
23
- assert_match /\p{Greek}/, @address_gr.region
23
+ assert_match(/\p{Greek}/, @address_gr.region)
24
24
  end
25
25
 
26
26
  def test_zip_code
27
- assert_match /\A\d{5}\z/, @address_gr.zip_code
27
+ assert_match(/\A\d{5}\z/, @address_gr.zip_code)
28
28
  end
29
29
 
30
30
  def test_street_name
31
- assert_match /\p{Greek}/, @address_gr.street_name
31
+ assert_match(/\p{Greek}/, @address_gr.street_name)
32
32
  end
33
33
 
34
34
  def test_street_nbr
35
- assert_match /\A\d{1,3}\z/, @address_gr.street_nbr
35
+ assert_match(/\A\d{1,3}\z/, @address_gr.street_nbr)
36
36
  end
37
37
 
38
38
  def test_street_address
@@ -1,5 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
+
3
4
  require 'helper'
4
5
 
5
6
  class TestAddressJA < Test::Unit::TestCase
@@ -37,7 +38,7 @@ class TestAddressJA < Test::Unit::TestCase
37
38
  end
38
39
 
39
40
  def test_designated_city
40
- assert_match(japanese_regex(''), FFaker::AddressJA.city)
41
+ assert_match(japanese_regex('[市区]'), FFaker::AddressJA.city)
41
42
  end
42
43
 
43
44
  def test_city
@@ -1,5 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
+
3
4
  require 'helper'
4
5
 
5
6
  class TestAddressKR < Test::Unit::TestCase
@@ -54,20 +54,20 @@ class TestArrayUtils < Test::Unit::TestCase
54
54
 
55
55
  def test_self_random_pick_is_deterministic
56
56
  supress_warn_output do
57
- array = Array.new(10) { rand(10) }
57
+ array = Array.new(10) { rand(0..9) }
58
58
  assert_deterministic { FFaker::ArrayUtils.random_pick(array, 3) }
59
59
  end
60
60
  end
61
61
 
62
62
  def test_self_rand_is_deterministic
63
63
  supress_warn_output do
64
- array = Array.new(10) { rand(10) }
64
+ array = Array.new(10) { rand(0..9) }
65
65
  assert_deterministic { FFaker::ArrayUtils.rand(array) }
66
66
  end
67
67
  end
68
68
 
69
69
  def test_self_shuffle_is_deterministic
70
- array = Array.new(10) { rand(10) }
70
+ array = Array.new(10) { rand(0..9) }
71
71
  assert_deterministic { FFaker::ArrayUtils.shuffle(array) }
72
72
  end
73
73
 
@@ -21,7 +21,7 @@ class TestColor < Test::Unit::TestCase
21
21
  end
22
22
 
23
23
  def test_hex_code
24
- assert_match /\A\h{6}\z/, FFaker::Color.hex_code
24
+ assert_match(/\A\h{6}\z/, FFaker::Color.hex_code)
25
25
  end
26
26
 
27
27
  def test_rgb_array
@@ -7,7 +7,7 @@ class TestCompanyIT < Test::Unit::TestCase
7
7
 
8
8
  assert_methods_are_deterministic(
9
9
  FFaker::CompanyIT,
10
- :name, :suffix, :prefix
10
+ :name, :suffix, :prefix, :partita_iva
11
11
  )
12
12
 
13
13
  def test_name
@@ -21,4 +21,8 @@ class TestCompanyIT < Test::Unit::TestCase
21
21
  def test_prefix
22
22
  assert_match(/[ a-z]+/i, FFaker::CompanyIT.prefix)
23
23
  end
24
+
25
+ def test_partita_iva
26
+ assert_match(/\d{11}/, FFaker::CompanyIT.partita_iva)
27
+ end
24
28
  end
@@ -23,7 +23,7 @@ class TestIdentificationMX < Test::Unit::TestCase
23
23
 
24
24
  def test_curp
25
25
  or_curp_states_abbr = FFaker::IdentificationMX::ESTADOS_CURP.join('|')
26
- re = /\A[a-z][aeioux][a-z]{2}[0-9]{2}[0-1][0-9][0-3][0-9][hm]#{or_curp_states_abbr}[bcdfghjklmnñpqrstvwxyz]{3}[0-9a-z][0-9]\z/i
26
+ re = /\A[a-z][aeioux][a-z]{2}\d{2}[0-1]\d[0-3]\d[hm](?:#{or_curp_states_abbr})[bcdfghjklmnñpqrstvwxyz]{3}[0-9a-z]\d\z/ui
27
27
  assert_match(re, FFaker::IdentificationMX.curp)
28
28
  end
29
29
  end
@@ -6,7 +6,7 @@ class TestModuleUtils < Test::Unit::TestCase
6
6
  def test_provides_a_k_method_for_generating_constant_arrays
7
7
  obj = Object.new
8
8
  obj.extend FFaker::ModuleUtils
9
- result = obj.k %w(1 2 3)
9
+ result = obj.k %w[1 2 3]
10
10
 
11
11
  assert result.frozen?
12
12
  result.each { |e| assert e.frozen? }
@@ -29,14 +29,12 @@ class TestFakerNameAR < Test::Unit::TestCase
29
29
  end
30
30
 
31
31
  def test_name_male
32
- first_name, last_name = @tester.name_male.split(/\s+/, 2)
33
- assert_include(@tester::FIRST_NAMES_MALE, first_name)
34
- assert_include(@tester::LAST_NAMES, last_name)
32
+ expected = @tester::FIRST_NAMES_MALE.product(@tester::LAST_NAMES).map { |set| set.join(' ') }
33
+ assert_include(expected, @tester.name_male)
35
34
  end
36
35
 
37
36
  def test_name_female
38
- first_name, last_name = @tester.name_female.split(/\s+/, 2)
39
- assert_include(@tester::FIRST_NAMES_FEMALE, first_name)
40
- assert_include(@tester::LAST_NAMES, last_name)
37
+ expected = @tester::FIRST_NAMES_FEMALE.product(@tester::LAST_NAMES).map { |set| set.join(' ') }
38
+ assert_include(expected, @tester.name_female)
41
39
  end
42
40
  end
@@ -63,10 +63,10 @@ class TestFakerNameCS < Test::Unit::TestCase
63
63
 
64
64
  # checks if every name is of the same sex
65
65
  def same_sex?(words, sex = :any)
66
- (sex == :any ? [:male, :female] : [sex]).any? do |sex|
66
+ (sex == :any ? %i[male female] : [sex]).any? do |s|
67
67
  words.all? do |word|
68
68
  [@tester::LAST_NAMES, @tester::FIRST_NAMES].any? do |names|
69
- names[sex].include?(word)
69
+ names[s].include?(word)
70
70
  end
71
71
  end
72
72
  end
@@ -5,8 +5,8 @@ require 'helper'
5
5
  class TestFakerNameJA < Test::Unit::TestCase
6
6
  class << self
7
7
  def startup
8
- FFaker::NameJA.const_set(:FIRST_NAMES, %w(あきら フミ 三郎))
9
- FFaker::NameJA.const_set(:LAST_NAMES, %w(佐藤 高橋 佐々木))
8
+ FFaker::NameJA.const_set(:FIRST_NAMES, %w[あきら フミ 三郎])
9
+ FFaker::NameJA.const_set(:LAST_NAMES, %w[佐藤 高橋 佐々木])
10
10
  end
11
11
 
12
12
  def shutdown
@@ -75,10 +75,10 @@ class TestFakerNameRU < Test::Unit::TestCase
75
75
 
76
76
  # checks if every name is of the same sex
77
77
  def same_sex?(words, sex = :any)
78
- (sex == :any ? [:male, :female] : [sex]).any? do |sex|
78
+ (sex == :any ? %i[male female] : [sex]).any? do |s|
79
79
  words.all? do |word|
80
80
  [@tester::LAST_NAMES, @tester::FIRST_NAMES, @tester::PATRONYMICS].any? do |names|
81
- names[sex].include?(word)
81
+ names[s].include?(word)
82
82
  end
83
83
  end
84
84
  end
@@ -38,8 +38,8 @@ class TestPhoneNumer < Test::Unit::TestCase
38
38
  end
39
39
 
40
40
  def test_imei_with_sn
41
- sn = rand(1_000_000)
42
- assert_match(/\A\d{8}#{sprintf('%06d', sn)}\d{1}\z/,
41
+ sn = rand(0...1_000_000)
42
+ assert_match(/\A\d{8}#{format('%06d', sn)}\d{1}\z/,
43
43
  FFaker::PhoneNumber.imei(sn))
44
44
  assert_deterministic { FFaker::PhoneNumber.imei(sn) }
45
45
  end
@@ -48,7 +48,7 @@ class TestString < Test::Unit::TestCase
48
48
  end
49
49
 
50
50
  def test_atom_sets
51
- assert_include %w(a b c), FS.from_regexp(/[abc]/)
51
+ assert_include %w[a b c], FS.from_regexp(/[abc]/)
52
52
  assert_deterministic { FS.from_regexp(/[abc]/) }
53
53
  end
54
54
 
@@ -5,7 +5,7 @@ require 'helper'
5
5
  class TestFakerTime < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- assert_methods_are_deterministic(FFaker::Time, :date, :datetime, :month)
8
+ assert_methods_are_deterministic(FFaker::Time, :date, :datetime, :month, :day_of_week)
9
9
 
10
10
  def setup
11
11
  @tester = FFaker::Time
@@ -16,6 +16,14 @@ class TestFakerTime < Test::Unit::TestCase
16
16
  assert_match(date_regex, @tester.date)
17
17
  end
18
18
 
19
+ def test_day_of_week
20
+ day_of_week_short_regex = /\A(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)\z/
21
+ day_of_week_long_regex = /\A(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)\z/
22
+ assert_match(day_of_week_short_regex, @tester.day_of_week)
23
+ assert_match(day_of_week_long_regex, @tester.day_of_week(long: true))
24
+ assert_deterministic { @tester.day_of_week }
25
+ end
26
+
19
27
  def test_date_hours_and_minutes
20
28
  assert_match('04:20:00', @tester.date(hours: 4, minutes: 20))
21
29
  assert_deterministic { @tester.date(hours: 4, minutes: 20) }
@@ -0,0 +1,54 @@
1
+ # encoding: utf-8
2
+
3
+ require 'helper'
4
+
5
+ class TestUniqueUtils < Test::Unit::TestCase
6
+ def test_generates_unique_values
7
+ unique_object = FFaker::UniqueUtils.new(FFaker::Name, 10_000)
8
+
9
+ result = [unique_object.name, unique_object.name]
10
+ assert_operator(result[0], :!=, result[1])
11
+ end
12
+
13
+ def test_returns_error_when_retries_exceeded
14
+ stubbed_generator = Object.new
15
+ def stubbed_generator.test
16
+ 1
17
+ end
18
+
19
+ unique_object = FFaker::UniqueUtils.new(stubbed_generator, 3)
20
+
21
+ unique_object.test
22
+
23
+ assert_raises FFaker::UniqueUtils::RetryLimitExceeded do
24
+ unique_object.test
25
+ end
26
+ end
27
+
28
+ def test_clears_unique_values
29
+ stubbed_generator = Object.new
30
+ def stubbed_generator.test
31
+ 1
32
+ end
33
+
34
+ unique_object = FFaker::UniqueUtils.new(stubbed_generator, 3)
35
+
36
+ assert_equal(1, unique_object.test)
37
+
38
+ assert_raises FFaker::UniqueUtils::RetryLimitExceeded do
39
+ unique_object.test
40
+ end
41
+
42
+ FFaker::UniqueUtils.clear
43
+
44
+ assert_equal(1, unique_object.test)
45
+
46
+ assert_raises FFaker::UniqueUtils::RetryLimitExceeded do
47
+ unique_object.test
48
+ end
49
+
50
+ unique_object.clear
51
+
52
+ assert_equal(1, unique_object.test)
53
+ end
54
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffaker
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - https://github.com/ffaker/ffaker/graphs/contributors
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-02-20 00:00:00.000000000 Z
12
+ date: 2017-09-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -200,6 +200,7 @@ files:
200
200
  - lib/ffaker/data/company/catch_pos
201
201
  - lib/ffaker/data/company/catch_pre
202
202
  - lib/ffaker/data/company/position_areas
203
+ - lib/ffaker/data/company_it/piva_office_codes
203
204
  - lib/ffaker/data/conference/conference_list
204
205
  - lib/ffaker/data/currency/currency_code
205
206
  - lib/ffaker/data/currency/currency_name
@@ -450,6 +451,7 @@ files:
450
451
  - lib/ffaker/utils/array_utils.rb
451
452
  - lib/ffaker/utils/module_utils.rb
452
453
  - lib/ffaker/utils/random_utils.rb
454
+ - lib/ffaker/utils/unique_utils.rb
453
455
  - lib/ffaker/vehicle.rb
454
456
  - lib/ffaker/venue.rb
455
457
  - lib/ffaker/youtube.rb
@@ -596,6 +598,7 @@ files:
596
598
  - test/test_string.rb
597
599
  - test/test_time.rb
598
600
  - test/test_tweet.rb
601
+ - test/test_unique_utils.rb
599
602
  - test/test_units.rb
600
603
  - test/test_units_english.rb
601
604
  - test/test_units_metric.rb
@@ -767,6 +770,7 @@ test_files:
767
770
  - test/test_string.rb
768
771
  - test/test_time.rb
769
772
  - test/test_tweet.rb
773
+ - test/test_unique_utils.rb
770
774
  - test/test_units.rb
771
775
  - test/test_units_english.rb
772
776
  - test/test_units_metric.rb