faker 1.5.0 → 1.6.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.
- checksums.yaml +4 -4
- data/History.txt +5 -0
- data/README.md +80 -6
- data/lib/faker.rb +8 -1
- data/lib/faker/address.rb +0 -1
- data/lib/faker/avatar.rb +3 -2
- data/lib/faker/book.rb +5 -1
- data/lib/faker/code.rb +18 -0
- data/lib/faker/commerce.rb +3 -3
- data/lib/faker/company.rb +9 -1
- data/lib/faker/hipster.rb +59 -0
- data/lib/faker/id_number.rb +36 -0
- data/lib/faker/internet.rb +68 -27
- data/lib/faker/number.rb +24 -2
- data/lib/faker/placeholdit.rb +20 -0
- data/lib/faker/shakespeare.rb +83 -0
- data/lib/faker/time.rb +10 -1
- data/lib/faker/version.rb +1 -1
- data/lib/locales/de.yml +6 -0
- data/lib/locales/en-AU.yml +3 -1
- data/lib/locales/en-NEP.yml +11 -1
- data/lib/locales/en-NZ.yml +25 -0
- data/lib/locales/en-SG.yml +31 -0
- data/lib/locales/en-US.yml +16 -1
- data/lib/locales/en-au-ocker.yml +5 -3
- data/lib/locales/en.yml +11 -1
- data/lib/locales/es.yml +10 -0
- data/lib/locales/fr.yml +6 -1
- data/lib/locales/he.yml +25 -0
- data/lib/locales/it.yml +6 -6
- data/lib/locales/ja.yml +22 -4
- data/lib/locales/nb-NO.yml +4 -1
- data/lib/locales/pl.yml +1 -1
- data/lib/locales/pt-BR.yml +2 -2
- data/lib/locales/sk.yml +2 -2
- data/lib/locales/zh-CN.yml +2 -0
- data/test/test_avatar.rb +9 -5
- data/test/test_en_au_locale.rb +24 -0
- data/test/test_en_au_ocker_locale.rb +7 -5
- data/test/test_en_locale.rb +10 -0
- data/test/test_en_nz_locale.rb +33 -0
- data/test/test_en_us_locale.rb +10 -0
- data/test/test_faker_book.rb +5 -1
- data/test/test_faker_code.rb +4 -0
- data/test/test_faker_commerce.rb +12 -4
- data/test/test_faker_company.rb +5 -1
- data/test/test_faker_date.rb +4 -3
- data/test/test_faker_hipster.rb +78 -0
- data/test/test_faker_internet.rb +36 -3
- data/test/test_faker_lorem.rb +3 -3
- data/test/test_faker_number.rb +30 -0
- data/test/test_faker_shakespeare.rb +53 -0
- data/test/test_faker_time.rb +24 -5
- data/test/test_placeholdit.rb +92 -0
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16afea76964cc1fb1d8779296e32ed88e450ed42
|
4
|
+
data.tar.gz: 1470483a239699d09a0cf0c2e8133069f4a82b29
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e5940ec8586f709c265b428d64a11ab0e13ecdd91201a95b2213e4cc04bff2708f5441fba29fabfac9097328e4c3d516a2c2ef87dee41eef315fd662e3005624
|
7
|
+
data.tar.gz: b4b9b8e736b664fbc4e8974d1dd3dd38d1956763f48d8d21b2426d3fc9ace02547d0ba95fb0587cbce8379051a13d9303593b29363d4a746f254a32757bb73ea
|
data/History.txt
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
== 1.6.0 2015-11-20
|
2
|
+
* Lots of bug fixes -- most notably, a fix for email addresses and domains in non-en locales
|
3
|
+
* Updated locales: de, en-AU, en-NZ, en-SG, en-US, en-au-ocker, en, es, fr, he, it, ja, nb-NO, pl, pt-BR, sk, and zh-CN
|
4
|
+
* Updated classes: Address, Avatar, Book, Code, Commerce, Company, Hipster, IDNumber, Internet, Number, Placeholdit, Shakespeare, and Time
|
5
|
+
|
1
6
|
== 1.5.0 2015-08-17
|
2
7
|
* Added logos
|
3
8
|
* Added Slack Emoji
|
data/README.md
CHANGED
@@ -141,10 +141,13 @@ Faker::Company.ein #=> "34-8488813"
|
|
141
141
|
Faker::Company.duns_number #=> "08-341-3736"
|
142
142
|
|
143
143
|
# Get a random company logo url in PNG format.
|
144
|
-
Faker::Company.logo #=> "
|
144
|
+
Faker::Company.logo #=> "https://pigment.github.com/fake-logos/logos/medium/color/5.png"
|
145
145
|
|
146
146
|
Faker::Company.swedish_organisation_number #=> "7718797652"
|
147
147
|
|
148
|
+
# Get a random profession
|
149
|
+
Faker::Company.profession #=> "firefighter"
|
150
|
+
|
148
151
|
```
|
149
152
|
|
150
153
|
###Faker::Date
|
@@ -194,6 +197,10 @@ Faker::Internet.password(8) #=> "yfgjik0hgzdqs0"
|
|
194
197
|
|
195
198
|
Faker::Internet.password(10, 20) #=> "eoc9shwd1hwq4vbgfw"
|
196
199
|
|
200
|
+
Faker::Internet.password(10, 20, true) #=> "3k5qS15aNmG"
|
201
|
+
|
202
|
+
Faker::Internet.password(10, 20, true, true) #=> "*%NkOnJsH4"
|
203
|
+
|
197
204
|
Faker::Internet.domain_name #=> "effertz.info"
|
198
205
|
|
199
206
|
Faker::Internet.fix_umlauts('äöüß') #=> "aeoeuess"
|
@@ -204,6 +211,10 @@ Faker::Internet.domain_suffix #=> "info"
|
|
204
211
|
|
205
212
|
Faker::Internet.ip_v4_address #=> "24.29.18.175"
|
206
213
|
|
214
|
+
# Guaranteed not to be in 10.0.0.0/8, 127.0.0.0/8, 169.254.0.0/16,
|
215
|
+
# 172.16.0.0/12, or 192.168.0.0/16
|
216
|
+
Faker::Internet.public_ip_v4_address #=> "24.29.18.175"
|
217
|
+
|
207
218
|
Faker::Internet.ip_v6_address #=> "ac5f:d696:3807:1d72:2eb5:4e81:7d2b:e1df"
|
208
219
|
|
209
220
|
# Optional argument prefix=''
|
@@ -289,15 +300,17 @@ Faker::Name.title #=> "Legacy Creative Director"
|
|
289
300
|
|
290
301
|
```ruby
|
291
302
|
|
292
|
-
Faker::Avatar.image #=> "
|
303
|
+
Faker::Avatar.image #=> "https://robohash.org/sitsequiquia.png?size=300x300"
|
304
|
+
|
305
|
+
Faker::Avatar.image("my-own-slug") #=> "https://robohash.org/my-own-slug.png?size=300x300"
|
293
306
|
|
294
|
-
Faker::Avatar.image("my-own-slug") #=> "
|
307
|
+
Faker::Avatar.image("my-own-slug", "50x50") #=> "https://robohash.org/my-own-slug.png?size=50x50"
|
295
308
|
|
296
|
-
Faker::Avatar.image("my-own-slug", "50x50") #=> "
|
309
|
+
Faker::Avatar.image("my-own-slug", "50x50", "jpg") #=> "https://robohash.org/my-own-slug.jpg?size=50x50"
|
297
310
|
|
298
|
-
Faker::Avatar.image("my-own-slug", "50x50", "
|
311
|
+
Faker::Avatar.image("my-own-slug", "50x50", "bmp") #=> "https://robohash.org/my-own-slug.bmp?size=50x50"
|
299
312
|
|
300
|
-
Faker::Avatar.image("my-own-slug", "50x50", "bmp") #=> "
|
313
|
+
Faker::Avatar.image("my-own-slug", "50x50", "bmp", "set1", "bg1") #=> "https://robohash.org/my-own-slug.bmp?size=50x50&set=set1&bgset=bg1"
|
301
314
|
```
|
302
315
|
|
303
316
|
###Faker::Number
|
@@ -498,6 +511,9 @@ Faker::Book.author #=> "Alysha Olsen"
|
|
498
511
|
# Random Publisher
|
499
512
|
Faker::Book.publisher #=> "Opus Reader"
|
500
513
|
|
514
|
+
# Random Genre
|
515
|
+
Faker::Book.genre #=> "Mystery"
|
516
|
+
|
501
517
|
```
|
502
518
|
|
503
519
|
###Faker::University
|
@@ -510,6 +526,64 @@ Faker::University.name #=> "South Texas College"
|
|
510
526
|
|
511
527
|
```
|
512
528
|
|
529
|
+
###Faker::Placeholdit
|
530
|
+
----------------
|
531
|
+
|
532
|
+
```ruby
|
533
|
+
|
534
|
+
Faker::Placeholdit.image #=> "http://placehold.it/300x300.png/000"
|
535
|
+
|
536
|
+
Faker::Placeholdit.image("50x50") #=> "http://placehold.it/50x50.png/000"
|
537
|
+
|
538
|
+
Faker::Placeholdit.image("50x50", 'jpg') #=> "http://placehold.it/50x50.jpg/000"
|
539
|
+
|
540
|
+
Faker::Placeholdit.image("50x50", 'gif', 'ffffff') #=> "http://placehold.it/50x50.gif/ffffff"
|
541
|
+
|
542
|
+
Faker::Placeholdit.image("50x50", 'jpeg', 'ffffff', '000') #=> "http://placehold.it/50x50.jpeg/ffffff/000"
|
543
|
+
|
544
|
+
Faker::Placeholdit.image("50x50", 'jpg', 'ffffff', '000', 'Some Custom Text') #=> "http://placehold.it/50x50.jpg/ffffff/000?text='Some Custom Text'"
|
545
|
+
|
546
|
+
```
|
547
|
+
|
548
|
+
###Faker::Hipster
|
549
|
+
----------------
|
550
|
+
Adapted from [Hipster Ipsum](http://hipsum.co/)
|
551
|
+
|
552
|
+
```ruby
|
553
|
+
|
554
|
+
Faker::Hipster.word #=> "irony"
|
555
|
+
|
556
|
+
# Optional arguments: num=3, supplemental=false, spaces_allowed = false
|
557
|
+
Faker::Hipster.words #=> ["pug", "pitchfork", "chia"]
|
558
|
+
Faker::Hipster.words(4) #=> ["ugh", "cardigan", "poutine", "stumptown"]
|
559
|
+
Faker::Hipster.words(4, true) #=> ["iste", "seitan", "normcore", "provident"]
|
560
|
+
Faker::Hipster.words(4, true, true) #=> ["qui", "magni", "craft beer", "est"]
|
561
|
+
|
562
|
+
# Optional arguments: word_count=4, supplemental=false, random_words_to_add=6
|
563
|
+
Faker::Hipster.sentence #=> "Park iphone leggings put a bird on it."
|
564
|
+
Faker::Hipster.sentence(3) #=> "Pour-over swag godard."
|
565
|
+
Faker::Hipster.sentence(3, true) #=> "Beard laboriosam sequi celiac."
|
566
|
+
Faker::Hipster.sentence(3, false, 4) #=> "Bitters retro mustache aesthetic biodiesel 8-bit."
|
567
|
+
Faker::Hipster.sentence(3, true, 4) #=> "Occaecati deleniti messenger bag meh crucifix autem."
|
568
|
+
|
569
|
+
# Optional arguments: sentence_count=3, supplemental=false
|
570
|
+
Faker::Hipster.sentences #=> ["Godard pitchfork vinegar chillwave everyday 90's whatever.", "Pour-over artisan distillery street waistcoat.", "Salvia yr leggings franzen blue bottle."]
|
571
|
+
Faker::Hipster.sentences(1) #=> ["Before they sold out pinterest venmo umami try-hard ugh hoodie artisan."]
|
572
|
+
Faker::Hipster.sentences(1, true) #=> ["Et sustainable optio aesthetic et."]
|
573
|
+
|
574
|
+
# Optional arguments: sentence_count=3, supplemental=false, random_sentences_to_add=3
|
575
|
+
Faker::Hipster.paragraph #=> "Migas fingerstache pbr&b tofu. Polaroid distillery typewriter echo tofu actually. Slow-carb fanny pack pickled direct trade scenester mlkshk plaid. Banjo venmo chambray cold-pressed typewriter. Fap skateboard intelligentsia."
|
576
|
+
Faker::Hipster.paragraph(2) #=> "Yolo tilde farm-to-table hashtag. Lomo kitsch disrupt forage +1."
|
577
|
+
Faker::Hipster.paragraph(2, true) #=> "Typewriter iste ut viral kombucha voluptatem. Sint voluptates saepe. Direct trade irony chia excepturi yuccie. Biodiesel esse listicle et quam suscipit."
|
578
|
+
Faker::Hipster.paragraph(2, false, 4) #=> "Selvage vhs chartreuse narwhal vinegar. Authentic vinyl truffaut carry vhs pop-up. Hammock everyday iphone locavore thundercats bitters vegan goth. Fashion axe banh mi shoreditch whatever artisan."
|
579
|
+
Faker::Hipster.paragraph(2, true, 4) #=> "Deep v gluten-free unde waistcoat aperiam migas voluptas dolorum. Aut drinking illo sustainable sapiente. Direct trade fanny pack kale chips ennui semiotics."
|
580
|
+
|
581
|
+
# Optional arguments: paragraph_count=3, supplemental=false
|
582
|
+
Faker::Hipster.paragraphs #=> ["Tilde microdosing blog cliche meggings. Intelligentsia five dollar toast forage yuccie. Master kitsch knausgaard. Try-hard everyday trust fund mumblecore.", "Normcore viral pickled. Listicle humblebrag swag tote bag. Taxidermy street hammock neutra butcher cred kale chips. Blog portland humblebrag trust fund irony.", "Single-origin coffee fixie cleanse tofu xoxo. Post-ironic tote bag ramps gluten-free locavore mumblecore hammock. Umami loko twee. Ugh kitsch before they sold out."]
|
583
|
+
Faker::Hipster.paragraphs(1) #=> ["Skateboard cronut synth +1 fashion axe. Pop-up polaroid skateboard asymmetrical. Ennui fingerstache shoreditch before they sold out. Tattooed pitchfork ramps. Photo booth yr messenger bag raw denim bespoke locavore lomo synth."]
|
584
|
+
Faker::Hipster.paragraphs(1, 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."]
|
585
|
+
```
|
586
|
+
|
513
587
|
Customization
|
514
588
|
------------
|
515
589
|
Since you may want to make addresses and other types of data look different
|
data/lib/faker.rb
CHANGED
@@ -122,10 +122,13 @@ module Faker
|
|
122
122
|
opts[:raise] = true
|
123
123
|
I18n.translate(*(args.push(opts)))
|
124
124
|
rescue I18n::MissingTranslationData
|
125
|
+
opts = args.last.is_a?(Hash) ? args.pop : {}
|
126
|
+
opts[:locale] = :en
|
127
|
+
|
125
128
|
# Super-simple fallback -- fallback to en if the
|
126
129
|
# translation was missing. If the translation isn't
|
127
130
|
# in en either, then it will raise again.
|
128
|
-
I18n.translate(*(args.push(opts
|
131
|
+
I18n.translate(*(args.push(opts)))
|
129
132
|
end
|
130
133
|
|
131
134
|
def flexible(key)
|
@@ -174,13 +177,17 @@ require 'faker/version'
|
|
174
177
|
require 'faker/number'
|
175
178
|
require 'faker/bitcoin'
|
176
179
|
require 'faker/avatar'
|
180
|
+
require 'faker/placeholdit'
|
177
181
|
require 'faker/date'
|
178
182
|
require 'faker/time'
|
179
183
|
require 'faker/number'
|
180
184
|
require 'faker/hacker'
|
181
185
|
require 'faker/app'
|
186
|
+
require 'faker/id_number'
|
182
187
|
require 'faker/slack_emoji'
|
183
188
|
require 'faker/book'
|
189
|
+
require 'faker/hipster'
|
190
|
+
require 'faker/shakespeare'
|
184
191
|
|
185
192
|
require 'extensions/array'
|
186
193
|
require 'extensions/symbol'
|
data/lib/faker/address.rb
CHANGED
data/lib/faker/avatar.rb
CHANGED
@@ -3,11 +3,12 @@ module Faker
|
|
3
3
|
class << self
|
4
4
|
SUPPORTED_FORMATS = %w(png jpg bmp)
|
5
5
|
|
6
|
-
def image(slug = nil, size = '300x300', format = 'png', set = 'set1')
|
6
|
+
def image(slug = nil, size = '300x300', format = 'png', set = 'set1', bgset = nil)
|
7
7
|
raise ArgumentError, "Size should be specified in format 300x300" unless size.match(/^[0-9]+x[0-9]+$/)
|
8
8
|
raise ArgumentError, "Supported formats are #{SUPPORTED_FORMATS.join(', ')}" unless SUPPORTED_FORMATS.include?(format)
|
9
9
|
slug ||= Faker::Lorem.words.join
|
10
|
-
"
|
10
|
+
bgset_query = "&bgset=#{bgset}" if bgset
|
11
|
+
"https://robohash.org/#{slug}.#{format}?size=#{size}&set=#{set}#{bgset_query}"
|
11
12
|
end
|
12
13
|
end
|
13
14
|
end
|
data/lib/faker/book.rb
CHANGED
data/lib/faker/code.rb
CHANGED
@@ -26,6 +26,17 @@ module Faker
|
|
26
26
|
value << "-#{vd}"
|
27
27
|
end
|
28
28
|
|
29
|
+
# By default generates a Singaporean NRIC ID for someone
|
30
|
+
# who is born between the age of 18 and 65.
|
31
|
+
def nric(min_age = 18, max_age = 65)
|
32
|
+
birthyear = Date.birthday(min_age, max_age).year
|
33
|
+
prefix = birthyear < 2000 ? 'S' : 'T'
|
34
|
+
values = birthyear.to_s[-2..-1]
|
35
|
+
values << regexify(/\d{5}/)
|
36
|
+
check_alpha = generate_nric_check_alphabet(values, prefix)
|
37
|
+
"#{prefix}#{values}#{check_alpha}"
|
38
|
+
end
|
39
|
+
|
29
40
|
private
|
30
41
|
|
31
42
|
def generate_base10_isbn
|
@@ -65,6 +76,13 @@ module Faker
|
|
65
76
|
total = rut.to_s.rjust(8, '0').split(//).zip(%w(3 2 7 6 5 4 3 2)).collect{|a, b| a.to_i * b.to_i}.inject(:+)
|
66
77
|
(11 - total % 11).to_s.gsub(/10/, 'k').gsub(/11/, '0')
|
67
78
|
end
|
79
|
+
|
80
|
+
def generate_nric_check_alphabet(values, prefix)
|
81
|
+
weight = %w(2 7 6 5 4 3 2)
|
82
|
+
total = values.split(//).zip(weight).collect { |a, b| a.to_i * b.to_i }.inject(:+)
|
83
|
+
total = total + 4 if prefix == 'T'
|
84
|
+
%w(A B C D E F G H I Z J)[10 - total % 11]
|
85
|
+
end
|
68
86
|
end
|
69
87
|
end
|
70
88
|
end
|
data/lib/faker/commerce.rb
CHANGED
@@ -27,9 +27,9 @@ module Faker
|
|
27
27
|
fetch('commerce.product_name.material')
|
28
28
|
end
|
29
29
|
|
30
|
-
def price
|
31
|
-
random = Random
|
32
|
-
(random.rand(
|
30
|
+
def price(range=0..100.0)
|
31
|
+
random = Random::DEFAULT
|
32
|
+
(random.rand(range) * 100).floor/100.0
|
33
33
|
end
|
34
34
|
|
35
35
|
private
|
data/lib/faker/company.rb
CHANGED
@@ -11,6 +11,10 @@ module Faker
|
|
11
11
|
fetch('company.suffix')
|
12
12
|
end
|
13
13
|
|
14
|
+
def industry
|
15
|
+
fetch('company.industry')
|
16
|
+
end
|
17
|
+
|
14
18
|
# Generate a buzzword-laden catch phrase.
|
15
19
|
def catch_phrase
|
16
20
|
translate('faker.company.buzzwords').collect {|list| list.sample }.join(' ')
|
@@ -36,7 +40,7 @@ module Faker
|
|
36
40
|
# Get a random company logo url in PNG format.
|
37
41
|
def logo
|
38
42
|
rand_num = Random.rand(13) + 1
|
39
|
-
"
|
43
|
+
"https://pigment.github.io/fake-logos/logos/medium/color/#{rand_num}.png"
|
40
44
|
end
|
41
45
|
|
42
46
|
def swedish_organisation_number
|
@@ -44,6 +48,10 @@ module Faker
|
|
44
48
|
base + luhn_algorithm(base).to_s
|
45
49
|
end
|
46
50
|
|
51
|
+
def profession
|
52
|
+
fetch('company.profession')
|
53
|
+
end
|
54
|
+
|
47
55
|
private
|
48
56
|
|
49
57
|
def luhn_algorithm(number)
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Faker
|
2
|
+
class Hipster < Base
|
3
|
+
class << self
|
4
|
+
def word
|
5
|
+
random_word = translate('faker.hipster.words').sample
|
6
|
+
random_word.match(/\s/) ? word : random_word
|
7
|
+
end
|
8
|
+
|
9
|
+
def words(num = 3, supplemental = false, spaces_allowed = false)
|
10
|
+
resolved_num = resolve(num)
|
11
|
+
word_list = (
|
12
|
+
translate('faker.hipster.words') +
|
13
|
+
(supplemental ? translate('faker.lorem.words') : [])
|
14
|
+
)
|
15
|
+
word_list = word_list * ((resolved_num / word_list.length) + 1)
|
16
|
+
|
17
|
+
return word_list.shuffle[0, resolved_num] if spaces_allowed
|
18
|
+
words = word_list.shuffle[0, resolved_num]
|
19
|
+
words.each_with_index { |w, i| words[i] = word if w.match(/\s/) }
|
20
|
+
end
|
21
|
+
|
22
|
+
def sentence(word_count = 4, supplemental = false, random_words_to_add = 6)
|
23
|
+
words(word_count + rand(random_words_to_add.to_i).to_i, supplemental, true).join(' ').capitalize + '.'
|
24
|
+
end
|
25
|
+
|
26
|
+
def sentences(sentence_count = 3, supplemental = false)
|
27
|
+
[].tap do |sentences|
|
28
|
+
1.upto(resolve(sentence_count)) do
|
29
|
+
sentences << sentence(3, supplemental)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def paragraph(sentence_count = 3, supplemental = false, random_sentences_to_add = 3)
|
35
|
+
sentences(resolve(sentence_count) + rand(random_sentences_to_add.to_i).to_i, supplemental).join(' ')
|
36
|
+
end
|
37
|
+
|
38
|
+
def paragraphs(paragraph_count = 3, supplemental = false)
|
39
|
+
[].tap do |paragraphs|
|
40
|
+
1.upto(resolve(paragraph_count)) do
|
41
|
+
paragraphs << paragraph(3, supplemental)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
# If an array or range is passed, a random value will be selected.
|
49
|
+
# All other values are simply returned.
|
50
|
+
def resolve(value)
|
51
|
+
case value
|
52
|
+
when Array then value[rand(value.size)]
|
53
|
+
when Range then rand((value.last+1) - value.first) + value.first
|
54
|
+
else value
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Faker
|
2
|
+
class IDNumber < Base
|
3
|
+
INVALID_SSN = [
|
4
|
+
/0{3}-\d{2}-\d{4}/,
|
5
|
+
/\d{3}-0{2}-\d{4}/,
|
6
|
+
/\d{3}-\d{2}-0{4}/,
|
7
|
+
/666-\d{2}-\d{4}/,
|
8
|
+
/9\d{2}-\d{2}-\d{4}/
|
9
|
+
]
|
10
|
+
class << self
|
11
|
+
|
12
|
+
def valid
|
13
|
+
_translate 'valid'
|
14
|
+
end
|
15
|
+
|
16
|
+
def invalid
|
17
|
+
_translate 'invalid'
|
18
|
+
end
|
19
|
+
|
20
|
+
def ssn_valid
|
21
|
+
ssn = regexify(/[0-8]\d{2}-\d{2}-\d{4}/)
|
22
|
+
# We could still have all 0s in one segment or another
|
23
|
+
INVALID_SSN.any? { |regex| regex =~ ssn } ? ssn_valid : ssn
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
def _translate key
|
28
|
+
if parse("id_number.#{key}") == ''
|
29
|
+
numerify(fetch("id_number.#{key}"))
|
30
|
+
else
|
31
|
+
parse("id_number.#{key}")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/faker/internet.rb
CHANGED
@@ -15,36 +15,38 @@ module Faker
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def user_name(specifier = nil, separators = %w(. _))
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
18
|
+
I18n.with_locale(:en) do
|
19
|
+
if specifier.kind_of? String
|
20
|
+
return specifier.scan(/\w+/).shuffle.join(separators.sample).downcase
|
21
|
+
elsif specifier.kind_of? Integer
|
22
|
+
tries = 0 # Don't try forever in case we get something like 1_000_000.
|
23
|
+
begin
|
24
|
+
result = user_name nil, separators
|
25
|
+
tries += 1
|
26
|
+
end while result.length < specifier and tries < 7
|
27
|
+
until result.length >= specifier
|
28
|
+
result = result * 2
|
29
|
+
end
|
30
|
+
return result
|
31
|
+
elsif specifier.kind_of? Range
|
32
|
+
tries = 0
|
33
|
+
begin
|
34
|
+
result = user_name specifier.min, separators
|
35
|
+
tries += 1
|
36
|
+
end while not specifier.include? result.length and tries < 7
|
37
|
+
return result[0...specifier.max]
|
28
38
|
end
|
29
|
-
return result
|
30
|
-
elsif specifier.kind_of? Range
|
31
|
-
tries = 0
|
32
|
-
begin
|
33
|
-
result = user_name specifier.min, separators
|
34
|
-
tries += 1
|
35
|
-
end while not specifier.include? result.length and tries < 7
|
36
|
-
return result[0...specifier.max]
|
37
|
-
end
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
40
|
+
[
|
41
|
+
Char.prepare(Name.first_name),
|
42
|
+
[Name.first_name, Name.last_name].map{ |name|
|
43
|
+
Char.prepare name
|
44
|
+
}.join(separators.sample)
|
45
|
+
].sample
|
46
|
+
end
|
45
47
|
end
|
46
48
|
|
47
|
-
def password(min_length = 8, max_length = 16)
|
49
|
+
def password(min_length = 8, max_length = 16, mix_case = true, special_chars = false)
|
48
50
|
temp = Lorem.characters(min_length)
|
49
51
|
diff_length = max_length - min_length
|
50
52
|
if diff_length > 0
|
@@ -52,11 +54,25 @@ module Faker
|
|
52
54
|
temp += Lorem.characters(diff_rand)
|
53
55
|
end
|
54
56
|
temp = temp[0..min_length] if min_length > 0
|
57
|
+
|
58
|
+
if mix_case
|
59
|
+
temp.chars.each_with_index do |char, index|
|
60
|
+
temp[index] = char.upcase if index % 2 == 0
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
if special_chars
|
65
|
+
chars = %w(! @ # $ % ^ & *)
|
66
|
+
Random.rand(min_length).times do |i|
|
67
|
+
temp[i] = chars[Random.rand(chars.length)]
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
55
71
|
return temp
|
56
72
|
end
|
57
73
|
|
58
74
|
def domain_name
|
59
|
-
[Char.prepare(domain_word), domain_suffix].join('.')
|
75
|
+
I18n.with_locale(:en) { [Char.prepare(domain_word), domain_suffix].join('.') }
|
60
76
|
end
|
61
77
|
|
62
78
|
def fix_umlauts(string)
|
@@ -88,12 +104,37 @@ module Faker
|
|
88
104
|
ary.sample].join('.')
|
89
105
|
end
|
90
106
|
|
107
|
+
def public_ip_v4_address
|
108
|
+
private_nets = [
|
109
|
+
/^10\./,
|
110
|
+
/^127\./,
|
111
|
+
/^169\.254\./,
|
112
|
+
/^172\.(16|17|18|19|2\d|30|31)\./,
|
113
|
+
/^192\.168\./
|
114
|
+
]
|
115
|
+
|
116
|
+
is_private = lambda {|addr| private_nets.any?{|net| net =~ addr}}
|
117
|
+
addr = nil
|
118
|
+
begin
|
119
|
+
addr = ip_v4_address
|
120
|
+
end while is_private[addr]
|
121
|
+
addr
|
122
|
+
end
|
123
|
+
|
124
|
+
def ip_v4_cidr
|
125
|
+
"#{ip_v4_address}/#{[1..32].sample}"
|
126
|
+
end
|
127
|
+
|
91
128
|
def ip_v6_address
|
92
129
|
@@ip_v6_space ||= (0..65535).to_a
|
93
130
|
container = (1..8).map{ |_| @@ip_v6_space.sample }
|
94
131
|
container.map{ |n| n.to_s(16) }.join(':')
|
95
132
|
end
|
96
133
|
|
134
|
+
def ip_v6_cidr
|
135
|
+
"#{ip_v6_address}/#{[1..128].sample}"
|
136
|
+
end
|
137
|
+
|
97
138
|
def url(host = domain_name, path = "/#{user_name}")
|
98
139
|
"http://#{host}#{path}"
|
99
140
|
end
|