ffaker 2.22.0 → 2.23.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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +120 -17
  3. data/Gemfile +15 -0
  4. data/README.md +3 -2
  5. data/REFERENCE.md +885 -868
  6. data/Rakefile +7 -7
  7. data/ffaker.gemspec +2 -6
  8. data/lib/ffaker/address.rb +4 -4
  9. data/lib/ffaker/address_fr.rb +3 -5
  10. data/lib/ffaker/address_it.rb +1 -4
  11. data/lib/ffaker/avatar.rb +11 -3
  12. data/lib/ffaker/bank.rb +1 -1
  13. data/lib/ffaker/bank_us.rb +33 -0
  14. data/lib/ffaker/book.rb +10 -2
  15. data/lib/ffaker/cheesy_lingo.rb +2 -2
  16. data/lib/ffaker/code.rb +1 -1
  17. data/lib/ffaker/company.rb +1 -1
  18. data/lib/ffaker/company_fr.rb +1 -1
  19. data/lib/ffaker/crypto.rb +14 -0
  20. data/lib/ffaker/date.rb +9 -0
  21. data/lib/ffaker/filesystem.rb +12 -2
  22. data/lib/ffaker/identification_br.rb +2 -11
  23. data/lib/ffaker/identification_ec.rb +1 -1
  24. data/lib/ffaker/identification_es_cl.rb +1 -1
  25. data/lib/ffaker/identification_kr.rb +10 -3
  26. data/lib/ffaker/identification_pl.rb +2 -2
  27. data/lib/ffaker/image.rb +28 -4
  28. data/lib/ffaker/lorem_ja.rb +1 -1
  29. data/lib/ffaker/lorem_ru.rb +1 -1
  30. data/lib/ffaker/movie.rb +1 -1
  31. data/lib/ffaker/name_fr.rb +4 -3
  32. data/lib/ffaker/number.rb +4 -0
  33. data/lib/ffaker/phone_number_de.rb +3 -3
  34. data/lib/ffaker/skill.rb +1 -1
  35. data/lib/ffaker/ssn.rb +4 -2
  36. data/lib/ffaker/string.rb +1 -1
  37. data/lib/ffaker/utils/module_utils.rb +2 -2
  38. data/lib/ffaker/utils/unique_utils.rb +9 -5
  39. data/lib/ffaker/version.rb +1 -1
  40. data/lib/ffaker.rb +60 -191
  41. data/scripts/reference.rb +8 -10
  42. data/test/helper.rb +1 -1
  43. data/test/test_avatar.rb +30 -7
  44. data/test/test_bank_us.rb +35 -0
  45. data/test/test_book.rb +29 -0
  46. data/test/test_crypto.rb +15 -0
  47. data/test/test_date.rb +11 -1
  48. data/test/test_filesystem.rb +28 -2
  49. data/test/test_healthcare_ru.rb +1 -1
  50. data/test/test_identification.rb +12 -2
  51. data/test/test_identification_ec.rb +1 -1
  52. data/test/test_identification_es_mx.rb +3 -1
  53. data/test/test_identification_it.rb +12 -1
  54. data/test/test_identification_kr.rb +3 -3
  55. data/test/test_image.rb +51 -5
  56. data/test/test_internet.rb +3 -1
  57. data/test/test_internet_se.rb +3 -1
  58. data/test/test_lorem_br.rb +1 -1
  59. data/test/test_lorem_ru.rb +1 -1
  60. data/test/test_lorem_ua.rb +1 -1
  61. data/test/test_name_ua.rb +1 -1
  62. data/test/test_number.rb +13 -1
  63. data/test/test_phone_number_nl.rb +1 -1
  64. data/test/test_unique_utils.rb +4 -0
  65. data/test/test_units.rb +6 -6
  66. data/test/test_units_english.rb +15 -15
  67. data/test/test_units_metric.rb +15 -15
  68. metadata +7 -45
data/lib/ffaker.rb CHANGED
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'ffaker/version'
4
+ require 'pathname'
5
+
3
6
  module FFaker
4
7
  require_relative 'ffaker/utils/array_utils'
5
8
  require_relative 'ffaker/utils/module_utils'
@@ -28,197 +31,63 @@ module FFaker
28
31
  letterify(numerify(masks))
29
32
  end
30
33
 
