faker 2.1.0 → 2.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +93 -3
  3. data/README.md +3 -3
  4. data/lib/faker.rb +56 -1
  5. data/lib/faker/blockchain/tezos.rb +6 -6
  6. data/lib/faker/books/dune.rb +10 -2
  7. data/lib/faker/books/lovecraft.rb +38 -7
  8. data/lib/faker/default/address.rb +25 -5
  9. data/lib/faker/default/alphanumeric.rb +39 -7
  10. data/lib/faker/default/app.rb +9 -1
  11. data/lib/faker/default/avatar.rb +11 -1
  12. data/lib/faker/default/bank.rb +10 -2
  13. data/lib/faker/default/boolean.rb +5 -1
  14. data/lib/faker/default/chile_rut.rb +12 -2
  15. data/lib/faker/default/code.rb +16 -3
  16. data/lib/faker/default/commerce.rb +17 -3
  17. data/lib/faker/default/company.rb +10 -2
  18. data/lib/faker/default/crypto_coin.rb +15 -3
  19. data/lib/faker/default/date.rb +37 -5
  20. data/lib/faker/default/demographic.rb +5 -1
  21. data/lib/faker/default/driving_licence.rb +10 -4
  22. data/lib/faker/default/file.rb +19 -2
  23. data/lib/faker/default/fillmurray.rb +9 -1
  24. data/lib/faker/default/finance.rb +5 -1
  25. data/lib/faker/default/hipster.rb +45 -6
  26. data/lib/faker/default/id_number.rb +48 -3
  27. data/lib/faker/default/internet.rb +89 -13
  28. data/lib/faker/default/invoice.rb +16 -3
  29. data/lib/faker/default/json.rb +19 -2
  30. data/lib/faker/default/lorem.rb +80 -10
  31. data/lib/faker/default/lorem_flickr.rb +38 -5
  32. data/lib/faker/default/lorem_pixel.rb +10 -1
  33. data/lib/faker/default/markdown.rb +6 -1
  34. data/lib/faker/default/measurement.rb +40 -8
  35. data/lib/faker/default/name.rb +5 -1
  36. data/lib/faker/default/nhs.rb +5 -1
  37. data/lib/faker/default/number.rb +56 -11
  38. data/lib/faker/default/omniauth.rb +50 -9
  39. data/lib/faker/default/phone_number.rb +5 -1
  40. data/lib/faker/default/placeholdit.rb +11 -1
  41. data/lib/faker/default/relationship.rb +5 -1
  42. data/lib/faker/default/source.rb +18 -3
  43. data/lib/faker/default/string.rb +5 -1
  44. data/lib/faker/default/stripe.rb +20 -4
  45. data/lib/faker/default/time.rb +37 -4
  46. data/lib/faker/default/twitter.rb +32 -18
  47. data/lib/faker/default/types.rb +27 -5
  48. data/lib/faker/default/vehicle.rb +17 -4
  49. data/lib/faker/default/world_cup.rb +11 -2
  50. data/lib/faker/games/dota.rb +5 -1
  51. data/lib/faker/movies/star_wars.rb +6 -4
  52. data/lib/faker/version.rb +1 -1
  53. data/lib/locales/en.yml +0 -49
  54. data/lib/locales/en/science.yml +1 -1
  55. metadata +18 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c8ec0243e0079d2e81fdf6bfa46e9619a97ce96eb9a0521be7699c36a8408e5a
4
- data.tar.gz: 7e5a20f1d6595b3fcda89a802dbaaa3e97b2027bcd21f1fad6bb164e433b12ea
3
+ metadata.gz: c140b70507d530616f9c4ab8253cde32bab8bd7489eec025ebc3e0d81027e0be
4
+ data.tar.gz: b752dafd7f9a6816b811e7b886b0097389fb12f2bb4ff714babcab5215c1528b
5
5
  SHA512:
