faker 2.20.0 → 3.2.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +346 -7
- data/History.md +1 -1
- data/README.md +193 -107
- data/lib/faker/blockchain/aeternity.rb +1 -1
- data/lib/faker/blockchain/ethereum.rb +1 -1
- data/lib/faker/blockchain/tezos.rb +1 -1
- data/lib/faker/books/dune.rb +2 -10
- data/lib/faker/books/lovecraft.rb +7 -38
- data/lib/faker/default/address.rb +5 -25
- data/lib/faker/default/alphanumeric.rb +2 -8
- data/lib/faker/default/app.rb +1 -10
- data/lib/faker/default/avatar.rb +1 -12
- data/lib/faker/default/bank.rb +9 -17
- data/lib/faker/default/boolean.rb +1 -4
- data/lib/faker/default/chile_rut.rb +25 -25
- data/lib/faker/default/code.rb +68 -39
- data/lib/faker/default/color.rb +77 -6
- data/lib/faker/default/commerce.rb +3 -17
- data/lib/faker/default/company.rb +50 -19
- data/lib/faker/default/crypto_coin.rb +3 -15
- data/lib/faker/default/date.rb +65 -42
- data/lib/faker/default/demographic.rb +1 -5
- data/lib/faker/default/driving_licence.rb +20 -19
- data/lib/faker/default/drone.rb +1 -1
- data/lib/faker/default/file.rb +5 -24
- data/lib/faker/default/finance.rb +17 -7
- data/lib/faker/default/food.rb +14 -1
- data/lib/faker/default/hipster.rb +6 -45
- data/lib/faker/default/html.rb +230 -0
- data/lib/faker/default/id_number.rb +125 -14
- data/lib/faker/default/internet.rb +116 -111
- data/lib/faker/default/invoice.rb +4 -17
- data/lib/faker/default/json.rb +2 -20
- data/lib/faker/default/lorem.rb +25 -74
- data/lib/faker/default/lorem_flickr.rb +4 -32
- data/lib/faker/default/markdown.rb +6 -11
- data/lib/faker/default/marketing.rb +1 -1
- data/lib/faker/default/measurement.rb +16 -48
- data/lib/faker/default/name.rb +1 -5
- data/lib/faker/default/nhs.rb +2 -6
- data/lib/faker/default/number.rb +10 -55
- data/lib/faker/default/omniauth.rb +6 -40
- data/lib/faker/default/phone_number.rb +2 -6
- data/lib/faker/default/placeholdit.rb +1 -12
- data/lib/faker/default/relationship.rb +1 -5
- data/lib/faker/default/release notes.md +59 -0
- data/lib/faker/default/source.rb +3 -16
- data/lib/faker/default/string.rb +1 -5
- data/lib/faker/default/stripe.rb +4 -20
- data/lib/faker/default/time.rb +4 -32
- data/lib/faker/default/twitter.rb +7 -23
- data/lib/faker/default/types.rb +7 -28
- data/lib/faker/default/vehicle.rb +40 -51
- data/lib/faker/default/vulnerability_identifier.rb +23 -0
- data/lib/faker/default/world_cup.rb +2 -11
- data/lib/faker/games/clash_of_clans.rb +1 -1
- data/lib/faker/games/dnd.rb +49 -7
- data/lib/faker/games/dota.rb +1 -5
- data/lib/faker/games/final_fantasy_xiv.rb +73 -0
- data/lib/faker/games/minecraft.rb +1 -1
- data/lib/faker/games/myst.rb +1 -1
- data/lib/faker/games/tarkov.rb +205 -0
- data/lib/faker/japanese_media/cowboy_bebop.rb +61 -0
- data/lib/faker/japanese_media/kamen_rider.rb +2 -2
- data/lib/faker/japanese_media/one_piece.rb +1 -1
- data/lib/faker/movies/avatar.rb +49 -0
- data/lib/faker/movies/hackers.rb +48 -0
- data/lib/faker/movies/star_wars.rb +1 -5
- data/lib/faker/movies/tron.rb +161 -0
- data/lib/faker/quotes/quote.rb +13 -0
- data/lib/faker/sports/chess.rb +90 -0
- data/lib/faker/sports/mountaineering.rb +22 -0
- data/lib/faker/sports/sport.rb +116 -0
- data/lib/faker/travel/airport.rb +43 -0
- data/lib/faker/travel/train_station.rb +54 -0
- data/lib/faker/tv_shows/archer.rb +51 -0
- data/lib/faker/tv_shows/south_park.rb +15 -0
- data/lib/faker/tv_shows/spongebob.rb +50 -0
- data/lib/faker/version.rb +1 -1
- data/lib/faker.rb +26 -67
- data/lib/helpers/base58.rb +1 -1
- data/lib/helpers/positional_generator.rb +480 -0
- data/lib/helpers/unique_generator.rb +13 -11
- data/lib/locales/README.md +18 -2
- data/lib/locales/ar.yml +1 -0
- data/lib/locales/bg.yml +1 -1
- data/lib/locales/da-DK.yml +1 -1
- data/lib/locales/de-AT.yml +1 -2
- data/lib/locales/de-CH.yml +4336 -12
- data/lib/locales/de.yml +1 -1
- data/lib/locales/en/airport.yml +381 -0
- data/lib/locales/en/archer.yml +75 -0
- data/lib/locales/en/australia.yml +3 -4
- data/lib/locales/en/avatar.yml +31 -0
- data/lib/locales/en/chess.yml +103 -0
- data/lib/locales/en/company.yml +1 -0
- data/lib/locales/en/computer.yml +23 -4
- data/lib/locales/en/cowboy_bebop.yml +163 -0
- data/lib/locales/en/dnd.yml +186 -1
- data/lib/locales/en/dota.yml +113 -0
- data/lib/locales/en/file.yml +9 -1
- data/lib/locales/en/final_fantasy_xiv.yml +754 -0
- data/lib/locales/en/finance.yml +3 -1
- data/lib/locales/en/food.yml +12 -0
- data/lib/locales/en/game.yml +0 -1
- data/lib/locales/en/hackers.yml +53 -0
- data/lib/locales/en/heroes.yml +2 -2
- data/lib/locales/en/internet.yml +32 -0
- data/lib/locales/en/minecraft.yml +4 -4
- data/lib/locales/en/mitch_hedberg.yml +46 -0
- data/lib/locales/en/mountaineering.yml +14 -0
- data/lib/locales/en/movie.yml +2 -1
- data/lib/locales/en/naruto.yml +2 -3
- data/lib/locales/en/one_piece.yml +1 -1
- data/lib/locales/en/opera.yml +2 -2
- data/lib/locales/en/overwatch.yml +5 -7
- data/lib/locales/en/source.yml +5 -0
- data/lib/locales/en/south_park.yml +360 -2
- data/lib/locales/en/spongebob.yml +489 -0
- data/lib/locales/en/sport.yml +130 -0
- data/lib/locales/en/star_wars.yml +1 -1
- data/lib/locales/en/tarkov.yml +593 -0
- data/lib/locales/en/train_station.yml +280 -0
- data/lib/locales/en/tron.yml +227 -0
- data/lib/locales/en/vehicle.yml +2809 -75
- data/lib/locales/en-AU.yml +2 -2
- data/lib/locales/en-CA.yml +2 -1
- data/lib/locales/en-GB.yml +2 -1
- data/lib/locales/en-MS.yml +1 -0
- data/lib/locales/en-NG.yml +1 -0
- data/lib/locales/en-NZ.yml +1 -0
- data/lib/locales/en-PAK.yml +1 -0
- data/lib/locales/en-SG.yml +1 -0
- data/lib/locales/en-UG.yml +1 -0
- data/lib/locales/en-US.yml +1 -1
- data/lib/locales/en-ZA.yml +1 -1
- data/lib/locales/en-au-ocker.yml +2 -0
- data/lib/locales/es-AR.yml +3 -2
- data/lib/locales/es-MX.yml +1 -1
- data/lib/locales/es.yml +2 -2
- data/lib/locales/fi-FI.yml +3 -1
- data/lib/locales/fr/address.yml +0 -1
- data/lib/locales/fr/adjective.yml +266 -0
- data/lib/locales/fr/ancient.yml +141 -0
- data/lib/locales/fr/name.yml +2 -1
- data/lib/locales/fr-CA.yml +1 -1
- data/lib/locales/fr-CH.yml +1 -1
- data/lib/locales/hy.yml +2 -1
- data/lib/locales/it.yml +1 -0
- data/lib/locales/ja/adjective.yml +148 -0
- data/lib/locales/ja/dog.yml +1 -0
- data/lib/locales/ja/emotion.yml +51 -0
- data/lib/locales/ja/naruto.yml +230 -0
- data/lib/locales/ja/relationship.yml +10 -0
- data/lib/locales/ja/sport.yml +130 -0
- data/lib/locales/ja/super_mario.yml +1 -1
- data/lib/locales/ko.yml +1 -0
- data/lib/locales/lt.yml +0 -1
- data/lib/locales/mi-NZ.yml +2 -0
- data/lib/locales/nb-NO.yml +1 -0
- data/lib/locales/nl.yml +1 -0
- data/lib/locales/pl.yml +2 -2
- data/lib/locales/pt-BR.yml +1 -0
- data/lib/locales/pt.yml +1 -1
- data/lib/locales/ru.yml +1 -0
- data/lib/locales/sk.yml +1 -0
- data/lib/locales/sv.yml +1 -0
- data/lib/locales/th.yml +76 -76
- data/lib/locales/tr.yml +1 -0
- data/lib/locales/uk.yml +3 -0
- data/lib/locales/vi.yml +1 -0
- data/lib/locales/zh-CN.yml +1 -0
- data/lib/locales/zh-TW.yml +1 -0
- metadata +46 -127
- data/lib/faker/default/fillmurray.rb +0 -45
- data/lib/faker/default/lorem_pixel.rb +0 -70
- /data/lib/faker/default/{faker_adjective.rb → adjective.rb} +0 -0
|
@@ -17,8 +17,6 @@ module Faker
|
|
|
17
17
|
random_word =~ /\s/ ? word : random_word
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
-
# rubocop:disable Metrics/ParameterLists
|
|
21
|
-
|
|
22
20
|
##
|
|
23
21
|
# Produces a random hipster word.
|
|
24
22
|
#
|
|
@@ -34,13 +32,7 @@ module Faker
|
|
|
34
32
|
# Faker::Hipster.words(number: 4, supplemental: true, spaces_allowed: true) #=> ["qui", "magni", "craft beer", "est"]
|
|
35
33
|
#
|
|
36
34
|
# @faker.version 1.6.0
|
|
37
|
-
def words(
|
|
38
|
-
warn_for_deprecated_arguments do |keywords|
|
|
39
|
-
keywords << :number if legacy_number != NOT_GIVEN
|
|
40
|
-
keywords << :supplemental if legacy_supplemental != NOT_GIVEN
|
|
41
|
-
keywords << :spaces_allowed if legacy_spaces_allowed != NOT_GIVEN
|
|
42
|
-
end
|
|
43
|
-
|
|
35
|
+
def words(number: 3, supplemental: false, spaces_allowed: false)
|
|
44
36
|
resolved_num = resolve(number)
|
|
45
37
|
word_list = (
|
|
46
38
|
translate('faker.hipster.words') +
|
|
@@ -73,16 +65,9 @@ module Faker
|
|
|
73
65
|
# Faker::Hipster.sentence(word_count: 3, supplemental: true, random_words_to_add: 0, open_compounds_allowed: false) #=> "Dreamcatcher umami fixie."
|
|
74
66
|
#
|
|
75
67
|
# @faker.version 1.6.0
|
|
76
|
-
def sentence(
|
|
77
|
-
warn_for_deprecated_arguments do |keywords|
|
|
78
|
-
keywords << :word_count if legacy_word_count != NOT_GIVEN
|
|
79
|
-
keywords << :supplemental if legacy_supplemental != NOT_GIVEN
|
|
80
|
-
keywords << :random_words_to_add if legacy_random_words_to_add != NOT_GIVEN
|
|
81
|
-
end
|
|
82
|
-
|
|
68
|
+
def sentence(word_count: 4, supplemental: false, random_words_to_add: 6, open_compounds_allowed: true)
|
|
83
69
|
"#{words(number: word_count + rand(random_words_to_add.to_i).to_i, supplemental: supplemental, spaces_allowed: open_compounds_allowed).join(' ').capitalize}."
|
|
84
70
|
end
|
|
85
|
-
# rubocop:enable Metrics/ParameterLists
|
|
86
71
|
|
|
87
72
|
##
|
|
88
73
|
# Produces random hipster sentences.
|
|
@@ -97,12 +82,7 @@ module Faker
|
|
|
97
82
|
# Faker::Hipster.sentences(number: 1, supplemental: true) #=> ["Et sustainable optio aesthetic et."]
|
|
98
83
|
#
|
|
99
84
|
# @faker.version 1.6.0
|
|
100
|
-
def sentences(
|
|
101
|
-
warn_for_deprecated_arguments do |keywords|
|
|
102
|
-
keywords << :number if legacy_number != NOT_GIVEN
|
|
103
|
-
keywords << :supplemental if legacy_supplemental != NOT_GIVEN
|
|
104
|
-
end
|
|
105
|
-
|
|
85
|
+
def sentences(number: 3, supplemental: false)
|
|
106
86
|
[].tap do |sentences|
|
|
107
87
|
1.upto(resolve(number)) do
|
|
108
88
|
sentences << sentence(word_count: 3, supplemental: supplemental)
|
|
@@ -110,8 +90,6 @@ module Faker
|
|
|
110
90
|
end
|
|
111
91
|
end
|
|
112
92
|
|
|
113
|
-
# rubocop:disable Metrics/ParameterLists
|
|
114
|
-
|
|
115
93
|
##
|
|
116
94
|
# Produces a random hipster paragraph.
|
|
117
95
|
#
|
|
@@ -128,16 +106,9 @@ module Faker
|
|
|
128
106
|
# Faker::Hipster.paragraph(sentence_count: 2, supplemental: true, random_sentences_to_add: 4) #=> "Deep v gluten-free unde waistcoat aperiam migas voluptas dolorum. Aut drinking illo sustainable sapiente. Direct trade fanny pack kale chips ennui semiotics."
|
|
129
107
|
#
|
|
130
108
|
# @faker.version 1.6.0
|
|
131
|
-
def paragraph(
|
|
132
|
-
warn_for_deprecated_arguments do |keywords|
|
|
133
|
-
keywords << :sentence_count if legacy_sentence_count != NOT_GIVEN
|
|
134
|
-
keywords << :supplemental if legacy_supplemental != NOT_GIVEN
|
|
135
|
-
keywords << :random_sentences_to_add if legacy_random_sentences_to_add != NOT_GIVEN
|
|
136
|
-
end
|
|
137
|
-
|
|
109
|
+
def paragraph(sentence_count: 3, supplemental: false, random_sentences_to_add: 3)
|
|
138
110
|
sentences(number: resolve(sentence_count) + rand(random_sentences_to_add.to_i).to_i, supplemental: supplemental).join(' ')
|
|
139
111
|
end
|
|
140
|
-
# rubocop:enable Metrics/ParameterLists
|
|
141
112
|
|
|
142
113
|
##
|
|
143
114
|
# Produces random hipster paragraphs.
|
|
@@ -152,12 +123,7 @@ module Faker
|
|
|
152
123
|
# Faker::Hipster.paragraphs(number: 1, supplemental: true) #=> ["Quae direct trade pbr&b quo taxidermy autem loko. Umami quas ratione migas cardigan sriracha minima. Tenetur perspiciatis pickled sed eum doloribus truffaut. Excepturi dreamcatcher meditation."]
|
|
153
124
|
#
|
|
154
125
|
# @faker.version 1.6.0
|
|
155
|
-
def paragraphs(
|
|
156
|
-
warn_for_deprecated_arguments do |keywords|
|
|
157
|
-
keywords << :number if legacy_number != NOT_GIVEN
|
|
158
|
-
keywords << :supplemental if legacy_supplemental != NOT_GIVEN
|
|
159
|
-
end
|
|
160
|
-
|
|
126
|
+
def paragraphs(number: 3, supplemental: false)
|
|
161
127
|
[].tap do |paragraphs|
|
|
162
128
|
1.upto(resolve(number)) do
|
|
163
129
|
paragraphs << paragraph(sentence_count: 3, supplemental: supplemental)
|
|
@@ -177,12 +143,7 @@ module Faker
|
|
|
177
143
|
# Faker::Hipster.paragraph_by_chars(characters: 256, supplemental: false) #=> "Hella kogi blog narwhal sartorial selfies mustache schlitz. Bespoke normcore kitsch cred hella fixie. Park aesthetic fixie migas twee. Cliche mustache brunch tumblr fixie godard. Drinking pop-up synth hoodie dreamcatcher typewriter. Kitsch biodiesel green."
|
|
178
144
|
#
|
|
179
145
|
# @faker.version 1.6.0
|
|
180
|
-
def paragraph_by_chars(
|
|
181
|
-
warn_for_deprecated_arguments do |keywords|
|
|
182
|
-
keywords << :characters if legacy_characters != NOT_GIVEN
|
|
183
|
-
keywords << :supplemental if legacy_supplemental != NOT_GIVEN
|
|
184
|
-
end
|
|
185
|
-
|
|
146
|
+
def paragraph_by_chars(characters: 256, supplemental: false)
|
|
186
147
|
paragraph = paragraph(sentence_count: 3, supplemental: supplemental)
|
|
187
148
|
|
|
188
149
|
paragraph += " #{paragraph(sentence_count: 3, supplemental: supplemental)}" while paragraph.length < characters
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class HTML < Base
|
|
5
|
+
class << self
|
|
6
|
+
##
|
|
7
|
+
# Produces a random HTML header format.
|
|
8
|
+
#
|
|
9
|
+
# @return [String]
|
|
10
|
+
#
|
|
11
|
+
# @example
|
|
12
|
+
# Faker::HTML.heading #=> "<h5>Autem</h5>"
|
|
13
|
+
#
|
|
14
|
+
# @faker.version 3.2.1
|
|
15
|
+
def heading
|
|
16
|
+
level = rand(1..6)
|
|
17
|
+
"<h#{level}>#{Lorem.word.capitalize}</h#{level}>"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
##
|
|
21
|
+
# Produces a random HTML paragraph format.
|
|
22
|
+
#
|
|
23
|
+
# @param sentence_count [Integer] The number of sentences in the paragraph.
|
|
24
|
+
# @param supplemental [Boolean] Include supplemental text.
|
|
25
|
+
# @param random_sentences_to_add [Integer] The number of random sentences to add to the paragraph.
|
|
26
|
+
# @param exclude_words [Array<String>] Words to exclude from the generated paragraph.
|
|
27
|
+
# @return [String]
|
|
28
|
+
#
|
|
29
|
+
# @example
|
|
30
|
+
# Faker::HTML.paragraph #=> "<p>Incidunt atque quis</p>"
|
|
31
|
+
#
|
|
32
|
+
# @faker.version 3.2.1
|
|
33
|
+
def paragraph(sentence_count: 3, supplemental: false, random_sentences_to_add: 0, exclude_words: nil)
|
|
34
|
+
"<p>#{Faker::Lorem.paragraph(sentence_count: sentence_count, supplemental: supplemental, random_sentences_to_add: random_sentences_to_add, exclude_words: exclude_words)}</p>"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
##
|
|
38
|
+
# Produces a random emphasis formatting on a random word in two HTML paragraphs.
|
|
39
|
+
#
|
|
40
|
+
# @return [String]
|
|
41
|
+
#
|
|
42
|
+
# @example
|
|
43
|
+
# Faker::HTML.emphasis #=> "<em>repellat id impedit</em>"
|
|
44
|
+
#
|
|
45
|
+
# @faker.version 3.2.1
|
|
46
|
+
def emphasis
|
|
47
|
+
"<em>#{Faker::Lorem.paragraph(sentence_count: 1)}</em>"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
##
|
|
51
|
+
# Produces a random ordered list in HTML format, with at least one element.
|
|
52
|
+
#
|
|
53
|
+
# @return [String]
|
|
54
|
+
#
|
|
55
|
+
# @example
|
|
56
|
+
# Faker::HTML.ordered_list #=> "<ol>\n<li>Qui reiciendis non consequatur atque.</li>\n<li>Quo doloremque veritatis tempora aut.</li>\n<li>Aspernatur.</li>\n<li>Ea ab.</li>\n<li>Qui.</li>\n<li>Sit pariatur nemo eveniet.</li>\n<li>Molestiae aut.</li>\n<li>Nihil molestias iure placeat.</li>\n<li>Dolore autem quisquam.</li>\n</ol>"
|
|
57
|
+
#
|
|
58
|
+
# @faker.version 3.2.1
|
|
59
|
+
def ordered_list
|
|
60
|
+
number = rand(1..10)
|
|
61
|
+
|
|
62
|
+
items = []
|
|
63
|
+
number.times do
|
|
64
|
+
items << "<li>#{Faker::Lorem.sentence(word_count: 1)}</li>"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
"<ol>\n#{items.join("\n")}\n</ol>"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
##
|
|
71
|
+
# Produces a random unordered list of items between 1 and 10 randomly in HTML format.
|
|
72
|
+
#
|
|
73
|
+
# @return [String]
|
|
74
|
+
#
|
|
75
|
+
# @example
|
|
76
|
+
# Faker::HTML.unordered_list #=> "<ul>\n<li>Voluptatum aliquid tempora molestiae facilis non sed.</li>\n<li>Nostrum omnis iste impedit voluptatum dolor.</li>\n<li>Esse quidem et facere.</li>\n</ul>"
|
|
77
|
+
#
|
|
78
|
+
# @faker.version 3.2.1
|
|
79
|
+
def unordered_list
|
|
80
|
+
number = rand(1..10)
|
|
81
|
+
|
|
82
|
+
items = []
|
|
83
|
+
number.times do
|
|
84
|
+
items << "<li>#{Faker::Lorem.sentence(word_count: 1)}</li>"
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
"<ul>\n#{items.join("\n")}\n</ul>"
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
##
|
|
91
|
+
# Produces a random code block formatted in HTML.
|
|
92
|
+
#
|
|
93
|
+
# @return [String]
|
|
94
|
+
#
|
|
95
|
+
# @example
|
|
96
|
+
# Faker::HTML.code #=> "<code>Eos quasi qui.</code>"
|
|
97
|
+
#
|
|
98
|
+
# @faker.version 3.2.1
|
|
99
|
+
def code
|
|
100
|
+
"<code>#{Lorem.sentence(word_count: 1)}</code>"
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
##
|
|
104
|
+
# Produces a random HTML table.
|
|
105
|
+
#
|
|
106
|
+
# @return [String]
|
|
107
|
+
#
|
|
108
|
+
# @example
|
|
109
|
+
# Faker::HTML.table #=> "<table>\n<thead>\n<th>ad</th>\n<th>similique</th>\n<th>voluptatem</th>\n</thead>\n<tbody>\n<td>corrupti</td>\n<td>est</td>\n<td>rerum</td>\n<td>molestiae</td>\n<td>quidem</td>\n<td>et</td>\n<td>in</td>\n<td>tempora</td>\n<td>at</td>\n<\tbody>\n<tfoot>\n<td>voluptatem</td>\n<td>debitis</td>\n<td>rem</td>\n</tfoot>\n</table>"
|
|
110
|
+
#
|
|
111
|
+
# @faker.version 3.2.1
|
|
112
|
+
def table
|
|
113
|
+
header_row = generate_table_row('th', 3)
|
|
114
|
+
footer_row = generate_table_row('td', 3)
|
|
115
|
+
|
|
116
|
+
body_rows = []
|
|
117
|
+
3.times do
|
|
118
|
+
row = generate_table_row('td', 3)
|
|
119
|
+
body_rows << row
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
thead = "<thead>\n#{header_row}</thead>"
|
|
123
|
+
tbody = "<tbody>\n#{body_rows.join("\n")}</tbody>"
|
|
124
|
+
tfoot = "<tfoot>\n#{footer_row}</tfoot>"
|
|
125
|
+
|
|
126
|
+
"<table>\n#{thead}\n#{tbody}\n#{tfoot}\n</table>"
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
##
|
|
130
|
+
# Generates a random <script> tag with the `src` attribute set to a random URL.
|
|
131
|
+
#
|
|
132
|
+
# @return [String]
|
|
133
|
+
#
|
|
134
|
+
# @example
|
|
135
|
+
# Faker::HTML.script #=> "<script src=\"http://gulgowski.name/jordan.weimann.js\"></script>"
|
|
136
|
+
#
|
|
137
|
+
# @faker.version 3.2.1
|
|
138
|
+
def script
|
|
139
|
+
"<script src=\"#{Faker::Internet.url}.js\"></script>"
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
##
|
|
143
|
+
# Generates a random <link> tag with the `rel` attribute set to "stylesheet" and the `href` attribute set to a random URL.
|
|
144
|
+
#
|
|
145
|
+
# @param rel [String] The rel of the link tag.
|
|
146
|
+
# @return [String]
|
|
147
|
+
#
|
|
148
|
+
# @example
|
|
149
|
+
# Faker::HTML.link #=> "<link rel=\"stylesheet\" href=\"http://fay.io/darryl.barrows.css\">"
|
|
150
|
+
#
|
|
151
|
+
# @faker.version 3.2.1
|
|
152
|
+
def link(rel: 'stylesheet')
|
|
153
|
+
"<link rel=\"#{rel}\" href=\"#{Faker::Internet.url}.css\">"
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
##
|
|
157
|
+
# Generates HTML content with customizable attributes for any HTML tag.
|
|
158
|
+
#
|
|
159
|
+
# @param tag [String] The HTML tag to generate.
|
|
160
|
+
# @param content [String] The Content of the HTML tag.
|
|
161
|
+
# @param attributes [Hash] The attributes to include in the tag.
|
|
162
|
+
# @return [String]
|
|
163
|
+
#
|
|
164
|
+
# @example
|
|
165
|
+
# Faker::HTML.element(tag: 'div', content: "This is a div with XSS attributes.", attributes: {class: 'xss', onclick: "alert('XSS')"}) #=> "<div class=\"xss\" onclick=\"alert('XSS')\">This is a div with XSS attributes.</div>"
|
|
166
|
+
#
|
|
167
|
+
# @faker.version 3.2.1
|
|
168
|
+
def element(tag: 'div', content: Lorem.sentence(word_count: 3), attributes: { class: Lorem.word, onclick: "#{Lorem.word}()" })
|
|
169
|
+
attribute_string = attributes.map { |key, value| "#{key}=\"#{value}\"" }.join(' ')
|
|
170
|
+
"<#{tag} #{attribute_string}>#{content}</#{tag}>"
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
##
|
|
174
|
+
# Produces a random method from the methods above, excluding the methods listed in the arguments.
|
|
175
|
+
#
|
|
176
|
+
# @overload random(methods)
|
|
177
|
+
# @param methods [Symbol] Specify which methods to exclude.
|
|
178
|
+
#
|
|
179
|
+
# @return [String]
|
|
180
|
+
#
|
|
181
|
+
# @example
|
|
182
|
+
# Faker::HTML.random #=> returns output from a single method outlined above
|
|
183
|
+
# Faker::HTML.random(exclude: [:table]) #=> returns output from any single method outlined above except for "table"
|
|
184
|
+
# Faker::HTML.random(exclude: [:ordered_list, :unordered_list]) #=> returns output from any single method outlined above except for either ordered_list and unordered_list
|
|
185
|
+
#
|
|
186
|
+
# @faker.version 3.2.1
|
|
187
|
+
def random(exclude: [])
|
|
188
|
+
method_list = available_methods
|
|
189
|
+
exclude.each { |ex| method_list.delete_if { |meth| meth == ex.to_sym } }
|
|
190
|
+
send(method_list[Faker::Config.random.rand(0..method_list.length - 1)])
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
##
|
|
194
|
+
# Generates a random HTML content sandwich, starting with a header, followed by paragraphs, and random elements.
|
|
195
|
+
#
|
|
196
|
+
# @param sentences [Integer] The number of sentences in each paragraph.
|
|
197
|
+
# @param repeat [Integer] The number of times to repeat the pattern (header, paragraph, random).
|
|
198
|
+
# @return [String]
|
|
199
|
+
#
|
|
200
|
+
# @example
|
|
201
|
+
# Faker::HTML.sandwich(sentences: 3, repeat: 2) #=> returns a sandwich of HTML content with 2 repetitions, each having a header, paragraph, and random element
|
|
202
|
+
#
|
|
203
|
+
# @faker.version 3.2.1
|
|
204
|
+
def sandwich(sentences: 3, repeat: 1)
|
|
205
|
+
text_block = []
|
|
206
|
+
text_block << heading
|
|
207
|
+
repeat.times do
|
|
208
|
+
text_block << paragraph(sentence_count: sentences)
|
|
209
|
+
text_block << random(exclude: %i[script link])
|
|
210
|
+
end
|
|
211
|
+
text_block.join("\n")
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
private
|
|
215
|
+
|
|
216
|
+
def available_methods
|
|
217
|
+
(HTML.public_methods(false) - Base.methods).sort
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
def generate_table_row(tag, cell_count)
|
|
221
|
+
row = "<tr>\n"
|
|
222
|
+
cell_count.times do
|
|
223
|
+
row += "<#{tag == 'th' ? 'th' : 'td'}>#{Lorem.word}</#{tag == 'th' ? 'th' : 'td'}>\n"
|
|
224
|
+
end
|
|
225
|
+
row += "</tr>\n"
|
|
226
|
+
row
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
end
|
|
@@ -46,9 +46,23 @@ module Faker
|
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
def ssn_valid
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
generate(:string) do |g|
|
|
50
|
+
g.computed(name: :first) do
|
|
51
|
+
range = [1..665, 667..899].sample(random: Faker::Config.random)
|
|
52
|
+
n = Faker::Base.rand(range)
|
|
53
|
+
format('%03d', n)
|
|
54
|
+
end
|
|
55
|
+
g.lit('-')
|
|
56
|
+
g.computed(name: :second) do
|
|
57
|
+
n = Faker::Base.rand(1..99)
|
|
58
|
+
format('%02d', n)
|
|
59
|
+
end
|
|
60
|
+
g.lit('-')
|
|
61
|
+
g.computed(name: :third) do
|
|
62
|
+
n = Faker::Base.rand(1..9999)
|
|
63
|
+
format('%04d', n)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
52
66
|
end
|
|
53
67
|
|
|
54
68
|
##
|
|
@@ -146,11 +160,7 @@ module Faker
|
|
|
146
160
|
# Faker::IDNumber.brazilian_citizen_number(formatted: true) #=> "535.405.422-21"
|
|
147
161
|
#
|
|
148
162
|
# @faker.version 1.9.2
|
|
149
|
-
def brazilian_citizen_number(
|
|
150
|
-
warn_for_deprecated_arguments do |keywords|
|
|
151
|
-
keywords << :formatted if legacy_formatted != NOT_GIVEN
|
|
152
|
-
end
|
|
153
|
-
|
|
163
|
+
def brazilian_citizen_number(formatted: false)
|
|
154
164
|
digits = Faker::Number.leading_zero_number(digits: 9) until digits&.match(/(\d)((?!\1)\d)+/)
|
|
155
165
|
first_digit = brazilian_citizen_number_checksum_digit(digits)
|
|
156
166
|
second_digit = brazilian_citizen_number_checksum_digit(digits + first_digit)
|
|
@@ -171,11 +181,7 @@ module Faker
|
|
|
171
181
|
# Faker::IDNumber.brazilian_id(formatted: true) #=> "49.305.402-9"
|
|
172
182
|
#
|
|
173
183
|
# @faker.version 2.1.2
|
|
174
|
-
def brazilian_id(
|
|
175
|
-
warn_for_deprecated_arguments do |keywords|
|
|
176
|
-
keywords << :formatted if legacy_formatted != NOT_GIVEN
|
|
177
|
-
end
|
|
178
|
-
|
|
184
|
+
def brazilian_id(formatted: false)
|
|
179
185
|
digits = Faker::Number.between(to: BRAZILIAN_ID_FROM, from: BRAZILIAN_ID_TO).to_s
|
|
180
186
|
check_digit = brazilian_id_checksum_digit(digits)
|
|
181
187
|
number = [digits, check_digit].join
|
|
@@ -219,6 +225,72 @@ module Faker
|
|
|
219
225
|
"#{prefix}#{digits}#{checksum_digit}"
|
|
220
226
|
end
|
|
221
227
|
|
|
228
|
+
##
|
|
229
|
+
# Produces a random Danish ID Number (CPR number).
|
|
230
|
+
# CPR number is 10 digits. Digit 1-6 is the birthdate (format "DDMMYY").
|
|
231
|
+
# Digit 7-10 is a sequence number.
|
|
232
|
+
# Digit 7 digit is a control digit that determines the century of birth.
|
|
233
|
+
# Digit 10 reveals the gender: # even is female, odd is male.
|
|
234
|
+
#
|
|
235
|
+
# @param formatted [Boolean] Specifies if the number is formatted with dividers.
|
|
236
|
+
# @param birthday [Date] Specifies the birthday for the id number.
|
|
237
|
+
# @param gender [Symbol] Specifies the gender for the id number. Must be one :male or :female if present.
|
|
238
|
+
# @return [String]
|
|
239
|
+
#
|
|
240
|
+
# @example
|
|
241
|
+
# Faker::IDNumber.danish_id_number #=> "0503909980"
|
|
242
|
+
# Faker::IDNumber.danish_id_number(formatted: true) #=> "050390-9980"
|
|
243
|
+
# Faker::IDNumber.danish_id_number(birthday: Date.new(1990, 3, 5)) #=> "0503909980"
|
|
244
|
+
# Faker::IDNumber.danish_id_number(gender: :female) #=> "0503909980"
|
|
245
|
+
#
|
|
246
|
+
# @faker.version next
|
|
247
|
+
def danish_id_number(formatted: false, birthday: Faker::Date.birthday, gender: nil)
|
|
248
|
+
valid_control_digits = danish_control_digits(birthday)
|
|
249
|
+
control_digit = sample(valid_control_digits)
|
|
250
|
+
digits = (0..9).to_a
|
|
251
|
+
gender = gender.to_sym if gender.respond_to?(:to_sym)
|
|
252
|
+
gender_digit = case gender
|
|
253
|
+
when nil
|
|
254
|
+
sample(digits)
|
|
255
|
+
when :male
|
|
256
|
+
sample(digits.select(&:odd?))
|
|
257
|
+
when :female
|
|
258
|
+
sample(digits.select(&:even?))
|
|
259
|
+
else
|
|
260
|
+
raise ArgumentError, "Invalid gender #{gender}. Must be one of male, female, or be omitted."
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
[
|
|
264
|
+
birthday.strftime('%d%m%y'),
|
|
265
|
+
formatted ? '-' : '',
|
|
266
|
+
control_digit,
|
|
267
|
+
Faker::Number.number(digits: 2),
|
|
268
|
+
gender_digit
|
|
269
|
+
].join
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
##
|
|
273
|
+
# Produces a random French social security number (INSEE number).
|
|
274
|
+
#
|
|
275
|
+
# @return [String]
|
|
276
|
+
#
|
|
277
|
+
# @example
|
|
278
|
+
# Faker::IDNumber.french_insee_number #=> "53290236-H"
|
|
279
|
+
#
|
|
280
|
+
# @faker.version next
|
|
281
|
+
def french_insee_number
|
|
282
|
+
num = [
|
|
283
|
+
[1, 2].sample(random: Faker::Config.random), # gender
|
|
284
|
+
Faker::Number.between(from: 0, to: 99).to_s.rjust(2, '0'), # year of birth
|
|
285
|
+
Faker::Number.between(from: 1, to: 12).to_s.rjust(2, '0'), # month of birth
|
|
286
|
+
Faker::Number.number(digits: 5), # place of birth
|
|
287
|
+
Faker::Number.number(digits: 3) # order number
|
|
288
|
+
].join
|
|
289
|
+
mod = num.to_i % 97
|
|
290
|
+
check = (97 - mod).to_s.rjust(2, '0')
|
|
291
|
+
"#{num}#{check}"
|
|
292
|
+
end
|
|
293
|
+
|
|
222
294
|
private
|
|
223
295
|
|
|
224
296
|
def croatian_id_checksum_digit(digits)
|
|
@@ -266,7 +338,7 @@ module Faker
|
|
|
266
338
|
.with_index { |_, i| (i + 1).odd? }
|
|
267
339
|
|
|
268
340
|
sum_of_odd_digits = odd_digits_without_last_character.map(&:to_i).reduce(:+)
|
|
269
|
-
even_digits_times_two = (even_digits.join
|
|
341
|
+
even_digits_times_two = (even_digits.join.to_i * 2).to_s
|
|
270
342
|
sum_of_even_digits = even_digits_times_two.chars.map(&:to_i).reduce(:+)
|
|
271
343
|
|
|
272
344
|
total_sum = sum_of_odd_digits + sum_of_even_digits
|
|
@@ -305,6 +377,45 @@ module Faker
|
|
|
305
377
|
digits.include?(subtraction) ? digits[subtraction] : subtraction.to_s
|
|
306
378
|
end
|
|
307
379
|
|
|
380
|
+
def danish_control_digits(birthday)
|
|
381
|
+
year = birthday.year
|
|
382
|
+
century = year.to_s.slice(0, 2).to_i
|
|
383
|
+
year_digits = year.to_s.slice(2, 2).to_i
|
|
384
|
+
error_message = "Invalid birthday: #{birthday}. Danish CPR numbers are only distributed to persons born between 1858 and 2057."
|
|
385
|
+
|
|
386
|
+
case century
|
|
387
|
+
when 18
|
|
388
|
+
# If 5, 6, 7 or 8 and the year numbers are greater than or equal to 58, you were born in 18XX.
|
|
389
|
+
case year_digits
|
|
390
|
+
when 58..99
|
|
391
|
+
[5, 6, 7, 8]
|
|
392
|
+
else
|
|
393
|
+
raise ArgumentError, error_message
|
|
394
|
+
end
|
|
395
|
+
when 19
|
|
396
|
+
# If 0, 1, 2 or 3, you are always born in 19XX.
|
|
397
|
+
# If 4 or 9, you are born in 19XX if the year digits are greater than 36.
|
|
398
|
+
|
|
399
|
+
case year_digits
|
|
400
|
+
when 0..36
|
|
401
|
+
[0, 1, 2, 3]
|
|
402
|
+
else # 37..99
|
|
403
|
+
[0, 1, 2, 3, 4, 9]
|
|
404
|
+
end
|
|
405
|
+
else
|
|
406
|
+
# If 4, 5, 6, 7, 8 or 9 and the year digits are less than or equal to 36, you were born in 20XX.
|
|
407
|
+
# 5, 6, 7 and 8 are not distributed to persons, with year digits from and including 37 to and including 57.
|
|
408
|
+
case year_digits
|
|
409
|
+
when 0..36
|
|
410
|
+
[4, 5, 6, 7, 8, 9]
|
|
411
|
+
when 37..57
|
|
412
|
+
[5, 6, 7, 8]
|
|
413
|
+
else
|
|
414
|
+
raise ArgumentError, error_message
|
|
415
|
+
end
|
|
416
|
+
end
|
|
417
|
+
end
|
|
418
|
+
|
|
308
419
|
def _translate(key)
|
|
309
420
|
parse("id_number.#{key}")
|
|
310
421
|
end
|