31
- autoload :Address, 'ffaker/address'
32
- autoload :AddressAU, 'ffaker/address_au'
33
- autoload :AddressBR, 'ffaker/address_br'
34
- autoload :AddressCA, 'ffaker/address_ca'
35
- autoload :AddressCH, 'ffaker/address_ch'
36
- autoload :AddressCHDE, 'ffaker/address_ch_de'
37
- autoload :AddressCHFR, 'ffaker/address_ch_fr'
38
- autoload :AddressCHIT, 'ffaker/address_ch_it'
39
- autoload :AddressDA, 'ffaker/address_da'
40
- autoload :AddressDE, 'ffaker/address_de'
41
- autoload :AddressFI, 'ffaker/address_fi'
42
- autoload :AddressFR, 'ffaker/address_fr'
43
- autoload :AddressGR, 'ffaker/address_gr'
44
- autoload :AddressID, 'ffaker/address_id'
45
- autoload :AddressIN, 'ffaker/address_in'
46
- autoload :AddressIT, 'ffaker/address_it'
47
- autoload :AddressJA, 'ffaker/address_ja'
48
- autoload :AddressKR, 'ffaker/address_kr'
49
- autoload :AddressMX, 'ffaker/address_mx'
50
- autoload :AddressNL, 'ffaker/address_nl'
51
- autoload :AddressPL, 'ffaker/address_pl'
52
- autoload :AddressRU, 'ffaker/address_ru'
53
- autoload :AddressSE, 'ffaker/address_se'
54
- autoload :AddressSN, 'ffaker/address_sn'
55
- autoload :AddressUA, 'ffaker/address_ua'
56
- autoload :AddressUK, 'ffaker/address_uk'
57
- autoload :AddressUS, 'ffaker/address_us'
58
- autoload :Airline, 'ffaker/airline'
59
- autoload :Animal, 'ffaker/animal'
60
- autoload :AnimalBR, 'ffaker/animal_br'
61
- autoload :AnimalCN, 'ffaker/animal_cn'
62
- autoload :AnimalES, 'ffaker/animal_es'
63
- autoload :AnimalPL, 'ffaker/animal_pl'
64
- autoload :AnimalUS, 'ffaker/animal_us'
65
- autoload :Avatar, 'ffaker/avatar'
66
- autoload :AWS, 'ffaker/aws'
67
- autoload :BaconIpsum, 'ffaker/bacon_ipsum'
68
- autoload :Bank, 'ffaker/bank'
69
- autoload :Book, 'ffaker/book'
70
- autoload :Boolean, 'ffaker/boolean'
71
- autoload :CheesyLingo, 'ffaker/cheesy_lingo'
72
- autoload :Code, 'ffaker/code'
73
- autoload :Color, 'ffaker/color'
74
- autoload :ColorPL, 'ffaker/color_pl'
75
- autoload :ColorUA, 'ffaker/color_ua'
76
- autoload :Company, 'ffaker/company'
77
- autoload :CompanyCN, 'ffaker/company_cn'
78
- autoload :CompanyFR, 'ffaker/company_fr'
79
- autoload :CompanyIT, 'ffaker/company_it'
80
- autoload :CompanyJA, 'ffaker/company_ja'
81
- autoload :CompanySE, 'ffaker/company_se'
82
- autoload :Conference, 'ffaker/conference'
83
- autoload :CoursesFR, 'ffaker/courses_fr'
84
- autoload :Currency, 'ffaker/currency'
85
- autoload :Date, 'ffaker/date'
86
- autoload :DizzleIpsum, 'ffaker/dizzle_ipsum'
87
- autoload :Education, 'ffaker/education'
88
- autoload :EducationCN, 'ffaker/education_cn'
89
- autoload :Filesystem, 'ffaker/filesystem'
90
- autoload :Food, 'ffaker/food'
91
- autoload :FoodPL, 'ffaker/food_pl'
92
- autoload :FreedomIpsum, 'ffaker/freedom_ipsum'
93
- autoload :Game, 'ffaker/game'
94
- autoload :Gender, 'ffaker/gender'
95
- autoload :GenderBR, 'ffaker/gender_br'
96
- autoload :GenderCN, 'ffaker/gender_cn'
97
- autoload :GenderID, 'ffaker/gender_id'
98
- autoload :GenderIT, 'ffaker/gender_it'
99
- autoload :GenderJA, 'ffaker/gender_ja'
100
- autoload :GenderJP, 'ffaker/gender_jp'
101
- autoload :GenderKR, 'ffaker/gender_kr'
102
- autoload :GenderPL, 'ffaker/gender_pl'
103
- autoload :GenderRU, 'ffaker/gender_ru'
104
- autoload :Geolocation, 'ffaker/geolocation'
105
- autoload :Guid, 'ffaker/guid'
106
- autoload :HealthcareIpsum, 'ffaker/healthcare_ipsum'
107
- autoload :HealthcareRU, 'ffaker/healthcare_ru'
108
- autoload :HipsterIpsum, 'ffaker/hipster_ipsum'
109
- autoload :HTMLIpsum, 'ffaker/html_ipsum'
110
- autoload :Identification, 'ffaker/identification'
111
- autoload :IdentificationBR, 'ffaker/identification_br'
112
- autoload :IdentificationES, 'ffaker/identification_es'
113
- autoload :IdentificationESCL, 'ffaker/identification_es_cl'
114
- autoload :IdentificationESCO, 'ffaker/identification_es_co'
115
- autoload :IdentificationIN, 'ffaker/identification_in'
116
- autoload :IdentificationIT, 'ffaker/identification_it'
117
- autoload :IdentificationKr, 'ffaker/identification_kr'
118
- autoload :IdentificationMX, 'ffaker/identification_mx'
119
- autoload :IdentificationPL, 'ffaker/identification_pl'
120
- autoload :IdentificationTW, 'ffaker/identification_tw'
121
- autoload :IdentificationEC, 'ffaker/identification_ec'
122
- autoload :Image, 'ffaker/image'
123
- autoload :Internet, 'ffaker/internet'
124
- autoload :InternetSE, 'ffaker/internet_se'
125
- autoload :Job, 'ffaker/job'
126
- autoload :JobBR, 'ffaker/job_br'
127
- autoload :JobCN, 'ffaker/job_cn'
128
- autoload :JobFR, 'ffaker/job_fr'
129
- autoload :JobIT, 'ffaker/job_it'
130
- autoload :JobJA, 'ffaker/job_ja'
131
- autoload :JobKR, 'ffaker/job_kr'
132
- autoload :JobVN, 'ffaker/job_vn'
133
- autoload :JoJo, 'ffaker/jo_jo'
134
- autoload :Locale, 'ffaker/locale'
135
- autoload :Lorem, 'ffaker/lorem'
136
- autoload :LoremAR, 'ffaker/lorem_ar'
137
- autoload :LoremBR, 'ffaker/lorem_br'
138
- autoload :LoremCN, 'ffaker/lorem_cn'
139
- autoload :LoremFR, 'ffaker/lorem_fr'
140
- autoload :LoremIE, 'ffaker/lorem_ie'
141
- autoload :LoremIT, 'ffaker/lorem_it'
142
- autoload :LoremJA, 'ffaker/lorem_ja'
143
- autoload :LoremKR, 'ffaker/lorem_kr'
144
- autoload :LoremPL, 'ffaker/lorem_pl'
145
- autoload :LoremRU, 'ffaker/lorem_ru'
146
- autoload :LoremUA, 'ffaker/lorem_ua'
147
- autoload :Movie, 'ffaker/movie'
148
- autoload :Music, 'ffaker/music'
149
- autoload :Name, 'ffaker/name'
150
- autoload :NameAR, 'ffaker/name_ar'
151
- autoload :NameBR, 'ffaker/name_br'
152
- autoload :NameCN, 'ffaker/name_cn'
153
- autoload :NameCS, 'ffaker/name_cs'
154
- autoload :NameDA, 'ffaker/name_da'
155
- autoload :NameDE, 'ffaker/name_de'
156
- autoload :NameES, 'ffaker/name_es'
157
- autoload :NameFR, 'ffaker/name_fr'
158
- autoload :NameGA, 'ffaker/name_ga'
159
- autoload :NameGR, 'ffaker/name_gr'
160
- autoload :NameID, 'ffaker/name_id'
161
- autoload :NameIN, 'ffaker/name_in'
162
- autoload :NameIT, 'ffaker/name_it'
163
- autoload :NameJA, 'ffaker/name_ja'
164
- autoload :NameKH, 'ffaker/name_kh'
165
- autoload :NameKR, 'ffaker/name_kr'
166
- autoload :NameMX, 'ffaker/name_mx'
167
- autoload :NameNB, 'ffaker/name_nb'
168
- autoload :NameNL, 'ffaker/name_nl'
169
- autoload :NamePH, 'ffaker/name_ph'
170
- autoload :NamePL, 'ffaker/name_pl'
171
- autoload :NameRU, 'ffaker/name_ru'
172
- autoload :NameSE, 'ffaker/name_se'
173
- autoload :NameSN, 'ffaker/name_sn'
174
- autoload :NameTH, 'ffaker/name_th'
175
- autoload :NameTW, 'ffaker/name_tw'
176
- autoload :NameTHEN, 'ffaker/name_th_en'
177
- autoload :NameUA, 'ffaker/name_ua'
178
- autoload :NameVN, 'ffaker/name_vn'
179
- autoload :NatoAlphabet, 'ffaker/nato_alphabet'
180
- autoload :Number, 'ffaker/number'
181
- autoload :PhoneNumber, 'ffaker/phone_number'
182
- autoload :PhoneNumberAU, 'ffaker/phone_number_au'
183
- autoload :PhoneNumberBR, 'ffaker/phone_number_br'
184
- autoload :PhoneNumberCH, 'ffaker/phone_number_ch'
185
- autoload :PhoneNumberCU, 'ffaker/phone_number_cu'
186
- autoload :PhoneNumberDA, 'ffaker/phone_number_da'
187
- autoload :PhoneNumberDE, 'ffaker/phone_number_de'
188
- autoload :PhoneNumberFR, 'ffaker/phone_number_fr'
189
- autoload :PhoneNumberID, 'ffaker/phone_number_id'
190
- autoload :PhoneNumberIT, 'ffaker/phone_number_it'
191
- autoload :PhoneNumberJA, 'ffaker/phone_number_ja'
192
- autoload :PhoneNumberKR, 'ffaker/phone_number_kr'
193
- autoload :PhoneNumberMX, 'ffaker/phone_number_mx'
194
- autoload :PhoneNumberNL, 'ffaker/phone_number_nl'
195
- autoload :PhoneNumberPL, 'ffaker/phone_number_pl'
196
- autoload :PhoneNumberSE, 'ffaker/phone_number_se'
197
- autoload :PhoneNumberSG, 'ffaker/phone_number_sg'
198
- autoload :PhoneNumberSN, 'ffaker/phone_number_sn'
199
- autoload :PhoneNumberTW, 'ffaker/phone_number_tw'
200
- autoload :PhoneNumberUA, 'ffaker/phone_number_ua'
201
- autoload :PhoneNumberRU, 'ffaker/phone_number_ru'
202
- autoload :Product, 'ffaker/product'
203
- autoload :SemVer, 'ffaker/sem_ver'
204
- autoload :Skill, 'ffaker/skill'
205
- autoload :Sport, 'ffaker/sport'
206
- autoload :SportPL, 'ffaker/sport_pl'
207
- autoload :SportUS, 'ffaker/sport_us'
208
- autoload :SportRU, 'ffaker/sport_ru'
209
- autoload :SSN, 'ffaker/ssn'
210
- autoload :SSNMX, 'ffaker/ssn_mx'
211
- autoload :SSNSE, 'ffaker/ssn_se'
212
- autoload :String, 'ffaker/string'
213
- autoload :Time, 'ffaker/time'
214
- autoload :Tweet, 'ffaker/tweet'
215
- autoload :Unit, 'ffaker/unit'
216
- autoload :UnitEnglish, 'ffaker/unit_english'
217
- autoload :UnitMetric, 'ffaker/unit_metric'
218
- autoload :VERSION, 'ffaker/version'
219
- autoload :Vehicle, 'ffaker/vehicle'
220
- autoload :Venue, 'ffaker/venue'
221
- autoload :Youtube, 'ffaker/youtube'
34
+ autoload_acronyms = {
35
+ 'ar' => 'AR',
36
+ 'au' => 'AU',
37
+ 'aws' => 'AWS',
38
+ 'br' => 'BR',
39
+ 'ca' => 'CA',
40
+ 'ch' => 'CH',
41
+ 'cl' => 'CL',
42
+ 'cn' => 'CN',
43
+ 'co' => 'CO',
44
+ 'cs' => 'CS',
45
+ 'cu' => 'CU',
46
+ 'da' => 'DA',
47
+ 'de' => 'DE',
48
+ 'ec' => 'EC',
49
+ 'en' => 'EN',
50
+ 'es' => 'ES',
51
+ 'fi' => 'FI',
52
+ 'fr' => 'FR',
53
+ 'ga' => 'GA',
54
+ 'gr' => 'GR',
55
+ 'html' => 'HTML',
56
+ 'id' => 'ID',
57
+ 'ie' => 'IE',
58
+ 'in' => 'IN',
59
+ 'it' => 'IT',
60
+ 'ja' => 'JA',
61
+ 'jp' => 'JP',
62
+ 'kh' => 'KH',
63
+ 'kr' => 'KR',
64
+ 'mx' => 'MX',
65
+ 'nb' => 'NB',
66
+ 'nl' => 'NL',
67
+ 'ph' => 'PH',
68
+ 'pl' => 'PL',
69
+ 'ru' => 'RU',
70
+ 'se' => 'SE',
71
+ 'sg' => 'SG',
72
+ 'sn' => 'SN',
73
+ 'ssn' => 'SSN',
74
+ 'th' => 'TH',
75
+ 'tw' => 'TW',
76
+ 'ua' => 'UA',
77
+ 'uk' => 'UK',
78
+ 'us' => 'US',
79
+ 'vn' => 'VN'
80
+ }
81
+
82
+ directory = "#{__dir__}/ffaker"
83
+ Dir["#{directory}/*.rb"].each do |file_name|
84
+ relative_file_path = Pathname.new(file_name).relative_path_from(directory).to_s.chomp('.rb')
85
+ ## Don't consider files in sub-directories
86
+ constant_name = relative_file_path.split('_').map do |part|
87
+ autoload_acronyms.fetch(part) { part.capitalize }
88
+ end.join
89
+ autoload constant_name, file_name
90
+ end
222
91
 