6
- metadata.gz: 6de044051ced1eea9bbc6b3a1693e3d9f809195289c0ceb68238459ec9420eccb7cb6eb7761f23f88a3c94e68292cdd42785cc97da9d4e5680e7240afd0dd3a4
7
- data.tar.gz: 0c9e6ad646d0772e3e116b7534940270c1be804c3e231b0aba974cc0f9478750125ac591b18ee4d2f5b851e9df29898c42b69067ec0e9c411b5c96de350d21c2
6
+ metadata.gz: 01f9d799d52e5b502b21ba569a046f078c45d59e8f0c82e09fa5f79b13bcbf0633a2150d2017623c6ad50256536e94273fc30b59c1835fca639ca4772cf85839
7
+ data.tar.gz: 4f0fc396d99449791e7edf1ff9013842617e6ecd4c8d153574a773b81041801750c02fb3974c6e05cdfc4429c26bc54528e00a509fa0b8dfd3d788fc5ff0e335
@@ -1,15 +1,101 @@
1
1
  # Change Log
2
2
 
3
- ## [v2.1.0](https://github.com/stympy/faker/tree/2.1.0) (2019-31-07)
3
+ ## [v2.2.2](https://github.com/faker-ruby/faker/tree/v2.2.2) (2019-05-09)
4
4
 
5
5
  ## Bug/Fixes
