ffakerer 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/Changelog.md +154 -0
- data/Gemfile +2 -0
- data/LICENSE +22 -0
- data/README.md +88 -0
- data/Rakefile +138 -0
- data/ffakerer.gemspec +266 -0
- data/lib/ffakerer.rb +31 -0
- data/lib/ffakerer/address.rb +99 -0
- data/lib/ffakerer/address_au.rb +106 -0
- data/lib/ffakerer/address_ca.rb +28 -0
- data/lib/ffakerer/address_da.rb +56 -0
- data/lib/ffakerer/address_de.rb +42 -0
- data/lib/ffakerer/address_mx.rb +505 -0
- data/lib/ffakerer/address_se.rb +48 -0
- data/lib/ffakerer/address_sn.rb +25 -0
- data/lib/ffakerer/address_uk.rb +27 -0
- data/lib/ffakerer/address_us.rb +30 -0
- data/lib/ffakerer/bacon_ipsum.rb +21 -0
- data/lib/ffakerer/company.rb +45 -0
- data/lib/ffakerer/company_se.rb +24 -0
- data/lib/ffakerer/conference.rb +12 -0
- data/lib/ffakerer/data/address/city_suffixes +19 -0
- data/lib/ffakerer/data/address/country +242 -0
- data/lib/ffakerer/data/address/neighborhood +49 -0
- data/lib/ffakerer/data/address/street_suffix +195 -0
- data/lib/ffakerer/data/address_ca/province +13 -0
- data/lib/ffakerer/data/address_da/city +592 -0
- data/lib/ffakerer/data/address_da/kommune +92 -0
- data/lib/ffakerer/data/address_da/street +657 -0
- data/lib/ffakerer/data/address_de/city +1666 -0
- data/lib/ffakerer/data/address_de/state +15 -0
- data/lib/ffakerer/data/address_mx/state +32 -0
- data/lib/ffakerer/data/address_mx/state_abbr +32 -0
- data/lib/ffakerer/data/address_se/city +154 -0
- data/lib/ffakerer/data/address_se/countries +250 -0
- data/lib/ffakerer/data/address_se/street +2887 -0
- data/lib/ffakerer/data/address_sn/arrondissements +47 -0
- data/lib/ffakerer/data/address_sn/departements +43 -0
- data/lib/ffakerer/data/address_sn/regions +14 -0
- data/lib/ffakerer/data/address_uk/uk_county +70 -0
- data/lib/ffakerer/data/address_us/state +50 -0
- data/lib/ffakerer/data/address_us/state_abbr +51 -0
- data/lib/ffakerer/data/address_us/state_and_territories_abbr +62 -0
- data/lib/ffakerer/data/bacon_ipsum/bacon_words +60 -0
- data/lib/ffakerer/data/company/bs_mid +65 -0
- data/lib/ffakerer/data/company/bs_pos +44 -0
- data/lib/ffakerer/data/company/bs_pre +60 -0
- data/lib/ffakerer/data/company/catch_mid +101 -0
- data/lib/ffakerer/data/company/catch_pos +104 -0
- data/lib/ffakerer/data/company/catch_pre +100 -0
- data/lib/ffakerer/data/company/position_areas +11 -0
- data/lib/ffakerer/data/conference/conference_list +40 -0
- data/lib/ffakerer/data/dizzle_ipsum/dizzle_words +69 -0
- data/lib/ffakerer/data/education/major_noun +13 -0
- data/lib/ffakerer/data/education/school_suffix +13 -0
- data/lib/ffakerer/data/healthcare_ipsum/healthcare_words +193 -0
- data/lib/ffakerer/data/hipster_ipsum/hipster_words +101 -0
- data/lib/ffakerer/data/job/job_adj +37 -0
- data/lib/ffakerer/data/job/job_noun +25 -0
- data/lib/ffakerer/data/job/job_prefix +22 -0
- data/lib/ffakerer/data/job_fr/job_nouns +14 -0
- data/lib/ffakerer/data/job_fr/job_prefixes +15 -0
- data/lib/ffakerer/data/lorem/characters +36 -0
- data/lib/ffakerer/data/lorem/words +249 -0
- data/lib/ffakerer/data/lorem_ar/words +911 -0
- data/lib/ffakerer/data/lorem_cn/words +706 -0
- data/lib/ffakerer/data/lorem_fr/words +10379 -0
- data/lib/ffakerer/data/movie/adj_and_adv +20 -0
- data/lib/ffakerer/data/movie/nouns +36 -0
- data/lib/ffakerer/data/movie/prefixes +17 -0
- data/lib/ffakerer/data/name/first_names +3008 -0
- data/lib/ffakerer/data/name/last_names +475 -0
- data/lib/ffakerer/data/name_cn/first_names +1000 -0
- data/lib/ffakerer/data/name_cn/last_names +1057 -0
- data/lib/ffakerer/data/name_cs/prefixes +16 -0
- data/lib/ffakerer/data/name_da/female_first_names +492 -0
- data/lib/ffakerer/data/name_da/last_names +187 -0
- data/lib/ffakerer/data/name_da/male_first_names +390 -0
- data/lib/ffakerer/data/name_de/first_names +1166 -0
- data/lib/ffakerer/data/name_de/last_names +100 -0
- data/lib/ffakerer/data/name_fr/first_names +220 -0
- data/lib/ffakerer/data/name_fr/last_names +408 -0
- data/lib/ffakerer/data/name_ga/first_names_female +225 -0
- data/lib/ffakerer/data/name_ga/first_names_male +306 -0
- data/lib/ffakerer/data/name_ja/first_names +397 -0
- data/lib/ffakerer/data/name_ja/last_names +1078 -0
- data/lib/ffakerer/data/name_kr/first_names +1317 -0
- data/lib/ffakerer/data/name_kr/last_names +197 -0
- data/lib/ffakerer/data/name_mx/female_first_names +216 -0
- data/lib/ffakerer/data/name_mx/last_names +352 -0
- data/lib/ffakerer/data/name_mx/male_first_names +211 -0
- data/lib/ffakerer/data/name_ph/autochthonous_surnames +217 -0
- data/lib/ffakerer/data/name_ph/spanish_surnames +300 -0
- data/lib/ffakerer/data/name_se/first_names_female +110 -0
- data/lib/ffakerer/data/name_se/first_names_male +110 -0
- data/lib/ffakerer/data/name_se/last_names +100 -0
- data/lib/ffakerer/data/name_sn/first_names_female +225 -0
- data/lib/ffakerer/data/name_sn/first_names_male +304 -0
- data/lib/ffakerer/data/name_sn/last_names +243 -0
- data/lib/ffakerer/data/name_vn/first_names +6 -0
- data/lib/ffakerer/data/name_vn/last_names +67 -0
- data/lib/ffakerer/data/name_vn/middle_names +89 -0
- data/lib/ffakerer/data/phone_number_se/phone_prefix +265 -0
- data/lib/ffakerer/data/product/adj +19 -0
- data/lib/ffakerer/data/product/b1 +19 -0
- data/lib/ffakerer/data/product/noun +16 -0
- data/lib/ffakerer/data/skill/specialty_end +14 -0
- data/lib/ffakerer/data/skill/specialty_start +18 -0
- data/lib/ffakerer/data/skill/tech_skills +52 -0
- data/lib/ffakerer/data/venue/venue_list +33 -0
- data/lib/ffakerer/dizzle_ipsum.rb +21 -0
- data/lib/ffakerer/education.rb +48 -0
- data/lib/ffakerer/geolocation.rb +50 -0
- data/lib/ffakerer/healthcare_ipsum.rb +20 -0
- data/lib/ffakerer/hipster_ipsum.rb +21 -0
- data/lib/ffakerer/html_ipsum.rb +160 -0
- data/lib/ffakerer/identification.rb +27 -0
- data/lib/ffakerer/identification_es.rb +15 -0
- data/lib/ffakerer/identification_es_cl.rb +26 -0
- data/lib/ffakerer/identification_es_co.rb +40 -0
- data/lib/ffakerer/internet.rb +72 -0
- data/lib/ffakerer/internet_se.rb +106 -0
- data/lib/ffakerer/job.rb +12 -0
- data/lib/ffakerer/job_fr.rb +14 -0
- data/lib/ffakerer/lorem.rb +44 -0
- data/lib/ffakerer/lorem_ar.rb +40 -0
- data/lib/ffakerer/lorem_cn.rb +41 -0
- data/lib/ffakerer/lorem_fr.rb +39 -0
- data/lib/ffakerer/movie.rb +63 -0
- data/lib/ffakerer/name.rb +35 -0
- data/lib/ffakerer/name_cn.rb +24 -0
- data/lib/ffakerer/name_cs.rb +90 -0
- data/lib/ffakerer/name_da.rb +68 -0
- data/lib/ffakerer/name_de.rb +33 -0
- data/lib/ffakerer/name_fr.rb +37 -0
- data/lib/ffakerer/name_ga.rb +47 -0
- data/lib/ffakerer/name_ja.rb +24 -0
- data/lib/ffakerer/name_kr.rb +24 -0
- data/lib/ffakerer/name_mx.rb +103 -0
- data/lib/ffakerer/name_ph.rb +29 -0
- data/lib/ffakerer/name_ru.rb +92 -0
- data/lib/ffakerer/name_se.rb +47 -0
- data/lib/ffakerer/name_sn.rb +65 -0
- data/lib/ffakerer/name_vn.rb +28 -0
- data/lib/ffakerer/phone_number.rb +34 -0
- data/lib/ffakerer/phone_number_au.rb +77 -0
- data/lib/ffakerer/phone_number_da.rb +45 -0
- data/lib/ffakerer/phone_number_de.rb +51 -0
- data/lib/ffakerer/phone_number_mx.rb +58 -0
- data/lib/ffakerer/phone_number_se.rb +90 -0
- data/lib/ffakerer/phone_number_sg.rb +81 -0
- data/lib/ffakerer/phone_number_sn.rb +78 -0
- data/lib/ffakerer/product.rb +45 -0
- data/lib/ffakerer/skill.rb +24 -0
- data/lib/ffakerer/ssn.rb +17 -0
- data/lib/ffakerer/ssn_se.rb +109 -0
- data/lib/ffakerer/string.rb +92 -0
- data/lib/ffakerer/time.rb +30 -0
- data/lib/ffakerer/unit.rb +50 -0
- data/lib/ffakerer/unit_english.rb +114 -0
- data/lib/ffakerer/unit_metric.rb +105 -0
- data/lib/ffakerer/utils/array_utils.rb +44 -0
- data/lib/ffakerer/utils/module_utils.rb +29 -0
- data/lib/ffakerer/venue.rb +12 -0
- data/scripts/benchmark.rb +21 -0
- data/scripts/profile.sh +2 -0
- data/scripts/profiling.rb +7 -0
- data/test/helper.rb +2 -0
- data/test/test_address.rb +73 -0
- data/test/test_address_au.rb +58 -0
- data/test/test_address_ca.rb +17 -0
- data/test/test_address_de.rb +25 -0
- data/test/test_address_mx.rb +26 -0
- data/test/test_address_se.rb +36 -0
- data/test/test_address_sn.rb +25 -0
- data/test/test_address_uk.rb +17 -0
- data/test/test_address_us.rb +25 -0
- data/test/test_array_utils.rb +52 -0
- data/test/test_bacon_ipsum.rb +30 -0
- data/test/test_company.rb +23 -0
- data/test/test_company_se.rb +14 -0
- data/test/test_conference.rb +10 -0
- data/test/test_dizzle_ipsum.rb +30 -0
- data/test/test_education.rb +34 -0
- data/test/test_faker.rb +30 -0
- data/test/test_faker_internet.rb +60 -0
- data/test/test_faker_internet_se.rb +67 -0
- data/test/test_faker_job.rb +14 -0
- data/test/test_faker_job_fr.rb +22 -0
- data/test/test_faker_name.rb +21 -0
- data/test/test_faker_name_cn.rb +13 -0
- data/test/test_faker_name_cs.rb +65 -0
- data/test/test_faker_name_de.rb +21 -0
- data/test/test_faker_name_fr.rb +48 -0
- data/test/test_faker_name_ga.rb +56 -0
- data/test/test_faker_name_ja.rb +13 -0
- data/test/test_faker_name_kr.rb +13 -0
- data/test/test_faker_name_mx.rb +180 -0
- data/test/test_faker_name_ph.rb +17 -0
- data/test/test_faker_name_ru.rb +80 -0
- data/test/test_faker_name_se.rb +38 -0
- data/test/test_faker_name_sn.rb +98 -0
- data/test/test_geolocation.rb +34 -0
- data/test/test_healthcare_ipsum.rb +27 -0
- data/test/test_hipster_ipsum.rb +29 -0
- data/test/test_html_ipsum.rb +91 -0
- data/test/test_identification.rb +27 -0
- data/test/test_identification_co.rb +38 -0
- data/test/test_identification_es.rb +13 -0
- data/test/test_identification_es_cl.rb +13 -0
- data/test/test_lorem.rb +44 -0
- data/test/test_lorem_ar.rb +37 -0
- data/test/test_lorem_cn.rb +47 -0
- data/test/test_lorem_fr.rb +37 -0
- data/test/test_module_utils.rb +14 -0
- data/test/test_movie.rb +9 -0
- data/test/test_phone_number.rb +13 -0
- data/test/test_phone_number_au.rb +50 -0
- data/test/test_phone_number_de.rb +46 -0
- data/test/test_phone_number_mx.rb +43 -0
- data/test/test_phone_number_se.rb +60 -0
- data/test/test_phone_number_sg.rb +44 -0
- data/test/test_phone_number_sn.rb +34 -0
- data/test/test_skill.rb +24 -0
- data/test/test_ssn.rb +11 -0
- data/test/test_ssn_se.rb +43 -0
- data/test/test_string.rb +71 -0
- data/test/test_time.rb +19 -0
- data/test/test_units.rb +32 -0
- data/test/test_units_english.rb +62 -0
- data/test/test_units_metric.rb +61 -0
- data/test/test_venue.rb +9 -0
- metadata +372 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Faker
|
4
|
+
module Product
|
5
|
+
extend ModuleUtils
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def brand
|
9
|
+
case rand(12)
|
10
|
+
when (0..4) then B1.rand + B2.rand
|
11
|
+
when (5..10) then "#{START.rand}#{VOWELS.rand}#{SUFFIX.rand}#{ADDON.rand if rand(2)==0}".capitalize
|
12
|
+
when 11 then "#{letters(2..3)}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def product_name
|
17
|
+
case rand(2)
|
18
|
+
when 0 then "#{ADJ.rand} #{NOUN.rand}"
|
19
|
+
when 1 then "#{[ADJ.rand, ADJ.rand].uniq.join(" ")} #{NOUN.rand}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def product
|
24
|
+
"#{brand} #{product_name}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def letters(n)
|
28
|
+
max = n.is_a?(Range) ? n.to_a.shuffle.first : n
|
29
|
+
(0...max).map { LETTERS.rand.upcase }.join
|
30
|
+
end
|
31
|
+
|
32
|
+
def model
|
33
|
+
case rand(2)
|
34
|
+
when 0 then "#{LETTERS.rand.upcase}#{rand(90)}" # N90
|
35
|
+
when 1 then "#{letters(1..rand(1..2))}-#{rand(9900)}" # N-9400
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
B2 = k %w(nix cell sync func balt sche pod)
|
40
|
+
VOWELS = k %w(a e i o u ou ie y io)
|
41
|
+
START = k %w(tr br p ph)
|
42
|
+
SUFFIX = k %w(ck ns nce nt st ne re ffe ph)
|
43
|
+
ADDON = k %w(wood forge func)
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Faker
|
4
|
+
module Skill
|
5
|
+
extend ModuleUtils
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def tech_skill
|
9
|
+
TECH_SKILLS.rand
|
10
|
+
end
|
11
|
+
|
12
|
+
def tech_skills(num = 3)
|
13
|
+
TECH_SKILLS.random_pick(num)
|
14
|
+
end
|
15
|
+
|
16
|
+
def specialty
|
17
|
+
"%s %s" % [SPECIALTY_START.rand, SPECIALTY_END.rand]
|
18
|
+
end
|
19
|
+
|
20
|
+
def specialties(num = 3)
|
21
|
+
(1..num).map { specialty }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/ffakerer/ssn.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Faker
|
4
|
+
module SSN
|
5
|
+
extend ModuleUtils
|
6
|
+
extend self
|
7
|
+
|
8
|
+
# The Social Security number is a nine-digit number in the format
|
9
|
+
# "AAA-GG-SSSS". More info here:
|
10
|
+
#
|
11
|
+
# http://en.wikipedia.org/wiki/Social_Security_number
|
12
|
+
#
|
13
|
+
def ssn
|
14
|
+
Faker.numerify('###-##-####')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'date'
|
4
|
+
|
5
|
+
module Faker
|
6
|
+
|
7
|
+
# The Social Security number is a 12-digit number in the format:
|
8
|
+
# "YYYYDDMM-XXXX'
|
9
|
+
#
|
10
|
+
# http://sv.wikipedia.org/wiki/Personnummer_i_Sverige
|
11
|
+
#
|
12
|
+
# The 4 last digits (XXXX) are generated based on what region the person are
|
13
|
+
# born # in, the gender and the last one is a check digit using the luhn
|
14
|
+
# algorithm.
|
15
|
+
#
|
16
|
+
# http://en.wikipedia.org/wiki/Luhn_algorithm
|
17
|
+
#
|
18
|
+
# Usage:
|
19
|
+
# ssn(from: Time.local(1980, 2, 28),
|
20
|
+
# to: Time.local(2000, 2, 28),
|
21
|
+
# gender: :male)
|
22
|
+
#
|
23
|
+
module SSNSE
|
24
|
+
extend ModuleUtils
|
25
|
+
extend self
|
26
|
+
|
27
|
+
def ssn(opts = {})
|
28
|
+
from = opts[:from] || ::Time.local(1940, 1, 1)
|
29
|
+
to = opts[:to] || ::Time.now
|
30
|
+
gender = (opts[:gender] || GENDERS.rand).to_s
|
31
|
+
|
32
|
+
raise_error_on_bad_arguments(from, to, gender)
|
33
|
+
|
34
|
+
generate_ssn(from, to, gender)
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def generate_ssn(from, to, gender)
|
40
|
+
birth_date = random_birth_time_between(from, to)
|
41
|
+
birth_date_str = birth_date.strftime("%Y%m%d") # "19800228"
|
42
|
+
region = get_random_region_for(gender) # "413"
|
43
|
+
ssn_without_check_digit = birth_date_str + region # "19800228413"
|
44
|
+
check_digit = luhn_check(ssn_without_check_digit) # "9"
|
45
|
+
ssn_without_check_digit + check_digit # "198002284139"
|
46
|
+
end
|
47
|
+
|
48
|
+
def raise_error_on_bad_arguments(from, to, gender)
|
49
|
+
raise ArgumentError, "Invalid from argument: from" unless to.is_a? ::Time
|
50
|
+
raise ArgumentError, "Invalid from argument: from" unless from.is_a? ::Time
|
51
|
+
raise ArgumentError, "Invalid argument: from > to" if from > to
|
52
|
+
raise ArgumentError, "Invalid argument: gender" unless GENDERS.include?(gender.to_s)
|
53
|
+
end
|
54
|
+
|
55
|
+
GENDERS = k ["female", "male"]
|
56
|
+
|
57
|
+
def random_birth_time_between(from=::Time.local(1940, 1, 1), to=::Time.now)
|
58
|
+
::Time.at(from + rand * (to.to_f - from.to_f))
|
59
|
+
end
|
60
|
+
|
61
|
+
def get_random_region_for(gender)
|
62
|
+
region_number = case gender
|
63
|
+
when "female" then get_random_region_even
|
64
|
+
when "male" then get_random_region_odd
|
65
|
+
end
|
66
|
+
three_character_string(region_number)
|
67
|
+
end
|
68
|
+
|
69
|
+
def get_random_region_even
|
70
|
+
rand(499) * 2
|
71
|
+
end
|
72
|
+
|
73
|
+
def get_random_region_odd
|
74
|
+
rand(499) * 2 + 1
|
75
|
+
end
|
76
|
+
|
77
|
+
def three_character_string(number)
|
78
|
+
"%03d" % number
|
79
|
+
end
|
80
|
+
|
81
|
+
# http://en.wikipedia.org/wiki/Luhn_algorithm
|
82
|
+
def luhn_check(number)
|
83
|
+
multiplications = []
|
84
|
+
|
85
|
+
number.split(//).each_with_index do |digit, i|
|
86
|
+
if i % 2 == 0
|
87
|
+
multiplications << digit.to_i * 2
|
88
|
+
else
|
89
|
+
multiplications << digit.to_i
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
sum = 0
|
94
|
+
multiplications.each do |num|
|
95
|
+
num.to_s.each_byte do |character|
|
96
|
+
sum += character.chr.to_i
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
if sum % 10 == 0
|
101
|
+
control_digit = 0
|
102
|
+
else
|
103
|
+
control_digit = (sum / 10 + 1) * 10 - sum
|
104
|
+
end
|
105
|
+
|
106
|
+
control_digit.to_s
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Faker
|
4
|
+
module String
|
5
|
+
extend ModuleUtils
|
6
|
+
extend self
|
7
|
+
|
8
|
+
BACKSLASH = '\\'
|
9
|
+
|
10
|
+
LOWERS = k(('a'..'z').to_a)
|
11
|
+
UPPERS = k(('A'..'Z').to_a)
|
12
|
+
LETTERS = k(LOWERS + UPPERS)
|
13
|
+
NUMBERS = k(('0'..'9').to_a)
|
14
|
+
WORD_CHARS = k(LETTERS + NUMBERS + ['_'])
|
15
|
+
SPACES = k([" ", "\t"])
|
16
|
+
ESCAPEABLE_CHARS = '\\', '/', '.', '(', ')', '[', ']', '{', '}'
|
17
|
+
|
18
|
+
def from_regexp(exp)
|
19
|
+
result = ''
|
20
|
+
@last_token = nil
|
21
|
+
|
22
|
+
# Drop surrounding /'s and split into characters
|
23
|
+
tokens = exp.inspect[1...-1].split(//)
|
24
|
+
until tokens.empty?
|
25
|
+
result << process_token(tokens)
|
26
|
+
end
|
27
|
+
|
28
|
+
result
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def join_escapes(tokens)
|
34
|
+
result = []
|
35
|
+
while tokens.any?
|
36
|
+
token = tokens.shift
|
37
|
+
token << tokens.shift if token == BACKSLASH
|
38
|
+
result << token
|
39
|
+
end
|
40
|
+
result
|
41
|
+
end
|
42
|
+
|
43
|
+
def process_token(tokens)
|
44
|
+
return '' if tokens.empty?
|
45
|
+
|
46
|
+
token = tokens.shift
|
47
|
+
|
48
|
+
case token
|
49
|
+
when '?' then
|
50
|
+
# TODO: Let ? generate nothong
|
51
|
+
return '' # We already printed its target
|
52
|
+
when '+' then
|
53
|
+
tokens.unshift(token) if rand(2) == 1 # Leave the `+` on to run again
|
54
|
+
return process_token(@last_token) # Run the last one at least once
|
55
|
+
when '*' then
|
56
|
+
tokens.unshift(token) if rand(2) == 1 # Leave the `*` on to run again
|
57
|
+
return '' if rand(2) == 1 # Or maybe do nothing
|
58
|
+
return process_token(@last_token) # Else run the last one again
|
59
|
+
end
|
60
|
+
|
61
|
+
generate_token token, tokens
|
62
|
+
end
|
63
|
+
|
64
|
+
def generate_token(token, tokens)
|
65
|
+
case token
|
66
|
+
when /\w/ then
|
67
|
+
@last_token = [token]
|
68
|
+
token
|
69
|
+
when BACKSLASH then
|
70
|
+
token = tokens.shift
|
71
|
+
@last_token = ['\\', token]
|
72
|
+
special(token)
|
73
|
+
when '[' then
|
74
|
+
set = []
|
75
|
+
while (ch = tokens.shift) != ']'
|
76
|
+
set << ch
|
77
|
+
end
|
78
|
+
@last_token = ['['] + set + [']']
|
79
|
+
process_token([ArrayUtils.rand(join_escapes(set))])
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def special(token)
|
84
|
+
case token
|
85
|
+
when 'w' then WORD_CHARS.rand
|
86
|
+
when 'd' then NUMBERS.rand
|
87
|
+
when 's' then SPACES.rand
|
88
|
+
when *ESCAPEABLE_CHARS then token
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Faker
|
4
|
+
module Time
|
5
|
+
extend ModuleUtils
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def month
|
9
|
+
MONTHS.rand
|
10
|
+
end
|
11
|
+
|
12
|
+
def date(params={})
|
13
|
+
years_back = params[:year_range] || 5
|
14
|
+
latest_year = params [:year_latest] || 0
|
15
|
+
year = (rand * (years_back)).ceil + (::Time.now.year - latest_year - years_back)
|
16
|
+
month = (rand * 12).ceil
|
17
|
+
day = (rand * 31).ceil
|
18
|
+
series = [date = ::Time.local(year, month, day)]
|
19
|
+
if params[:series]
|
20
|
+
params[:series].each do |some_time_after|
|
21
|
+
series << series.last + (rand * some_time_after).ceil
|
22
|
+
end
|
23
|
+
return series
|
24
|
+
end
|
25
|
+
date.strftime "%Y-%m-%d %T %z"
|
26
|
+
end
|
27
|
+
|
28
|
+
MONTHS = k %w(January February March April May June July August September October November December)
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'ostruct'
|
4
|
+
|
5
|
+
module Faker
|
6
|
+
module Unit
|
7
|
+
extend ModuleUtils
|
8
|
+
extend self
|
9
|
+
|
10
|
+
def time_name
|
11
|
+
time.name
|
12
|
+
end
|
13
|
+
|
14
|
+
def time_abbr
|
15
|
+
time.abbreviation
|
16
|
+
end
|
17
|
+
|
18
|
+
def temperature_name
|
19
|
+
temperature.name
|
20
|
+
end
|
21
|
+
|
22
|
+
def temperature_abbr
|
23
|
+
temperature.abbreviation
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def time
|
29
|
+
OpenStruct.new TIME_UNITS.rand
|
30
|
+
end
|
31
|
+
|
32
|
+
def temperature
|
33
|
+
OpenStruct.new TEMPERATURE_UNITS.rand
|
34
|
+
end
|
35
|
+
|
36
|
+
TIME_UNITS = k [
|
37
|
+
{:name => 'Years', :abbreviation => 'yr'},
|
38
|
+
{:name => 'Days', :abbreviation => 'd'},
|
39
|
+
{:name => 'Hours', :abbreviation => 'Minutes'},
|
40
|
+
{:name => 'Seconds', :abbreviation => 's'},
|
41
|
+
{:name => 'Milliseconds', :abbreviation => 'msec'}
|
42
|
+
]
|
43
|
+
|
44
|
+
TEMPERATURE_UNITS = k [
|
45
|
+
{:name => 'Kelvin', :abbreviation => 'K'},
|
46
|
+
{:name => 'Celsius', :abbreviation => 'C'},
|
47
|
+
{:name => 'Fahrenheit', :abbreviation => 'F'}
|
48
|
+
]
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'ffakerer/unit'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
module Faker
|
7
|
+
module UnitEnglish
|
8
|
+
include Faker::Unit
|
9
|
+
|
10
|
+
extend ModuleUtils
|
11
|
+
extend self
|
12
|
+
|
13
|
+
def mass_name
|
14
|
+
mass.name
|
15
|
+
end
|
16
|
+
|
17
|
+
def mass_abbr
|
18
|
+
mass.abbreviation
|
19
|
+
end
|
20
|
+
|
21
|
+
def length_name
|
22
|
+
length.name
|
23
|
+
end
|
24
|
+
|
25
|
+
def length_abbr
|
26
|
+
length.abbreviation
|
27
|
+
end
|
28
|
+
|
29
|
+
def liquid_name
|
30
|
+
liquid.name
|
31
|
+
end
|
32
|
+
|
33
|
+
def liquid_abbr
|
34
|
+
liquid.abbreviation
|
35
|
+
end
|
36
|
+
|
37
|
+
def volume_name
|
38
|
+
volume.name
|
39
|
+
end
|
40
|
+
|
41
|
+
def volume_abbr
|
42
|
+
volume.abbreviation
|
43
|
+
end
|
44
|
+
|
45
|
+
def area_name
|
46
|
+
area.name
|
47
|
+
end
|
48
|
+
|
49
|
+
def area_abbr
|
50
|
+
area.abbreviation
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def length
|
56
|
+
OpenStruct.new LENGTH_UNITS.rand
|
57
|
+
end
|
58
|
+
|
59
|
+
def mass
|
60
|
+
OpenStruct.new MASS_UNITS.rand
|
61
|
+
end
|
62
|
+
|
63
|
+
def liquid
|
64
|
+
OpenStruct.new LIQUID_UNITS.rand
|
65
|
+
end
|
66
|
+
|
67
|
+
def volume
|
68
|
+
OpenStruct.new VOLUME_UNITS.rand
|
69
|
+
end
|
70
|
+
|
71
|
+
def area
|
72
|
+
OpenStruct.new AREA_UNITS.rand
|
73
|
+
end
|
74
|
+
|
75
|
+
LENGTH_UNITS = k [
|
76
|
+
{ :name =>"inch", :abbreviation => "in"},
|
77
|
+
{ :name =>"foot", :abbreviation => "ft"},
|
78
|
+
{ :name =>"yard", :abbreviation => "yd"},
|
79
|
+
{ :name =>"furlong", :abbreviation => "fur"},
|
80
|
+
{ :name =>"mile", :abbreviation => "m"}
|
81
|
+
]
|
82
|
+
|
83
|
+
MASS_UNITS = k [
|
84
|
+
{ :name => "grains", :abbreviation => "gr"},
|
85
|
+
{ :name => "ounces", :abbreviation => "oz"},
|
86
|
+
{ :name => "pounds", :abbreviation => "lb" },
|
87
|
+
{ :name => "hundredweight", :abbreviation => "cwt"},
|
88
|
+
{ :name => "ton", :abbreviation => "t" }
|
89
|
+
]
|
90
|
+
|
91
|
+
LIQUID_UNITS = k [
|
92
|
+
{ :name => "fluid ounce", :abbreviation => "fl oz"},
|
93
|
+
{ :name => "gill", :abbreviation => "gi"},
|
94
|
+
{ :name => "pint", :abbreviation => "pt"},
|
95
|
+
{ :name => "quart", :abbreviation => "qt"}
|
96
|
+
]
|
97
|
+
|
98
|
+
VOLUME_UNITS = k [
|
99
|
+
{ :name =>"cubic inch", :abbreviation => "CI"},
|
100
|
+
{ :name =>"cubic foot", :abbreviation => "CFT"},
|
101
|
+
{ :name =>"cubic yard", :abbreviation => "CY"}
|
102
|
+
]
|
103
|
+
|
104
|
+
AREA_UNITS = k [
|
105
|
+
{ :name =>"square inch", :abbreviation => "sq. in"},
|
106
|
+
{ :name =>"square foot", :abbreviation => "sq ft"},
|
107
|
+
{ :name =>"square yard", :abbreviation => "sq yd"},
|
108
|
+
{ :name =>"acre", :abbreviation => "ac"},
|
109
|
+
{ :name =>"section", :abbreviation => "s"},
|
110
|
+
{ :name =>"square mile", :abbreviation => "sq mi"},
|
111
|
+
{ :name =>"township", :abbreviation => "Twp"}
|
112
|
+
]
|
113
|
+
end
|
114
|
+
end
|