223
92
  # Random Number Generator (RNG) used with ModuleUtils#fetch, #shuffle, #rand
224
93
  # in order to provide deterministic repeatability.
data/scripts/reference.rb CHANGED
@@ -11,8 +11,8 @@ ICONS = {
11
11
  warning: '❗'
12
12
  }.freeze
13
13
 
14
- UTILS_MODULES = %i[ArrayUtils ModuleUtils RandomUtils Random]
15
- UTILS_METHODS = %i[k underscore fetch_sample rand shuffle unique luhn_check]
14
+ UTILS_MODULES = %i[ArrayUtils ModuleUtils RandomUtils Random Version].freeze
15
+ UTILS_METHODS = %i[k underscore fetch_sample rand shuffle unique luhn_check].freeze
16
16
 
17
17
  # Get a list of sections
18
18
  def faker_modules
@@ -36,12 +36,14 @@ end
36
36
  # Catch deprecation warnings.
37
37
  # This `#warn` overrides Kernel#warn
38
38
  def warn(msg)
39
- $warnings << msg if $warnings
39
+ return unless Kernel.instance_variable_get(:@ffaker_warnings)
40
+
41
+ Kernel.instance_variable_set(:@ffaker_warnings, Kernel.instance_variable_get(:@ffaker_warnings) << msg)
40
42
  end