6
- - [PR #1675](https://github.com/stympy/faker/pull/1675) Fix off-by-one error when formatting month names [@jutonz](https://github.com/jutonz)
6
+
7
+ - [PR #1717](https://github.com/faker-ruby/faker/pull/1717) Fix ambiguity in element_symbol field [@psibi](https://github.com/psibi)
8
+
9
+ ## Chores
10
+
11
+ - [PR #1724](https://github.com/faker-ruby/faker/pull/1724) Include rubocop-faker autocorrect in deprecation [@koic](https://github.com/koic)
12
+
13
+ ## Documentation
14
+
15
+ - [PR #1726](https://github.com/faker-ruby/faker/pull/1726) Include 2.x breaking return value change in changelog [@zorab47](https://github.com/zorab47)
16
+ - [PR #1722](https://github.com/faker-ruby/faker/pull/1722) Fix examples in the Dota docs [@bzf](https://github.com/bzf)
17
+
18
+ ## Update local dependencies
19
+
20
+ The following development dependencies were updated:
21
+ - rake requirement from = 12.3.1 to = 12.3.3 (#1719)
22
+ - rubocop requirement from = 0.59.1 to = 0.74.0 (#1721)
23
+ - simplecov requirement from = 0.16.1 to = 0.17.0 (#1718)
24
+
25
+ ------------------------------------------------------------------------------
26
+
27
+ ## [v2.2.1](https://github.com/faker-ruby/faker/tree/v2.2.1) (2019-30-08)
28
+
29
+ ## Bug/Fixes
30
+
31
+ - [PR #1712](https://github.com/faker-ruby/faker/pull/1712) Fix number(digits: 1) always returns 0 [@ianlet](https://github.com/ianlet)
32
+
33
+ `Faker::Number.number(digits: 1)` was always returning `0`.
34
+
35
+ Fixing number with one digit caused the test_insignificant_zero to fail. As it seemed that the behavior tested by test_insignificant_zero was already covered by test_number and test_decimal, we removed it to prevent duplication.
36
+
37
+ ## [v2.2.0](https://github.com/faker-ruby/faker/tree/v2.2.0) (2019-25-08)
38
+
39
+ ## Deprecate
40
+
41
+ - [PR #1698](https://github.com/faker-ruby/faker/pull/1698) Add warn for positional arguments when using Faker 2.0 [@koic](https://github.com/koic)
42
+
43
+ Add deprecation warning for positional arguments to notify users that are coming from Faker version < 2.0. Its main goal is to make upgrades easier.
44
+
45
+ ## Documentation
46
+
47
+ - [PR #1688](https://github.com/faker-ruby/faker/pull/1688) Update README install instructions [@EduardoGHdez](https://github.com/EduardoGHdez)
48
+ - [PR #1689](https://github.com/faker-ruby/faker/pull/1689) Update README.md [@Zeragamba](https://github.com/Zeragamba)
49
+ - [PR #1690](https://github.com/faker-ruby/faker/pull/1690) Update issue url in PULL_REQUEST_TEMPLATE [@bugtender](https://github.com/bugtender)
50
+ - [PR #1703](https://github.com/faker-ruby/faker/pull/1703) Return HTTPS URLs from Lorem Flickr [@connorshea](https://github.com/connorshea)
51
+
52
+ ## Feature Request
53
+ - [PR #1686](https://github.com/faker-ruby/faker/pull/1686) Update test-unit gem to 3.3.3 [@connorshea](https://github.com/connorshea)
54
+
55
+ ## Bug/Fixes
56
+ - [PR #1702](https://github.com/faker-ruby/faker/pull/1702) Fix an argument for test_faker_stripe.rb [@koic](https://github.com/koic)
57
+ - [PR #1694](https://github.com/faker-ruby/faker/pull/1694) Ensure mix_case returns at least one lower and one upper case letter [@bpleslie](https://github.com/bpleslie)
58
+
59
+ ------------------------------------------------------------------------------
60
+
61
+ ## [v2.1.2](https://github.com/faker-ruby/faker/tree/v2.1.2) (2019-10-08)
62
+
63
+ ## Enhancements
64
+
65
+ - [PR #1495](https://github.com/faker-ruby/faker/pull/1495) Add Brazilian documents generation and documentation [@lucasqueiroz](https://github.com/lucasqueiroz)
66
+
67
+ ## Issues
68
+
69
+ We had to use `bundled with 1.7.3` to avoid some issues.
70
+
71
+ ## [v2.1.1](https://github.com/faker-ruby/faker/tree/2.1.1) (2019-10-08)
72
+
73
+ ## Bug/Fixes
74
+
75
+ - [PR #1685](https://github.com/stympy/faker/pull/1685) Upgrade i18n [@EduardoGHdez](https://github.com/EduardoGHdez)
76
+
77
+ `bundler-audit` has identified that i18 has fix a security vulnerability, that has been fixed in the 0.8 version.
78
+
79
+ - [PR #1683](https://github.com/stympy/faker/pull/1683) Rollback Faker::Time changes [@vbrazo](https://github.com/vbrazo)
80
+
81
+ Rollback Faker::Time changes because we should expect the date format from activesupport's en.yml.
82
+
83
+ ## Documentation
84
+
85
+ - [PR #1677](https://github.com/faker-ruby/faker/pull/1677) Fix docs for Internet#password generator [@ur5us](https://github.com/ur5us)
86
+
87
+ ------------------------------------------------------------------------------
88
+
89
+ ## [v2.1.0](https://github.com/faker-ruby/faker/tree/v2.1.0) (2019-31-07)
90
+
91
+ ## Bug/Fixes
92
+ - [PR #1675](https://github.com/faker-ruby/faker/pull/1675) Fix off-by-one error when formatting month names [@jutonz](https://github.com/jutonz)
7
93
 
8
94
  This change required a quick release because it's a breaking issue. Every place where I18n.l() was used began to display the wrong date, causing test suite to fail.
9
95
 
10
96
  ------------------------------------------------------------------------------
11
97
 
12
- ## [v2.0](https://github.com/stympy/faker/tree/2.0) (2019-31-07)
98
+ ## [v2.0](https://github.com/faker-ruby/faker/tree/v2.0) (2019-31-07)
13
99
 
14
100
  ## Important Note:
15
101
 
@@ -140,6 +226,10 @@ Version 2 has several `breaking changes`. We replaced positional arguments with
140
226
  - `Faker::WorldCup.roster(country = nil, type = nil)` becomes `Faker::WorldCup.roster(country: nil, type: nil)`
141
227
  - `Faker::Movies::StarWars.quote(character = nil)` becomes `Faker::Movies::StarWars.quote(character: nil)`
142
228
 
229
+ Additionally the following methods changed return values:
230
+
231
+ - `Faker::Number.number` now returns `Numeric` instead of `String` (see [PR #510](https://github.com/faker-ruby/faker/pull/510))
232
+
143
233
  ### Bug/Fixes
144
234
 
145
235
  - [PR #1660](https://github.com/stympy/faker/pull/1660) Update FillMurray Links To Include www [@RaymondFallon](https://github.com/RaymondFallon)
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  ![logotype a happy-07](https://user-images.githubusercontent.com/36028424/40263395-4318481e-5b44-11e8-92e5-3dcc1ce169b3.png)
3
3
 
4
4
  # Faker
5
- [![Build Status](https://travis-ci.org/stympy/faker.svg?branch=master)](https://travis-ci.org/stympy/faker)
5
+ [![Build Status](https://travis-ci.org/faker-ruby/faker.svg?branch=master)](https://travis-ci.org/faker-ruby/faker)
6
6
  [![Gem Version](https://badge.fury.io/rb/faker.svg)](https://badge.fury.io/rb/faker)
7
7
  [![Inline docs](http://inch-ci.org/github/stympy/faker.svg?branch=master)](http://inch-ci.org/github/stympy/faker)
8
8
  [![Test Coverage](https://api.codeclimate.com/v1/badges/ef54c7f9df86e965d64b/test_coverage)](https://codeclimate.com/github/stympy/faker/test_coverage)
@@ -55,7 +55,7 @@ gem install faker
55
55
  Note: if you are getting a `uninitialized constant Faker::[some_class]` error, your version of the gem is behind the one documented here. To make sure that your gem is the one documented here, change the line in your Gemfile to:
56
56
 
57
57
  ```ruby
58
- gem 'faker', :git => 'https://github.com/stympy/faker.git', :branch => 'master'
58
+ gem 'faker', :git => 'https://github.com/faker-ruby/faker.git', :branch => 'master'
59
59
  ```
60
60
 
61
61
  ## Usage
@@ -117,7 +117,7 @@ Faker::Company.bs #=> "cultivate viral synergies"
117
117
  **NOTE: Some of the generators below aren't released yet. If you want to use them, change the line in your gemfile to:**
118
118
 
119
119
  ```ruby
120
- gem 'faker', :git => 'https://github.com/stympy/faker.git', :branch => 'master'
120
+ gem 'faker', :git => 'https://github.com/faker-ruby/faker.git', :branch => 'master'
121
121
  ```
122
122
 
123
123
  ### Default
@@ -40,9 +40,12 @@ module Faker
40
40
  class Base
41
41
  Numbers = Array(0..9)
42
42
  ULetters = Array('A'..'Z')
43
- Letters = ULetters + Array('a'..'z')
43
+ LLetters = Array('a'..'z')
44
+ Letters = ULetters + LLetters
44
45
 
45
46
  class << self
47
+ NOT_GIVEN = Object.new
48
+
46
49
  ## by default numerify results do not start with a zero
47
50
  def numerify(number_string, leading_zero: false)
48
51
  return number_string.gsub(/#/) { rand(10).to_s } if leading_zero
@@ -245,6 +248,58 @@ module Faker
245
248
  ensure
246
249
  I18n.enforce_available_locales = old_enforce_available_locales
247
250
  end
251
+
252
+ private
253
+
254
+ def warn_for_deprecated_arguments
255
+ keywords = []
256
+ yield(keywords)
257
+
258
+ return if keywords.empty?
259
+
260
+ method_name = caller.first.match(/`(?<method_name>.*)'/)[:method_name]
261
+
262
+ keywords.each.with_index(1) do |keyword, index|
263
+ i = case index
264
+ when 1 then '1st'
265
+ when 2 then '2nd'
266
+ when 3 then '3rd'
267
+ else "#{index}th"
268
+ end
269
+
270
+ warn_with_uplevel(<<~MSG, uplevel: 5)
271
+ Passing `#{keyword}` with the #{i} argument of `#{method_name}` is deprecated. Use keyword argument like `#{method_name}(#{keyword}: ...)` instead.
272
+ MSG
273
+ end
274
+
275
+ warn(<<~MSG)
276
+
277
+ To automatically update from positional arguments to keyword arguments,
278
+ install rubocop-faker and run:
279
+
280
+ rubocop \\
281
+ --require rubocop-faker \\
282
+ --only Faker/DeprecatedArguments \\
283
+ --auto-correct
284
+
285
+ MSG
286
+ end
287
+
288
+ # Workaround for emulating `warn '...', uplevel: 1` in Ruby 2.4 or lower.
289
+ def warn_with_uplevel(message, uplevel: 1)
290
+ at = parse_caller(caller[uplevel]).join(':')
291
+ warn "#{at}: #{message}"
292
+ end
293
+
294
+ def parse_caller(at)
295
+ # rubocop:disable Style/GuardClause
296
+ if /^(.+?):(\d+)(?::in `.*')?/ =~ at
297
+ file = Regexp.last_match(1)
298
+ line = Regexp.last_match(2).to_i
299
+ [file, line]
300
+ end
301
+ # rubocop:enable Style/GuardClause
302
+ end
248
303
  end
249
304
  end
250
305
  end
@@ -8,13 +8,13 @@ module Faker
8
8
  class Tezos < Base
9
9
  class << self
10
10
  PREFIXES = {
11
- tz1: [6, 161, 159],
12
- KT1: [2, 90, 121],
13
- edpk: [13, 15, 37, 217],
14
- edsk: [13, 15, 58, 7],
11
+ tz1: [6, 161, 159],
12
+ KT1: [2, 90, 121],
13
+ edpk: [13, 15, 37, 217],
14
+ edsk: [13, 15, 58, 7],
15
15
  edsig: [9, 245, 205, 134, 18],
16
- B: [1, 52],
17
- o: [5, 116]
16
+ B: [1, 52],
17
+ o: [5, 116]
18
18
  }.freeze
19
19
 
20
20
  def account
@@ -19,7 +19,11 @@ module Faker
19
19
  fetch('dune.planets')
20
20
  end
21
21
 
22
- def quote(character: nil)
22
+ def quote(legacy_character = NOT_GIVEN, character: nil)
23
+ warn_for_deprecated_arguments do |keywords|
24
+ keywords << :character if legacy_character != NOT_GIVEN
25
+ end
26
+
23
27
  quoted_characters = translate('faker.dune.quotes').keys
24
28
 
25
29
  if character.nil?
@@ -36,7 +40,11 @@ module Faker
36
40
  fetch('dune.quotes.' + character)
37
41
  end
38
42
 
39
- def saying(source: nil)
43
+ def saying(legacy_source = NOT_GIVEN, source: nil)
44
+ warn_for_deprecated_arguments do |keywords|
45
+ keywords << :source if legacy_source != NOT_GIVEN
46
+ end
47
+
40
48
  sourced_sayings = translate('faker.dune.sayings').keys
41
49
 
42
50
  if source.nil?
@@ -8,7 +8,11 @@ module Faker
8
8
  fetch('lovecraft.location')
9
9
  end
10
10
 
11
- def fhtagn(number: 1)
11
+ def fhtagn(legacy_number = NOT_GIVEN, number: 1)
12
+ warn_for_deprecated_arguments do |keywords|
13
+ keywords << :number if legacy_number != NOT_GIVEN
14
+ end
15
+
12
16
  Array.new(number) { fetch('lovecraft.fhtagn') }.join('. ')
13
17
  end
14
18
 
@@ -20,7 +24,12 @@ module Faker
20
24
  fetch('lovecraft.tome')
21
25
  end
22
26
 
23
- def sentence(word_count: 4, random_words_to_add: 6)
27
+ def sentence(legacy_word_count = NOT_GIVEN, legacy_random_words_to_add = NOT_GIVEN, word_count: 4, random_words_to_add: 6)
28
+ warn_for_deprecated_arguments do |keywords|
29
+ keywords << :word_count if legacy_word_count != NOT_GIVEN
30
+ keywords << :random_words_to_add if legacy_random_words_to_add != NOT_GIVEN
31
+ end
32
+
24
33
  words(number: word_count + rand(random_words_to_add.to_i).to_i, spaces_allowed: true).join(' ').capitalize + '.'
25
34
  end
26
35
 
@@ -29,7 +38,12 @@ module Faker
29
38
  random_word =~ /\s/ ? word : random_word
30
39
  end
31
40
 
32
- def words(number: 3, spaces_allowed: false)
41
+ def words(legacy_number = NOT_GIVEN, legacy_spaces_allowed = NOT_GIVEN, number: 3, spaces_allowed: false)
42
+ warn_for_deprecated_arguments do |keywords|
43
+ keywords << :number if legacy_number != NOT_GIVEN
44
+ keywords << :spaces_allowed if legacy_spaces_allowed != NOT_GIVEN
45
+ end
46
+
33
47
  resolved_num = resolve(number)
34
48
  word_list = translate('faker.lovecraft.words')
35
49
  word_list *= ((resolved_num / word_list.length) + 1)
@@ -40,7 +54,11 @@ module Faker
40
54
  words.each_with_index { |w, i| words[i] = word if w =~ /\s/ }
41
55
  end
42
56
 
43
- def sentences(number: 3)
57
+ def sentences(legacy_number = NOT_GIVEN, number: 3)
58
+ warn_for_deprecated_arguments do |keywords|
59
+ keywords << :number if legacy_number != NOT_GIVEN
60
+ end
61
+
44
62
  [].tap do |sentences|
45
63
  1.upto(resolve(number)) do
46
64
  sentences << sentence(word_count: 3)
@@ -48,11 +66,20 @@ module Faker
48
66
  end
49
67
  end
50
68
 
51
- def paragraph(sentence_count: 3, random_sentences_to_add: 3)
69
+ def paragraph(legacy_sentence_count = NOT_GIVEN, legacy_random_sentences_to_add = NOT_GIVEN, sentence_count: 3, random_sentences_to_add: 3)
70
+ warn_for_deprecated_arguments do |keywords|
71
+ keywords << :sentence_count if legacy_sentence_count != NOT_GIVEN
72
+ keywords << :random_sentences_to_add if legacy_random_sentences_to_add != NOT_GIVEN
73
+ end
74
+
52
75
  sentences(number: resolve(sentence_count) + rand(random_sentences_to_add.to_i).to_i).join(' ')
53
76
  end
54
77
 
55
- def paragraphs(number: 3)
78
+ def paragraphs(legacy_number = NOT_GIVEN, number: 3)
79
+ warn_for_deprecated_arguments do |keywords|
80
+ keywords << :number if legacy_number != NOT_GIVEN
81
+ end
82
+
56
83
  [].tap do |paragraphs|
57
84
  1.upto(resolve(number)) do
58
85
  paragraphs << paragraph(sentence_count: 3)
@@ -60,7 +87,11 @@ module Faker
60
87
  end
61
88
  end
62
89
 
63
- def paragraph_by_chars(characters: 256)
90
+ def paragraph_by_chars(legacy_characters = NOT_GIVEN, characters: 256)
91
+ warn_for_deprecated_arguments do |keywords|
92
+ keywords << :characters if legacy_characters != NOT_GIVEN
93
+ end
94
+
64
95
  paragraph = paragraph(sentence_count: 3)
65
96
 
66
97
  paragraph += ' ' + paragraph(sentence_count: 3) while paragraph.length < characters
@@ -5,7 +5,11 @@ module Faker
5
5
  flexible :address
6
6
 
7
7
  class << self
8
- def city(options: {})
8
+ def city(legacy_options = NOT_GIVEN, options: {})
9
+ warn_for_deprecated_arguments do |keywords|
10
+ keywords << :options if legacy_options != NOT_GIVEN
11
+ end
12
+
9
13
  parse(options[:with_state] ? 'address.city_with_state' : 'address.city')
10
14
  end
11
15
 
@@ -13,7 +17,11 @@ module Faker
13
17
  parse('address.street_name')
14
18
  end
15
19
 
16
- def street_address(include_secondary: false)
20
+ def street_address(legacy_include_secondary = NOT_GIVEN, include_secondary: false)
21
+ warn_for_deprecated_arguments do |keywords|
22
+ keywords << :include_secondary if legacy_include_secondary != NOT_GIVEN
23
+ end
24
+
17
25
  numerify(parse('address.street_address') + (include_secondary ? ' ' + secondary_address : ''))
18
26
  end
19
27
 
@@ -29,7 +37,11 @@ module Faker
29
37
  parse('address.community')
30
38
  end
31
39
 
32
- def zip_code(state_abbreviation: '')
40
+ def zip_code(legacy_state_abbreviation = NOT_GIVEN, state_abbreviation: '')
41
+ warn_for_deprecated_arguments do |keywords|
42
+ keywords << :state_abbreviation if legacy_state_abbreviation != NOT_GIVEN
43
+ end
44
+
33
45
  if state_abbreviation.empty?
34
46
  letterified_string = letterify(fetch('address.postcode'))
35
47
  return numerify(letterified_string, leading_zero: true)
@@ -71,11 +83,19 @@ module Faker
71
83
  fetch('address.country')
72
84
  end
73
85
 
74
- def country_by_code(code: 'US')
86
+ def country_by_code(legacy_code = NOT_GIVEN, code: 'US')
87
+ warn_for_deprecated_arguments do |keywords|
88
+ keywords << :code if legacy_code != NOT_GIVEN
89
+ end
90
+
75
91
  fetch('address.country_by_code.' + code)
76
92
  end
77
93
 
78
- def country_name_to_code(name: 'united_states')
94
+ def country_name_to_code(legacy_name = NOT_GIVEN, name: 'united_states')
95
+ warn_for_deprecated_arguments do |keywords|
96
+ keywords << :name if legacy_name != NOT_GIVEN
97
+ end
98
+
79
99
  fetch('address.country_by_name.' + name)
80
100
  end
81
101
 
@@ -2,22 +2,54 @@
2
2
 
3
3
  module Faker
4
4
  class Alphanumeric < Base
5
- class << self
6
- ALPHABET = ('a'..'z').to_a
7
- ALPHANUMS = ALPHABET + (0..9).to_a
5
+ ALPHANUMS = LLetters + Numbers
8
6
 
9
- def alpha(number: 32)
7
+ class << self
8
+ def alpha(legacy_number = NOT_GIVEN, number: 32)
9
+ warn_for_deprecated_arguments do |keywords|
10
+ keywords << :number if legacy_number != NOT_GIVEN
11
+ end
10
12
  char_count = resolve(number)
11
13
  return '' if char_count.to_i < 1
12
14
 
13
- Array.new(char_count) { sample(ALPHABET) }.join
15
+ Array.new(char_count) { sample(self::LLetters) }.join
14
16
  end
15
17
 
16
- def alphanumeric(number: 32)
18
+ ##
19
+ # Produces a random string of alphanumeric characters
20
+ #
21
+ # @param [Integer] number
22
+ # @param [Integer] min_alpha
23
+ # @param [Integer] min_numeric
24
+ #
25
+ # @return [String]
26
+ #
27
+ # @example Faker::Alphanumeric.alphanumeric(number: 10) #=> "3yfq2phxtb"
28
+ # @example Faker::Alphanumeric.alphanumeric(number: 10, min_alpha: 3) #=> "3yfq2phxtb"
29
+ # @example Faker::Alphanumeric.alphanumeric(number: 10, min_alpha: 3, min_numeric: 3) #=> "3yfq2phx8b"
30
+ #
31
+ # @faker.version 2.1.3
32
+ def alphanumeric(legacy_number = NOT_GIVEN, number: 32, min_alpha: 0, min_numeric: 0)
33
+ warn_for_deprecated_arguments do |keywords|
34
+ keywords << :number if legacy_number != NOT_GIVEN
35
+ end
17
36
  char_count = resolve(number)
18
37
  return '' if char_count.to_i < 1
38
+ raise ArgumentError, 'min_alpha must be greater than or equal to 0' if min_alpha&.negative?
39
+ raise ArgumentError, 'min_numeric must be greater than or equal to 0' if min_numeric&.negative?
40
+
41
+ return Array.new(char_count) { sample(ALPHANUMS) }.join if min_alpha.zero? && min_numeric.zero?
42
+
43
+ raise ArgumentError, 'min_alpha + min_numeric must be <= number' if min_alpha + min_numeric > char_count
44
+
45
+ random_count = char_count - min_alpha - min_numeric
46
+
47
+ alphas = Array.new(min_alpha) { sample(self::LLetters) }
48
+ numbers = Array.new(min_numeric) { sample(self::Numbers) }
49
+ randoms = Array.new(random_count) { sample(ALPHANUMS) }
19
50
 
20
- Array.new(char_count) { sample(ALPHANUMS) }.join
51
+ combined = alphas + numbers + randoms
52
+ combined.shuffle.join
21
53
  end
22
54
  end
23
55
  end