ffakerer 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (234) hide show
  1. checksums.yaml +15 -0
  2. data/Changelog.md +154 -0
  3. data/Gemfile +2 -0
  4. data/LICENSE +22 -0
  5. data/README.md +88 -0
  6. data/Rakefile +138 -0
  7. data/ffakerer.gemspec +266 -0
  8. data/lib/ffakerer.rb +31 -0
  9. data/lib/ffakerer/address.rb +99 -0
  10. data/lib/ffakerer/address_au.rb +106 -0
  11. data/lib/ffakerer/address_ca.rb +28 -0
  12. data/lib/ffakerer/address_da.rb +56 -0
  13. data/lib/ffakerer/address_de.rb +42 -0
  14. data/lib/ffakerer/address_mx.rb +505 -0
  15. data/lib/ffakerer/address_se.rb +48 -0
  16. data/lib/ffakerer/address_sn.rb +25 -0
  17. data/lib/ffakerer/address_uk.rb +27 -0
  18. data/lib/ffakerer/address_us.rb +30 -0
  19. data/lib/ffakerer/bacon_ipsum.rb +21 -0
  20. data/lib/ffakerer/company.rb +45 -0
  21. data/lib/ffakerer/company_se.rb +24 -0
  22. data/lib/ffakerer/conference.rb +12 -0
  23. data/lib/ffakerer/data/address/city_suffixes +19 -0
  24. data/lib/ffakerer/data/address/country +242 -0
  25. data/lib/ffakerer/data/address/neighborhood +49 -0
  26. data/lib/ffakerer/data/address/street_suffix +195 -0
  27. data/lib/ffakerer/data/address_ca/province +13 -0
  28. data/lib/ffakerer/data/address_da/city +592 -0
  29. data/lib/ffakerer/data/address_da/kommune +92 -0
  30. data/lib/ffakerer/data/address_da/street +657 -0
  31. data/lib/ffakerer/data/address_de/city +1666 -0
  32. data/lib/ffakerer/data/address_de/state +15 -0
  33. data/lib/ffakerer/data/address_mx/state +32 -0
  34. data/lib/ffakerer/data/address_mx/state_abbr +32 -0
  35. data/lib/ffakerer/data/address_se/city +154 -0
  36. data/lib/ffakerer/data/address_se/countries +250 -0
  37. data/lib/ffakerer/data/address_se/street +2887 -0
  38. data/lib/ffakerer/data/address_sn/arrondissements +47 -0
  39. data/lib/ffakerer/data/address_sn/departements +43 -0
  40. data/lib/ffakerer/data/address_sn/regions +14 -0
  41. data/lib/ffakerer/data/address_uk/uk_county +70 -0
  42. data/lib/ffakerer/data/address_us/state +50 -0
  43. data/lib/ffakerer/data/address_us/state_abbr +51 -0
  44. data/lib/ffakerer/data/address_us/state_and_territories_abbr +62 -0
  45. data/lib/ffakerer/data/bacon_ipsum/bacon_words +60 -0
  46. data/lib/ffakerer/data/company/bs_mid +65 -0
  47. data/lib/ffakerer/data/company/bs_pos +44 -0
  48. data/lib/ffakerer/data/company/bs_pre +60 -0
  49. data/lib/ffakerer/data/company/catch_mid +101 -0
  50. data/lib/ffakerer/data/company/catch_pos +104 -0
  51. data/lib/ffakerer/data/company/catch_pre +100 -0
  52. data/lib/ffakerer/data/company/position_areas +11 -0
  53. data/lib/ffakerer/data/conference/conference_list +40 -0
  54. data/lib/ffakerer/data/dizzle_ipsum/dizzle_words +69 -0
  55. data/lib/ffakerer/data/education/major_noun +13 -0
  56. data/lib/ffakerer/data/education/school_suffix +13 -0
  57. data/lib/ffakerer/data/healthcare_ipsum/healthcare_words +193 -0
  58. data/lib/ffakerer/data/hipster_ipsum/hipster_words +101 -0
  59. data/lib/ffakerer/data/job/job_adj +37 -0
  60. data/lib/ffakerer/data/job/job_noun +25 -0
  61. data/lib/ffakerer/data/job/job_prefix +22 -0
  62. data/lib/ffakerer/data/job_fr/job_nouns +14 -0
  63. data/lib/ffakerer/data/job_fr/job_prefixes +15 -0
  64. data/lib/ffakerer/data/lorem/characters +36 -0
  65. data/lib/ffakerer/data/lorem/words +249 -0
  66. data/lib/ffakerer/data/lorem_ar/words +911 -0
  67. data/lib/ffakerer/data/lorem_cn/words +706 -0
  68. data/lib/ffakerer/data/lorem_fr/words +10379 -0
  69. data/lib/ffakerer/data/movie/adj_and_adv +20 -0
  70. data/lib/ffakerer/data/movie/nouns +36 -0
  71. data/lib/ffakerer/data/movie/prefixes +17 -0
  72. data/lib/ffakerer/data/name/first_names +3008 -0
  73. data/lib/ffakerer/data/name/last_names +475 -0
  74. data/lib/ffakerer/data/name_cn/first_names +1000 -0
  75. data/lib/ffakerer/data/name_cn/last_names +1057 -0
  76. data/lib/ffakerer/data/name_cs/prefixes +16 -0
  77. data/lib/ffakerer/data/name_da/female_first_names +492 -0
  78. data/lib/ffakerer/data/name_da/last_names +187 -0
  79. data/lib/ffakerer/data/name_da/male_first_names +390 -0
  80. data/lib/ffakerer/data/name_de/first_names +1166 -0
  81. data/lib/ffakerer/data/name_de/last_names +100 -0
  82. data/lib/ffakerer/data/name_fr/first_names +220 -0
  83. data/lib/ffakerer/data/name_fr/last_names +408 -0
  84. data/lib/ffakerer/data/name_ga/first_names_female +225 -0
  85. data/lib/ffakerer/data/name_ga/first_names_male +306 -0
  86. data/lib/ffakerer/data/name_ja/first_names +397 -0
  87. data/lib/ffakerer/data/name_ja/last_names +1078 -0
  88. data/lib/ffakerer/data/name_kr/first_names +1317 -0
  89. data/lib/ffakerer/data/name_kr/last_names +197 -0
  90. data/lib/ffakerer/data/name_mx/female_first_names +216 -0
  91. data/lib/ffakerer/data/name_mx/last_names +352 -0
  92. data/lib/ffakerer/data/name_mx/male_first_names +211 -0
  93. data/lib/ffakerer/data/name_ph/autochthonous_surnames +217 -0
  94. data/lib/ffakerer/data/name_ph/spanish_surnames +300 -0
  95. data/lib/ffakerer/data/name_se/first_names_female +110 -0
  96. data/lib/ffakerer/data/name_se/first_names_male +110 -0
  97. data/lib/ffakerer/data/name_se/last_names +100 -0
  98. data/lib/ffakerer/data/name_sn/first_names_female +225 -0
  99. data/lib/ffakerer/data/name_sn/first_names_male +304 -0
  100. data/lib/ffakerer/data/name_sn/last_names +243 -0
  101. data/lib/ffakerer/data/name_vn/first_names +6 -0
  102. data/lib/ffakerer/data/name_vn/last_names +67 -0
  103. data/lib/ffakerer/data/name_vn/middle_names +89 -0
  104. data/lib/ffakerer/data/phone_number_se/phone_prefix +265 -0
  105. data/lib/ffakerer/data/product/adj +19 -0
  106. data/lib/ffakerer/data/product/b1 +19 -0
  107. data/lib/ffakerer/data/product/noun +16 -0
  108. data/lib/ffakerer/data/skill/specialty_end +14 -0
  109. data/lib/ffakerer/data/skill/specialty_start +18 -0
  110. data/lib/ffakerer/data/skill/tech_skills +52 -0
  111. data/lib/ffakerer/data/venue/venue_list +33 -0
  112. data/lib/ffakerer/dizzle_ipsum.rb +21 -0
  113. data/lib/ffakerer/education.rb +48 -0
  114. data/lib/ffakerer/geolocation.rb +50 -0
  115. data/lib/ffakerer/healthcare_ipsum.rb +20 -0
  116. data/lib/ffakerer/hipster_ipsum.rb +21 -0
  117. data/lib/ffakerer/html_ipsum.rb +160 -0
  118. data/lib/ffakerer/identification.rb +27 -0
  119. data/lib/ffakerer/identification_es.rb +15 -0
  120. data/lib/ffakerer/identification_es_cl.rb +26 -0
  121. data/lib/ffakerer/identification_es_co.rb +40 -0
  122. data/lib/ffakerer/internet.rb +72 -0
  123. data/lib/ffakerer/internet_se.rb +106 -0
  124. data/lib/ffakerer/job.rb +12 -0
  125. data/lib/ffakerer/job_fr.rb +14 -0
  126. data/lib/ffakerer/lorem.rb +44 -0
  127. data/lib/ffakerer/lorem_ar.rb +40 -0
  128. data/lib/ffakerer/lorem_cn.rb +41 -0
  129. data/lib/ffakerer/lorem_fr.rb +39 -0
  130. data/lib/ffakerer/movie.rb +63 -0
  131. data/lib/ffakerer/name.rb +35 -0
  132. data/lib/ffakerer/name_cn.rb +24 -0
  133. data/lib/ffakerer/name_cs.rb +90 -0
  134. data/lib/ffakerer/name_da.rb +68 -0
  135. data/lib/ffakerer/name_de.rb +33 -0
  136. data/lib/ffakerer/name_fr.rb +37 -0
  137. data/lib/ffakerer/name_ga.rb +47 -0
  138. data/lib/ffakerer/name_ja.rb +24 -0
  139. data/lib/ffakerer/name_kr.rb +24 -0
  140. data/lib/ffakerer/name_mx.rb +103 -0
  141. data/lib/ffakerer/name_ph.rb +29 -0
  142. data/lib/ffakerer/name_ru.rb +92 -0
  143. data/lib/ffakerer/name_se.rb +47 -0
  144. data/lib/ffakerer/name_sn.rb +65 -0
  145. data/lib/ffakerer/name_vn.rb +28 -0
  146. data/lib/ffakerer/phone_number.rb +34 -0
  147. data/lib/ffakerer/phone_number_au.rb +77 -0
  148. data/lib/ffakerer/phone_number_da.rb +45 -0
  149. data/lib/ffakerer/phone_number_de.rb +51 -0
  150. data/lib/ffakerer/phone_number_mx.rb +58 -0
  151. data/lib/ffakerer/phone_number_se.rb +90 -0
  152. data/lib/ffakerer/phone_number_sg.rb +81 -0
  153. data/lib/ffakerer/phone_number_sn.rb +78 -0
  154. data/lib/ffakerer/product.rb +45 -0
  155. data/lib/ffakerer/skill.rb +24 -0
  156. data/lib/ffakerer/ssn.rb +17 -0
  157. data/lib/ffakerer/ssn_se.rb +109 -0
  158. data/lib/ffakerer/string.rb +92 -0
  159. data/lib/ffakerer/time.rb +30 -0
  160. data/lib/ffakerer/unit.rb +50 -0
  161. data/lib/ffakerer/unit_english.rb +114 -0
  162. data/lib/ffakerer/unit_metric.rb +105 -0
  163. data/lib/ffakerer/utils/array_utils.rb +44 -0
  164. data/lib/ffakerer/utils/module_utils.rb +29 -0
  165. data/lib/ffakerer/venue.rb +12 -0
  166. data/scripts/benchmark.rb +21 -0
  167. data/scripts/profile.sh +2 -0
  168. data/scripts/profiling.rb +7 -0
  169. data/test/helper.rb +2 -0
  170. data/test/test_address.rb +73 -0
  171. data/test/test_address_au.rb +58 -0
  172. data/test/test_address_ca.rb +17 -0
  173. data/test/test_address_de.rb +25 -0
  174. data/test/test_address_mx.rb +26 -0
  175. data/test/test_address_se.rb +36 -0
  176. data/test/test_address_sn.rb +25 -0
  177. data/test/test_address_uk.rb +17 -0
  178. data/test/test_address_us.rb +25 -0
  179. data/test/test_array_utils.rb +52 -0
  180. data/test/test_bacon_ipsum.rb +30 -0
  181. data/test/test_company.rb +23 -0
  182. data/test/test_company_se.rb +14 -0
  183. data/test/test_conference.rb +10 -0
  184. data/test/test_dizzle_ipsum.rb +30 -0
  185. data/test/test_education.rb +34 -0
  186. data/test/test_faker.rb +30 -0
  187. data/test/test_faker_internet.rb +60 -0
  188. data/test/test_faker_internet_se.rb +67 -0
  189. data/test/test_faker_job.rb +14 -0
  190. data/test/test_faker_job_fr.rb +22 -0
  191. data/test/test_faker_name.rb +21 -0
  192. data/test/test_faker_name_cn.rb +13 -0
  193. data/test/test_faker_name_cs.rb +65 -0
  194. data/test/test_faker_name_de.rb +21 -0
  195. data/test/test_faker_name_fr.rb +48 -0
  196. data/test/test_faker_name_ga.rb +56 -0
  197. data/test/test_faker_name_ja.rb +13 -0
  198. data/test/test_faker_name_kr.rb +13 -0
  199. data/test/test_faker_name_mx.rb +180 -0
  200. data/test/test_faker_name_ph.rb +17 -0
  201. data/test/test_faker_name_ru.rb +80 -0
  202. data/test/test_faker_name_se.rb +38 -0
  203. data/test/test_faker_name_sn.rb +98 -0
  204. data/test/test_geolocation.rb +34 -0
  205. data/test/test_healthcare_ipsum.rb +27 -0
  206. data/test/test_hipster_ipsum.rb +29 -0
  207. data/test/test_html_ipsum.rb +91 -0
  208. data/test/test_identification.rb +27 -0
  209. data/test/test_identification_co.rb +38 -0
  210. data/test/test_identification_es.rb +13 -0
  211. data/test/test_identification_es_cl.rb +13 -0
  212. data/test/test_lorem.rb +44 -0
  213. data/test/test_lorem_ar.rb +37 -0
  214. data/test/test_lorem_cn.rb +47 -0
  215. data/test/test_lorem_fr.rb +37 -0
  216. data/test/test_module_utils.rb +14 -0
  217. data/test/test_movie.rb +9 -0
  218. data/test/test_phone_number.rb +13 -0
  219. data/test/test_phone_number_au.rb +50 -0
  220. data/test/test_phone_number_de.rb +46 -0
  221. data/test/test_phone_number_mx.rb +43 -0
  222. data/test/test_phone_number_se.rb +60 -0
  223. data/test/test_phone_number_sg.rb +44 -0
  224. data/test/test_phone_number_sn.rb +34 -0
  225. data/test/test_skill.rb +24 -0
  226. data/test/test_ssn.rb +11 -0
  227. data/test/test_ssn_se.rb +43 -0
  228. data/test/test_string.rb +71 -0
  229. data/test/test_time.rb +19 -0
  230. data/test/test_units.rb +32 -0
  231. data/test/test_units_english.rb +62 -0
  232. data/test/test_units_metric.rb +61 -0
  233. data/test/test_venue.rb +9 -0
  234. 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
@@ -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