41
43
 
42
44
  def catch_warnings
43
- $warnings = []
44
- [yield, $warnings]
45
+ Kernel.instance_variable_set(:@ffaker_warnings, [])
46
+ [yield, Kernel.instance_variable_get(:@ffaker_warnings)]
45
47
  end
46
48
 
47
49
  def escape(str)
@@ -70,11 +72,7 @@ sections = faker_modules.map do |mod|
70
72
  examples, warnings = catch_warnings do
71
73
  Array.new(3) { mod.unique.send meth }
72
74
  end
73
- right = if warnings.any?
74
- "#{ICONS[:warning]} *#{warnings.first}*"
75
- else
76
- (escape examples.join(', ')).to_s
77
- end
75
+ right = warnings.any? ? "#{ICONS[:warning]} *#{warnings.first}*" : (escape examples.join(', ')).to_s
78
76
  rescue StandardError => e
79
77
  right = "#{ICONS[:error]} #{e.class}: #{e.message}"
80
78
  end
data/test/helper.rb CHANGED
@@ -14,7 +14,7 @@ module DeterministicHelper
14
14
  # the internal Random Number Generator state and compared the results of
15
15
  # each execution to make sure they are the same.
16
16
  def assert_deterministic(options = {}, &block)
17
- raise ArgumentError, 'Must pass a block' unless block_given?
17
+ raise ArgumentError, 'Must pass a block' unless block
18
18
 
