faker 2.12.0 → 2.13.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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +71 -0
  3. data/README.md +3 -0
  4. data/lib/faker.rb +2 -1
  5. data/lib/faker/default/address.rb +30 -0
  6. data/lib/faker/default/bank.rb +1 -1
  7. data/lib/faker/default/blood.rb +3 -3
  8. data/lib/faker/default/chile_rut.rb +44 -1
  9. data/lib/faker/default/company.rb +1 -3
  10. data/lib/faker/default/computer.rb +4 -4
  11. data/lib/faker/default/date.rb +16 -12
  12. data/lib/faker/default/gender.rb +1 -1
  13. data/lib/faker/default/id_number.rb +86 -0
  14. data/lib/faker/default/internet.rb +35 -7
  15. data/lib/faker/default/internet_http.rb +48 -0
  16. data/lib/faker/default/lorem_flickr.rb +65 -0
  17. data/lib/faker/default/lorem_pixel.rb +22 -0
  18. data/lib/faker/default/markdown.rb +89 -0
  19. data/lib/faker/default/name.rb +15 -0
  20. data/lib/faker/default/nhs.rb +19 -0
  21. data/lib/faker/default/number.rb +5 -7
  22. data/lib/faker/default/omniauth.rb +58 -5
  23. data/lib/faker/default/world_cup.rb +4 -4
  24. data/lib/faker/games/control.rb +8 -8
  25. data/lib/faker/games/dnd.rb +4 -4
  26. data/lib/faker/games/heroes_of_the_storm.rb +16 -5
  27. data/lib/faker/games/minecraft.rb +48 -0
  28. data/lib/faker/games/warhammer_fantasy.rb +5 -5
  29. data/lib/faker/movies/departed.rb +3 -3
  30. data/lib/faker/movies/movie.rb +13 -0
  31. data/lib/faker/music/pearl_jam.rb +3 -3
  32. data/lib/faker/music/phish.rb +2 -2
  33. data/lib/faker/music/prince.rb +64 -0
  34. data/lib/faker/music/rush.rb +37 -0
  35. data/lib/faker/music/show.rb +3 -3
  36. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +13 -0
  37. data/lib/faker/tv_shows/big_bang_theory.rb +37 -0
  38. data/lib/faker/tv_shows/dr_who.rb +1 -1
  39. data/lib/faker/tv_shows/futurama.rb +65 -0
  40. data/lib/faker/tv_shows/simpsons.rb +14 -0
  41. data/lib/faker/tv_shows/suits.rb +2 -2
  42. data/lib/faker/version.rb +1 -1
  43. data/lib/helpers/base58.rb +1 -1
  44. data/lib/helpers/char.rb +20 -26
  45. data/lib/locales/en/aqua_teen_hunger_force.yml +33 -1
  46. data/lib/locales/en/bank.yml +1 -1
  47. data/lib/locales/en/big_bang_theory.yml +38 -0
  48. data/lib/locales/en/futurama.yml +344 -0
  49. data/lib/locales/en/heroes_of_the_storm.yml +1 -1
  50. data/lib/locales/en/minecraft.yml +390 -0
  51. data/lib/locales/en/movie.yml +192 -1
  52. data/lib/locales/en/name.yml +3 -2
  53. data/lib/locales/en/prince.yml +227 -0
  54. data/lib/locales/en/rush.yml +32 -0
  55. data/lib/locales/en/simpsons.yml +668 -0
  56. data/lib/locales/en/star_wars.yml +1 -0
  57. metadata +21 -10
@@ -9,11 +9,14 @@ module Faker
9
9
  keywords << :separators if legacy_separators != NOT_GIVEN
10
10
  end
11
11
 
12
- if separators
13
- [username(specifier: name, separators: separators), domain_name(domain: domain)].join('@')
14
- else
15
- [username(specifier: name), domain_name(domain: domain)].join('@')
16
- end
12
+ local_part = if separators
13
+ username(specifier: name, separators: separators)
14
+ else
15
+ username(specifier: name)
16
+ end
17
+
18
+ sanitized_local_part = sanitize_email_local_part(local_part)
19
+ construct_email(sanitized_local_part, domain_name(domain: domain))
17
20
  end
18
21
 
19
22
  def free_email(legacy_name = NOT_GIVEN, name: nil)
@@ -21,7 +24,10 @@ module Faker
21
24
  keywords << :name if legacy_name != NOT_GIVEN
22
25
  end
23
26
 
