faker 1.5.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|