19
19
  options = { message: 'Results are not repeatable' }.merge(options)
20
20
 
data/test/test_avatar.rb CHANGED
@@ -18,40 +18,63 @@ class TestAvatar < Test::Unit::TestCase
18
18
  @tester.image)
19
19
  end
20
20
 
21
+ def test_image_output_with_keyword_arguments
22
+ output = capture_output do
23
+ @tester.image(format: 'jpg')
24
+ end
25
+
26
+ assert_equal ['', ''], output
27
+ end
28
+
29
+ def test_image_with_slug_as_positional_argument
30
+ assert_equal("#{ROBOHASH}/foobar.png?size=300x300", @tester.image('foobar'))
31
+ end
32
+
33
+ def test_image_output_with_positional_arguments
34
+ output = capture_output do
35
+ @tester.image('foobar')
36
+ end
37
+
38
+ assert_equal(
39
+ ['', "Positional arguments for Avatar#image are deprecated. Please use keyword arguments.\n"],
40
+ output
41
+ )
42
+ end
43
+
21
44
  def test_avatar_with_param
22
- assert_equal("#{ROBOHASH}/faker.png?size=300x300", @tester.image('faker'))
45
+ assert_equal("#{ROBOHASH}/faker.png?size=300x300", @tester.image(slug: 'faker'))
23
46
  end