24
- [username(specifier: name), fetch('internet.free_email')].join('@')
27
+ construct_email(
28
+ sanitize_email_local_part(username(specifier: name)),
29
+ fetch('internet.free_email')
30
+ )
25
31
  end
26
32
 
27
33
  def safe_email(legacy_name = NOT_GIVEN, name: nil)
@@ -29,7 +35,10 @@ module Faker
29
35
  keywords << :name if legacy_name != NOT_GIVEN
30
36
  end
31
37
 
32
- [username(specifier: name), 'example.' + sample(%w[org com net])].join('@')
38
+ construct_email(
39
+ sanitize_email_local_part(username(specifier: name)),
40
+ 'example.' + sample(%w[org com net])
41
+ )
33
42
  end
34
43
 
35
44
  def username(legacy_specifier = NOT_GIVEN, legacy_separators = NOT_GIVEN, specifier: nil, separators: %w[. _])
@@ -325,6 +334,25 @@ module Faker
325
334
  end
326
335
 
327
336
  alias user_name username
337
+
338
+ private
339
+
340
+ def sanitize_email_local_part(local_part)
341
+ char_range = [
342
+ Array('0'..'9'),
343
+ Array('A'..'Z'),
344
+ Array('a'..'z'),
345
+ "!#$%&'*+-/=?^_`{|}~.".split(//)
346
+ ].flatten
347
+
348
+ local_part.split(//).map do |char|
349
+ char_range.include?(char) ? char : '#'
350
+ end.join
351
+ end
352
+
353
+ def construct_email(local_part, domain_name)
354
+ [local_part, domain_name].join('@')
355
+ end
328
356
  end
329
357
  end
330
358
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Internet
5
+ class HTTP < Base
6
+ STATUS_CODES = {
7
+ information: [100, 101, 102, 103],
8
+ successful: [200, 201, 202, 203, 204, 205, 206, 207, 208, 226],
9
+ redirect: [300, 301, 302, 303, 304, 305, 306, 307, 308],
10
+ client_error: [400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412,
11
+ 413, 414, 415, 416, 417, 418, 421, 422, 423, 424, 425, 426, 428,
12
+ 429, 431, 451],
13
+ server_error: [500, 501, 502, 503, 504, 505, 506, 507, 508, 510, 511]
14
+ }.freeze
15
+
16
+ STATUS_CODES_GROUPS = STATUS_CODES.keys.freeze
17
+
18
+ class << self
19
+ ##
20
+ # Produces an HTTP status code
21
+ #
22
+ # @return [Integer]
23
+ #
24
+ # @example
25
+ # Faker::Internet::HTTP.status_code #=> 418
26
+ # @example
27
+ # Faker::Internet::HTTP.status_code(group: :information) #=> 102
28
+ # @example
29
+ # Faker::Internet::HTTP.status_code(group: :successful) #=> 200
30
+ # @example
31
+ # Faker::Internet::HTTP.status_code(group: :redirect) #=> 306
32
+ # @example
33
+ # Faker::Internet::HTTP.status_code(group: :client_error) #=> 451
34
+ # @example
35
+ # Faker::Internet::HTTP.status_code(group: :server_error) #=> 502
36
+ #
37
+ # @faker.version 2.13.0
38
+ def status_code(group: nil)
39
+ return STATUS_CODES[STATUS_CODES_GROUPS.sample].sample unless group
40
+
41
+ raise ArgumentError, 'Invalid HTTP status code group' unless STATUS_CODES_GROUPS.include?(group)
42
+
43
+ STATUS_CODES[group].sample
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -5,6 +5,22 @@ module Faker
5
5
  class << self
6
6
  SUPPORTED_COLORIZATIONS = %w[red green blue].freeze
7
7
 
8
+ ##
9
+ # Produces a random image URL from loremflickr.com.
10
+ #
11
+ # @param size [String] Specifies the size of image to generate.
12
+ # @param search_terms [Array<String>] Adds search terms to the image URL.
13
+ # @param match_all [Boolean] Add "all" as part of the URL.
14
+ # @return [String]
15
+ #
16
+ # @example
17
+ # Faker::LoremFlickr.image #=> "https://loremflickr.com/300/300"
18
+ # Faker::LoremFlickr.image(size: "50x60") #=> "https://loremflickr.com/50/60"
19
+ # Faker::LoremFlickr.image(size: "50x60", search_terms: ['sports']) #=> "https://loremflickr.com/50/60/sports"
20
+ # Faker::LoremFlickr.image(size: "50x60", search_terms: ['sports', 'fitness']) #=> "https://loremflickr.com/50/60/sports,fitness"
21
+ # Faker::LoremFlickr.image(size: "50x60", search_terms: ['sports', 'fitness'], match_all: true) #=> "https://loremflickr.com/50/60/sports,fitness/all"
22
+ #
23
+ # @faker.version 1.9.0
8
24
  # rubocop:disable Metrics/ParameterLists
9
25
  def image(legacy_size = NOT_GIVEN, legacy_search_terms = NOT_GIVEN, legacy_match_all = NOT_GIVEN, size: '300x300', search_terms: [], match_all: false)
10
26
  # rubocop:enable Metrics/ParameterLists
@@ -17,6 +33,22 @@ module Faker
17
33
  build_url(size, nil, search_terms, match_all)
18
34
  end
19
35
 
36
+ ##
37
+ # Produces a random grayscale image URL from loremflickr.com.
38
+ #
39
+ # @param size [String] Specifies the size of image to generate.
40
+ # @param search_terms [Array<String>] Adds search terms to the image URL.
41
+ # @param match_all [Boolean] Add "all" as part of the URL.
42
+ # @return [String]
43
+ #
44
+ # @example
45
+ # Faker::LoremFlickr.grayscale_image #=> "https://loremflickr.com/g/300/300/all"
46
+ # Faker::LoremFlickr.grayscale_image(size: "50x60") #=> "https://loremflickr.com/g/50/60/all"
47
+ # Faker::LoremFlickr.grayscale_image(size: "50x60", search_terms: ['sports']) #=> "https://loremflickr.com/g/50/60/sports"
48
+ # Faker::LoremFlickr.grayscale_image(size: "50x60", search_terms: ['sports', 'fitness']) #=> "https://loremflickr.com/50/60/g/sports,fitness"
49
+ # Faker::LoremFlickr.grayscale_image(size: "50x60", search_terms: ['sports', 'fitness'], match_all: true) #=> "https://loremflickr.com/g/50/60/sports,fitness/all"
50
+ #
51
+ # @faker.version 1.9.0
20
52
  # rubocop:disable Metrics/ParameterLists
21
53
  def grayscale_image(legacy_size = NOT_GIVEN, legacy_search_terms = NOT_GIVEN, legacy_match_all = NOT_GIVEN, size: '300x300', search_terms: ['all'], match_all: false)
22
54
  # rubocop:enable Metrics/ParameterLists
@@ -31,6 +63,22 @@ module Faker
31
63
  build_url(size, 'g', search_terms, match_all)
32
64
  end
33
65
 
66
+ ##
67
+ # Produces a random pixelated image URL from loremflickr.com.
68
+ #
69
+ # @param size [String] Specifies the size of image to generate.
70
+ # @param search_terms [Array<String>] Adds search terms to the image URL.
71
+ # @param match_all [Boolean] Add "all" as part of the URL.
72
+ # @return [String]
73
+ #
74
+ # @example
75
+ # Faker::LoremFlickr.pixelated_image #=> "https://loremflickr.com/p/300/300/all"
76
+ # Faker::LoremFlickr.pixelated_image(size: "50x60") #=> "https://loremflickr.com/p/50/60/all"
77
+ # Faker::LoremFlickr.pixelated_image(size: "50x60", search_terms: ['sports']) #=> "https://loremflickr.com/p/50/60/sports"
78
+ # Faker::LoremFlickr.pixelated_image(size: "50x60", search_terms: ['sports', 'fitness']) #=> "https://loremflickr.com/p/50/60/sports,fitness"
79
+ # Faker::LoremFlickr.pixelated_image(size: "50x60", search_terms: ['sports', 'fitness'], match_all: true) #=> "https://loremflickr.com/p/50/60/sports,fitness/all"
80
+ #
81
+ # @faker.version 1.9.0
34
82
  # rubocop:disable Metrics/ParameterLists
35
83
  def pixelated_image(legacy_size = NOT_GIVEN, legacy_search_terms = NOT_GIVEN, legacy_match_all = NOT_GIVEN, size: '300x300', search_terms: ['all'], match_all: false)
36
84
  # rubocop:enable Metrics/ParameterLists
@@ -45,6 +93,23 @@ module Faker
45
93
  build_url(size, 'p', search_terms, match_all)
46
94
  end
47
95
 
96
+ ##
97
+ # Produces a random colorized image URL from loremflickr.com.
98
+ #
99
+ # @param size [String] Specifies the size of image to generate.
100
+ # @param color [String] Specifies the color of image to generate.
101
+ # @param search_terms [Array<String>] Adds search terms to the image URL.
102
+ # @param match_all [Boolean] Add "all" as part of the URL.
103
+ # @return [String]
104
+ #
105
+ # @example
106
+ # Faker::LoremFlickr.image #=> "https://loremflickr.com/red/300/300/all"
107
+ # Faker::LoremFlickr.image(size: "50x60", color: 'blue') #=> "https://loremflickr.com/blue/50/60/all"
108
+ # Faker::LoremFlickr.image(size: "50x60", color: 'blue', search_terms: ['sports']) #=> "https://loremflickr.com/blue/50/60/sports"
109
+ # Faker::LoremFlickr.image(size: "50x60", color: 'blue', search_terms: ['sports', 'fitness']) #=> "https://loremflickr.com/blue/50/60/sports,fitness"
110
+ # Faker::LoremFlickr.image(size: "50x60", color: 'blue', search_terms: ['sports', 'fitness'], match_all: true) #=> "https://loremflickr.com/blue/50/60/sports,fitness/all"
111
+ #
112
+ # @faker.version 1.9.0
48
113
  # rubocop:disable Metrics/ParameterLists
49
114
  def colorized_image(legacy_size = NOT_GIVEN, legacy_color = NOT_GIVEN, legacy_search_terms = NOT_GIVEN, legacy_match_all = NOT_GIVEN, size: '300x300', color: 'red', search_terms: ['all'], match_all: false)
50
115
  # rubocop:enable Metrics/ParameterLists
@@ -17,6 +17,28 @@ module Faker
17
17
  technics
18
18
  transport].freeze
19
19
 
20
+ ##
21
+ # Produces a random image URL from lorempixel.com.
22
+ #
23
+ # @param size [String] Specifies the size of image to generate.
24
+ # @param is_gray [Boolean] Determines if the image is gray.
25
+ # @param category [Symbol] Adds the category of the generated image to the URL.
26
+ # @param number [Integer] Adds a number as part of the URL.
27
+ # @param text [Integer] Adds dummy text as part of the URL.
28
+ # @param secure [Boolean] Changes the image URL between http and https.
29
+ # @return [String]
30
+ #
31
+ # @example
32
+ # Faker::LoremPixel.image #=> "https://lorempixel.com/300/300"
33
+ # Faker::LoremPixel.image(size: "50x60") #=> "https://lorempixel.com/50/60"
34
+ # Faker::LoremPixel.image(size: "50x60", is_gray: true) #=> "https://lorempixel.com/g/50/60"
35
+ # Faker::LoremPixel.image(size: "50x60", is_gray: false, category: 'sports') #=> "https://lorempixel.com/50/60/sports"
36
+ # Faker::LoremPixel.image(size: "50x60", is_gray: false, category: 'sports', number: 3) #=> "https://lorempixel.com/50/60/sports/3"
37
+ # Faker::LoremPixel.image(size: "50x60", is_gray: false, category: 'sports', number: 3, text: 'Dummy-text') #=> "https://lorempixel.com/50/60/sports/3/Dummy-text"
38
+ # Faker::LoremPixel.image(size: "50x60", is_gray: false, category: 'sports', number: nil, text: 'Dummy-text') #=> "https://lorempixel.com/50/60/sports/Dummy-text"
39
+ # Faker::LoremPixel.image(secure: false) #=> "http://lorempixel.com/300/300"
40
+ #
41
+ # @faker.version 1.7.0
20
42
  # rubocop:disable Metrics/ParameterLists
21
43
  def image(legacy_size = NOT_GIVEN, legacy_is_gray = NOT_GIVEN, legacy_category = NOT_GIVEN, legacy_number = NOT_GIVEN, legacy_text = NOT_GIVEN, legacy_secure = NOT_GIVEN, size: '300x300', is_gray: false, category: nil, number: nil, text: nil, secure: true)
22
44
  warn_for_deprecated_arguments do |keywords|
@@ -3,10 +3,28 @@
3
3
  module Faker
4
4
  class Markdown < Base
5
5
  class << self
6
+ ##
7
+ # Produces a random header format.
8
+ #
9
+ # @return [String]
10
+ #
11
+ # @example
12
+ # Faker::Markdown.headers #=> "##### Autem"
13
+ #
14
+ # @faker.version 1.8.0
6
15
  def headers
7
16
  "#{fetch('markdown.headers')} #{Lorem.word.capitalize}"
8
17
  end
9
18
 
19
+ ##
20
+ # Produces a random emphasis formatting on a random word in two sentences.
21
+ #
22
+ # @return [String]
23
+ #
24
+ # @example
25
+ # Faker::Markdown.emphasis #=> "_Incidunt atque quis repellat id impedit. Quas numquam quod incidunt dicta non. Blanditiis delectus laudantium atque reiciendis qui._"
26
+ #
27
+ # @faker.version 1.8.0
10
28
  def emphasis
11
29
  paragraph = Faker::Lorem.paragraph(sentence_count: 3)
12
30
  words = paragraph.split(' ')
@@ -16,6 +34,15 @@ module Faker
16
34
  words.join(' ')
17
35
  end
18
36
 
37
+ ##
38
+ # Produces a random ordered list of items between 1 and 10 randomly.
39
+ #
40
+ # @return [String]
41
+ #
42
+ # @example
43
+ # Faker::Markdown.ordered_list #=> "1. Qui reiciendis non consequatur atque.\n2. Quo doloremque veritatis tempora aut.\n3. Aspernatur.\n4. Ea ab.\n5. Qui.\n6. Sit pariatur nemo eveniet.\n7. Molestiae aut.\n8. Nihil molestias iure placeat.\n9. Dolore autem quisquam."
44
+ #
45
+ # @faker.version 1.8.0
19
46
  def ordered_list
20
47
  number = rand(1..10)
21
48
 
@@ -26,6 +53,15 @@ module Faker
26
53
  result.join('')
27
54
  end
28
55
 
56
+ ##
57
+ # Produces a random unordered list of items between 1 and 10 randomly.
58
+ #
59
+ # @return [String]
60
+ #
61
+ # @example
62
+ # Faker::Markdown.unordered_list #=> "* Voluptatum aliquid tempora molestiae facilis non sed.\n* Nostrum omnis iste impedit voluptatum dolor.\n* Esse quidem et facere."
63
+ #
64
+ # @faker.version 1.8.0
29
65
  def unordered_list
30
66
  number = rand(1..10)
31
67
 
@@ -36,14 +72,41 @@ module Faker
36
72
  result.join('')
37
73
  end
38
74
 
75
+ ##
76
+ # Produces a random inline code snippet between two sentences.
77
+ #
78
+ # @return [String]
79
+ #
80
+ # @example
81
+ # Faker::Markdown.inline_code #=> "Aut eos quis suscipit. `Dignissimos voluptatem expedita qui.` Quo doloremque veritatis tempora aut."
82
+ #
83
+ # @faker.version 1.8.0
39
84
  def inline_code
40
85
  "`#{Faker::Lorem.sentence(word_count: 1)}`"
41
86
  end
42
87
 
88
+ ##
89
+ # Produces a random code block formatted in Ruby.
90
+ #
91
+ # @return [String]
92
+ #
93
+ # @example
94
+ # Faker::Markdown.block_code #=> "```ruby\nEos quasi qui.\n```"
95
+ #
96
+ # @faker.version 1.8.0
43
97
  def block_code
44
98
  "```ruby\n#{Lorem.sentence(word_count: 1)}\n```"
45
99
  end
46
100
 
101
+ ##
102
+ # Produces a random 3x4 table with a row of headings, a row of hyphens and two rows of data
103
+ #
104
+ # @return [String]
105
+ #
106
+ # @example
107
+ # Faker::Markdown.table #=> "ad | similique | voluptatem\n---- | ---- | ----\ncorrupti | est | rerum\nmolestiae | quidem | et"
108
+ #
109
+ # @faker.version 1.8.0
47
110
  def table
48
111
  table = []
49
112
  3.times do
@@ -53,12 +116,38 @@ module Faker
53
116
  table.join("\n")
54
117
  end
55
118
 
119
+ ##
120
+ # Produces a random method from the methods above or the methods listed in the arguments.
121
+ #
122
+ # @param methods [Symbol] Specify which methods to use.
123
+ # @return [String, Array<String>]
124
+ #
125
+ # @example
126
+ # Faker::Markdown.random #=> returns output from a single method outlined above
127
+ # Faker::Markdown.random("table") #=> returns output from any single method outlined above except for "table"
128
+ # Faker::Markdown.random("ordered_list", "unordered_list") #=> returns output from any single method outlined above except for either ordered_list and unordered_list
129
+ #
130
+ # @faker.version 1.8.0
56
131
  def random(*args)
57
132
  method_list = available_methods
58
133
  args&.each { |ex| method_list.delete_if { |meth| meth == ex.to_sym } }
59
134
  send(method_list[rand(0..method_list.length - 1)])
60
135
  end
61
136
 
137
+ ##
138
+ # Produces a simulated blog-esque text-heavy block in markdown
139
+ #
140
+ # Keyword arguments: sentences, repeat
141
+ # @param sentences [Integer] Specifies how many sentences make a text block.
142
+ # @param repeat [Integer] Specifies how many times the text block repeats.
143
+ # @return [String]
144
+ #
145
+ # @example
146
+ # Faker::Markdown.sandwich #=> returns newline separated content of 1 header, 1 default lorem paragraph, and 1 random markdown element
147
+ # Faker::Markdown.sandwich(sentences: 5) #=> returns newline separated content of 1 header, 1 5-sentence lorem paragraph, and 1 random markdown element
148
+ # Faker::Markdown.sandwich(sentences: 6, repeat: 3) #=> returns newline separated content of 1 header, and then 3 sections consisting of, here, 1 6-sentence lorem paragraph and 1 random markdown element. The random markdown element is chosen at random in each iteration of the paragraph-markdown pairing.
149
+ #
150
+ # @faker.version 1.8.0
62
151
  def sandwich(legacy_sentences = NOT_GIVEN, legacy_repeat = NOT_GIVEN, sentences: 3, repeat: 1)
63
152
  warn_for_deprecated_arguments do |keywords|
64
153
  keywords << :sentences if legacy_sentences != NOT_GIVEN
@@ -78,6 +78,21 @@ module Faker
78
78
  alias first_name_women female_first_name
79
79
  alias feminine_name female_first_name
80
80
 
81
+ ##
82
+ # Produces a random gender neutral first name.
83
+ #
84
+ # @return [String]
85
+ #
86
+ # @example
87
+ # Faker::Name.neutral_first_name #=> "Casey"
88
+ #
89
+ # @faker.version 2.13.0
90
+ def neutral_first_name
91
+ fetch('name.neutral_first_name')
92
+ end
93
+ alias first_name_neutral neutral_first_name
94
+ alias gender_neutral_first_name neutral_first_name
95
+
81
96
  ##
82
97
  # Produces a random last name.
83
98
  #
@@ -3,6 +3,15 @@
3
3
  module Faker
4
4
  class NationalHealthService < Base
5
5
  class << self
6
+ ##
7
+ # Produces a random British NHS number.
8
+ #
9
+ # @return [String]
10
+ #
11
+ # @example
12
+ # Faker::NationalHealthService.british_number #=> "403 958 5577"
13
+ #
14
+ # @faker.version 1.9.2
6
15
  def british_number
7
16
  base_number = rand(400_000_001...499_999_999)
8
17
  # If the check digit is equivalent to 10, the number is invalid.
@@ -15,6 +24,16 @@ module Faker
15
24
  .join('')
16
25
  end
17
26
 
27
+ ##
28
+ # Produces a random British NHS number's check digit.
29
+ #
30
+ # @param number [Integer] Specifies the NHS number the check digit belongs to.
31
+ # @return [Integer]
32
+ #
33
+ # @example
34
+ # Faker::NationalHealthService.check_digit(number: 400_012_114) #=> 6
35
+ #
36
+ # @faker.version 1.9.2
18
37
  def check_digit(legacy_number = NOT_GIVEN, number: 0)
19
38
  warn_for_deprecated_arguments do |keywords|
20
39
  keywords << :number if legacy_number != NOT_GIVEN
@@ -85,13 +85,11 @@ module Faker
85
85
  end
86
86
 
87
87
  l_d = number(digits: l_digits)
88
- r_d = if r_digits == 1
89
- generate(r_digits)
90
- else
91
- # Ensure the last digit is not zero
92
- # so it does not get truncated on converting to float
93
- generate(r_digits - 1).join + non_zero_digit.to_s
94
- end
88
+
89
+ # Ensure the last digit is not zero
90
+ # so it does not get truncated on converting to float
91
+ r_d = generate(r_digits - 1).join + non_zero_digit.to_s
92
+
95
93
  "#{l_d}.#{r_d}".to_f
96
94
  end
97
95