24
47
 
25
48
  def test_avatar_with_correct_size
26
49
  assert_equal("#{ROBOHASH}/faker.png?size=150x320",
27
- @tester.image('faker', '150x320'))
50
+ @tester.image(slug: 'faker', size: '150x320'))
28
51
  end
29
52
 
30
53
  def test_avatar_with_incorrect_size
31
54
  assert_raise ArgumentError do
32
- @tester.image(nil, '150x320z')
55
+ @tester.image(size: '150x320z')
33
56
  end
34
57
  end
35
58
 
36
59
  def test_avatar_with_supported_format
37
60
  assert_equal("#{ROBOHASH}/faker.jpg?size=300x300",
38
- @tester.image('faker', '300x300', 'jpg'))
61
+ @tester.image(slug: 'faker', size: '300x300', format: 'jpg'))
39
62
  end
40
63
 
41
64
  def test_avatar_with_incorrect_format
42
65
  assert_raise ArgumentError do
43
- @tester.image(nil, '300x300', 'wrong_format')
66
+ @tester.image(size: '300x300', format: 'wrong_format')
44
67
  end
45
68
  end
46
69
 
47
70
  def test_avatar_with_correct_background
48
71
  assert_equal("#{ROBOHASH}/faker.png?size=300x300&bgset=bg1",
49
- @tester.image('faker', '300x300', 'png', '1'))
72
+ @tester.image(slug: 'faker', size: '300x300', format: 'png', bgset: '1'))
50
73
  end
51
74
 
52
75
  def test_avatar_with_incorrect_background
53
76
  assert_raise ArgumentError do
54
- @tester.image('faker', '300x300', 'png', 'not_a_number')
77
+ @tester.image(slug: 'faker', size: '300x300', format: 'png', bgset: 'not_a_number')
55
78
  end
56
79
  end
57
80
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helper'
4
+
5
+ class TestBankUS < Test::Unit::TestCase
6
+ include DeterministicHelper
7
+
8
+ assert_methods_are_deterministic(
9
+ FFaker::BankUS,
10
+ :account_number, :routing_number
11
+ )
12
+
13
+ def setup
14
+ @tester = FFaker::BankUS
15
+ end
16
+
17
+ def test_account_number
18
+ assert_instance_of String, @tester.account_number
19
+ assert_match(/\A\d{8}\z/, @tester.account_number(min_digits: 8, max_digits: 8))
20
+ assert_match(/\A\d{12}\z/, @tester.account_number(min_digits: 12, max_digits: 12))
21
+ end
22
+
23
+ def test_routing_number
24
+ routing_number = @tester.routing_number
25
+ assert_match(/\A\d{9}\z/, routing_number)
26
+
27
+ checksum = (
28
+ (7 * (routing_number[0].to_i + routing_number[3].to_i + routing_number[6].to_i)) +
29
+ (3 * (routing_number[1].to_i + routing_number[4].to_i + routing_number[7].to_i)) +
30
+ (9 * (routing_number[2].to_i + routing_number[5].to_i + routing_number[8].to_i))
31
+ )
32
+
33
+ assert_equal(0, checksum % 10, 'The routing number\'s checksum is not a multiple of ten')
34
+ end
35
+ end
data/test/test_book.rb CHANGED
@@ -39,6 +39,35 @@ class TestBook < Test::Unit::TestCase
39
39
  @tester.cover)
40
40
  end
41
41
 
42
+ def test_cover_with_format
43
+ assert_match(%r{\Ahttps://robohash\.org/.+\.jpg\?size=300x300\z},
44
+ @tester.cover(format: 'jpg'))
45
+ end
46
+
47
+ def test_cover_output_with_keyword_arguments
48
+ output = capture_output do
49
+ @tester.cover(format: 'jpg')
50
+ end
51
+
52
+ assert_equal ['', ''], output
53
+ end
54
+
55
+ def test_cover_with_slug_as_positional_argument
56
+ assert_match(%r{\Ahttps://robohash\.org/foobar\.png\?size=300x300\z},
57
+ @tester.cover('foobar'))
58
+ end
59
+
60
+ def test_cover_output_with_positional_arguments
61
+ output = capture_output do
62
+ @tester.cover('foobar')
63
+ end
64
+
65
+ assert_equal(
66
+ ['', "Positional arguments for Book#cover are deprecated. Please use keyword arguments.\n"],
67
+ output
68
+ )
69
+ end
70
+
42
71
  def test_orly_cover
43
72
  assert_match(%r{\Ahttps://orly-appstore\.herokuapp\.com/generate},
44
73
  @tester.orly_cover)
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helper'
4
+
5
+ class TestCrypto < Test::Unit::TestCase
6
+ include DeterministicHelper
7
+
8
+ assert_methods_are_deterministic(FFaker::Crypto, :sha256)
9
+
10
+ def test_sha256
11
+ assert FFaker::Crypto.sha256.is_a?(String)
12
+ assert FFaker::Crypto.sha256.length == 64
13
+ assert_match(/\A[a-z\d]{64}\z/, FFaker::Crypto.sha256)
14
+ end
15
+ end
data/test/test_date.rb CHANGED
@@ -9,7 +9,7 @@ class TestFakerDate < Test::Unit::TestCase
9
9
  @tester = FFaker::Date
10
10
  end
11
11
 
12
- assert_methods_are_deterministic(FFaker::Date, :backward, :forward)
12
+ assert_methods_are_deterministic(FFaker::Date, :backward, :forward, :birthday)
13
13
 
14
14
  def test_between
15
15
  from = Date.new(2015, 1, 1)
@@ -34,4 +34,14 @@ class TestFakerDate < Test::Unit::TestCase
34
34
  assert_random_between(today + 1..today + 30) { @tester.forward(30) }
35
35
  assert_instance_of Date, @tester.forward
36
36
  end
37
+
38
+ def test_birthday
39
+ today = Date.today
40
+
41
+ assert_random_between(today.prev_year(65).next_day..today.prev_year(18)) { @tester.birthday }
42
+ assert_random_between(today.prev_year(43).next_day..today.prev_year(42)) do
43
+ @tester.birthday(min_age: 42, max_age: 42)
44
+ end
45
+ assert_instance_of Date, @tester.birthday
46
+ end
37
47
  end
@@ -30,7 +30,33 @@ class TestFakerFilesystem < Test::Unit::TestCase
30
30
  end
31
31
 
32
32
  def test_file_name
33
- assert_match %r{\A(?:[a-z_-]+[\\/])+[a-z_-]+\.\w{2,4}\z},
34
- @tester.file_name
33
+ assert_match %r{\A(?:[a-z_-]+[\\/])+[a-z_-]+\.\w{2,4}\z}, @tester.file_name
34
+ end
35
+
36
+ def test_file_name_with_extension
37
+ assert_match %r{\A(?:[a-z_-]+[\\/])+[a-z_-]+\.rb\z}, @tester.file_name(ext: 'rb')
38
+ end
39
+
40
+ def test_file_name_output_with_keyword_arguments
41
+ output = capture_output do
42
+ @tester.file_name(ext: 'rb')
43
+ end
44
+
45
+ assert_equal ['', ''], output
46
+ end
47
+
48
+ def test_file_name_with_directory_as_positional_argument
49
+ assert_match %r{\Asome_directory/[a-z_-]+\.\w{2,4}\z}, @tester.file_name('some_directory')
50
+ end
51
+
52
+ def test_file_name_output_with_positional_arguments
53
+ output = capture_output do
54
+ @tester.file_name('some_directory')
55
+ end
56
+
57
+ assert_equal(
58
+ ['', "Positional arguments for Filesystem#file_name are deprecated. Please use keyword arguments.\n"],
59
+ output
60
+ )
35
61
  end
36
62
  end
@@ -5,7 +5,7 @@ require_relative 'helper'
5
5
  class TestHealthcareRU < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- SPECIALIZATION_REGEX = /\A[А-Яа-я\ ()\-]+\z/
8
+ SPECIALIZATION_REGEX = /\A[А-Яа-я\ ()-]+\z/
9
9
 
10
10
  assert_methods_are_deterministic(FFaker::HealthcareRU, :doctor_specialization)
11
11
 
@@ -15,7 +15,6 @@ class TestFakerIdentification < Test::Unit::TestCase
15
15
  end
16
16
 
17
17
  def test_drivers_license
18
- ###-###-##-###-#
19
18
  drivers_license_regex = /\A[A-Z]\d{3}-\d{3}-\d{2}-\d{3}-\d{1}\z/
20
19
  assert_match(drivers_license_regex, @tester.drivers_license)
21
20
  end
@@ -29,7 +28,18 @@ class TestFakerIdentification < Test::Unit::TestCase
29
28
  end
30
29
 
31
30
  def test_ethnicity
32
- ethnicity_regex = %r{\A(African American|Asian/Pacific Islander|Caucasian|Hispanic|Native American|Multiracial|Other|Prefer not to respond)\z}
31
+ ethnicity_regex = %r{
32
+ \A(
33
+ African\ American|
34
+ Asian/Pacific\ Islander|
35
+ Caucasian|
36
+ Hispanic|
37
+ Native\ American|
38
+ Multiracial|
39
+ Other|
40
+ Prefer\ not\ to\ respond
41
+ )\z
42
+ }x
33
43
  assert_match(ethnicity_regex, @tester.ethnicity)
34
44
  end
35
45
  end
@@ -27,7 +27,7 @@ class TestIdentificationEC < Test::Unit::TestCase
27
27
  end
28
28
  end
29
29
  mod = sum % 10
30
- mod = 10 - mod if mod > 0
30
+ mod = 10 - mod if mod.positive?
31
31
  assert(ci[9].to_i == mod)
32
32
  end
33
33
  end
@@ -22,7 +22,9 @@ class TestIdentificationMX < Test::Unit::TestCase
22
22
 
23
23
  def test_curp
24
24
  or_curp_states_abbr = FFaker::IdentificationMX::ESTADOS_CURP.join('|')
25
- re = /\A[a-z][aeioux][a-z]{2}\d{2}[0-1]\d[0-3]\d[hm](?:#{or_curp_states_abbr})[bcdfghjklmñpqrstvwxyz]{3}[0-9a-z]\d\z/ui
25
+ re = /
26
+ \A[a-z][aeioux][a-z]{2}\d{2}[0-1]\d[0-3]\d[hm](?:#{or_curp_states_abbr})[bcdfghjklmñpqrstvwxyz]{3}[0-9a-z]\d\z
27
+ /uix
26
28
  assert_match(re, FFaker::IdentificationMX.curp)
27
29
  end
28
30
  end
@@ -28,7 +28,18 @@ class TestFakerIdentificationIT < Test::Unit::TestCase
28
28
  end
29
29
 
30
30
  def test_ethnicity
31
- ethnicity_regex = %r{\A(Afroamericano|Asiatico/isolano del Pacifico|Caucasico|Ispanico|Nativo americano|Multirazziale|Altro|Preferisco non rispondere)\z}
31
+ ethnicity_regex = %r{
32
+ \A(
33
+ Afroamericano|
34
+ Asiatico/isolano\ del\ Pacifico|
35
+ Caucasico|
36
+ Ispanico|
37
+ Nativo\ americano|
38
+ Multirazziale|
39
+ Altro|
40
+ Preferisco\ non\ rispondere
41
+ )\z
42
+ }x
32
43
  assert_match(ethnicity_regex, @tester.ethnicity)
33
44
  end
34
45
  end
@@ -2,13 +2,13 @@
2
2
 
3
3
  require_relative 'helper'
4
4
 
5
- class TestFakerIdentificationKr < Test::Unit::TestCase
5
+ class TestFakerIdentificationKR < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- assert_methods_are_deterministic(FFaker::IdentificationKr, :rrn)
8
+ assert_methods_are_deterministic(FFaker::IdentificationKR, :rrn)
9
9
 
10
10
  def setup
11
- @tester = FFaker::IdentificationKr
11
+ @tester = FFaker::IdentificationKR
12
12
  end
13
13
 
14
14
  def test_rrn