ffaker 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (320) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +34 -0
  3. data/README.md +4 -0
  4. data/REFERENCE.md +1153 -800
  5. data/Rakefile +23 -24
  6. data/ffaker.gemspec +12 -420
  7. data/lib/ffaker.rb +47 -7
  8. data/lib/ffaker/address.rb +11 -11
  9. data/lib/ffaker/address_au.rb +60 -60
  10. data/lib/ffaker/address_br.rb +5 -5
  11. data/lib/ffaker/address_ca.rb +7 -7
  12. data/lib/ffaker/address_ch.rb +1 -2
  13. data/lib/ffaker/address_ch_de.rb +1 -1
  14. data/lib/ffaker/address_ch_fr.rb +1 -1
  15. data/lib/ffaker/address_ch_it.rb +1 -1
  16. data/lib/ffaker/address_da.rb +5 -5
  17. data/lib/ffaker/address_de.rb +16 -12
  18. data/lib/ffaker/address_fi.rb +7 -8
  19. data/lib/ffaker/address_fr.rb +13 -13
  20. data/lib/ffaker/address_gr.rb +40 -0
  21. data/lib/ffaker/address_in.rb +12 -12
  22. data/lib/ffaker/address_kr.rb +87 -0
  23. data/lib/ffaker/address_mx.rb +409 -409
  24. data/lib/ffaker/address_nl.rb +17 -13
  25. data/lib/ffaker/address_ru.rb +6 -6
  26. data/lib/ffaker/address_se.rb +7 -8
  27. data/lib/ffaker/address_sn.rb +3 -3
  28. data/lib/ffaker/address_ua.rb +8 -8
  29. data/lib/ffaker/address_uk.rb +5 -5
  30. data/lib/ffaker/address_us.rb +9 -9
  31. data/lib/ffaker/airline.rb +16 -0
  32. data/lib/ffaker/avatar.rb +3 -3
  33. data/lib/ffaker/aws.rb +24 -0
  34. data/lib/ffaker/bacon_ipsum.rb +2 -2
  35. data/lib/ffaker/book.rb +45 -0
  36. data/lib/ffaker/boolean.rb +2 -2
  37. data/lib/ffaker/cheesy_lingo.rb +15 -12
  38. data/lib/ffaker/color.rb +54 -1
  39. data/lib/ffaker/color_ua.rb +1 -1
  40. data/lib/ffaker/company.rb +13 -11
  41. data/lib/ffaker/company_cn.rb +23 -0
  42. data/lib/ffaker/company_it.rb +4 -4
  43. data/lib/ffaker/company_se.rb +2 -2
  44. data/lib/ffaker/conference.rb +1 -1
  45. data/lib/ffaker/courses.rb +2 -3
  46. data/lib/ffaker/currency.rb +2 -2
  47. data/lib/ffaker/data/address_gr/city +79 -0
  48. data/lib/ffaker/data/address_gr/region +13 -0
  49. data/lib/ffaker/data/address_gr/street +100 -0
  50. data/lib/ffaker/data/address_kr/boroughs +29 -0
  51. data/lib/ffaker/data/address_kr/cities +51 -0
  52. data/lib/ffaker/data/airline/codes_list +209 -0
  53. data/lib/ffaker/data/airline/names_list +206 -0
  54. data/lib/ffaker/data/aws/ec2_instance_type +59 -0
  55. data/lib/ffaker/data/aws/ec2_reserved_instance_tenancy +3 -0
  56. data/lib/ffaker/data/aws/ec2_reserved_offering_type +6 -0
  57. data/lib/ffaker/data/aws/ec2_reserved_product_description +14 -0
  58. data/lib/ffaker/data/book/adj_and_adv +20 -0
  59. data/lib/ffaker/data/book/genres +369 -0
  60. data/lib/ffaker/data/book/nouns +36 -0
  61. data/lib/ffaker/data/book/prefixes +17 -0
  62. data/lib/ffaker/data/color/names_list +128 -0
  63. data/lib/ffaker/data/education/degree_prefix +274 -0
  64. data/lib/ffaker/data/education/degree_short_prefix +19 -0
  65. data/lib/ffaker/data/job_br/job_nouns +52 -0
  66. data/lib/ffaker/data/job_vn/job_nouns +191 -0
  67. data/lib/ffaker/data/lorem_ja/characters +101 -0
  68. data/lib/ffaker/data/lorem_ja/sentences +30 -0
  69. data/lib/ffaker/data/lorem_ja/sentences_end +21 -0
  70. data/lib/ffaker/data/lorem_ja/words +81 -0
  71. data/lib/ffaker/data/name/first_names_female +4275 -0
  72. data/lib/ffaker/data/name/first_names_male +1219 -0
  73. data/lib/ffaker/data/name_br/first_names_female +1068 -0
  74. data/lib/ffaker/data/name_br/first_names_male +607 -0
  75. data/lib/ffaker/data/name_br/last_names +52 -0
  76. data/lib/ffaker/data/name_gr/female_first_names +80 -0
  77. data/lib/ffaker/data/name_gr/female_last_names +45 -0
  78. data/lib/ffaker/data/name_gr/male_first_names +90 -0
  79. data/lib/ffaker/data/name_gr/male_last_names +57 -0
  80. data/lib/ffaker/data/name_kh/first_names +64 -0
  81. data/lib/ffaker/data/name_kh/last_names +71 -0
  82. data/lib/ffaker/data/name_kh/nick_names +30 -0
  83. data/lib/ffaker/data/name_then/first_names +292 -0
  84. data/lib/ffaker/data/name_then/last_names +63 -0
  85. data/lib/ffaker/data/name_then/nick_names +30 -0
  86. data/lib/ffaker/data/phone_number/phone_calling_code +205 -0
  87. data/lib/ffaker/data/sport/names +57 -24
  88. data/lib/ffaker/data/tweet/hashtag +58 -0
  89. data/lib/ffaker/data/youtube/video_ids +50 -0
  90. data/lib/ffaker/dizzle_ipsum.rb +2 -2
  91. data/lib/ffaker/education.rb +17 -16
  92. data/lib/ffaker/food.rb +5 -6
  93. data/lib/ffaker/gender.rb +4 -4
  94. data/lib/ffaker/gender_br.rb +17 -0
  95. data/lib/ffaker/gender_cn.rb +4 -4
  96. data/lib/ffaker/gender_kr.rb +4 -4
  97. data/lib/ffaker/geolocation.rb +26 -26
  98. data/lib/ffaker/healthcare_ipsum.rb +2 -2
  99. data/lib/ffaker/hipster_ipsum.rb +2 -2
  100. data/lib/ffaker/html_ipsum.rb +101 -81
  101. data/lib/ffaker/identification.rb +4 -4
  102. data/lib/ffaker/identification_br.rb +84 -0
  103. data/lib/ffaker/identification_es.rb +2 -2
  104. data/lib/ffaker/identification_es_cl.rb +7 -5
  105. data/lib/ffaker/identification_es_co.rb +9 -10
  106. data/lib/ffaker/identification_kr.rb +3 -4
  107. data/lib/ffaker/identification_mx.rb +27 -11
  108. data/lib/ffaker/internet.rb +26 -23
  109. data/lib/ffaker/internet_se.rb +21 -21
  110. data/lib/ffaker/job.rb +1 -1
  111. data/lib/ffaker/job_br.rb +12 -0
  112. data/lib/ffaker/job_cn.rb +1 -1
  113. data/lib/ffaker/job_fr.rb +3 -3
  114. data/lib/ffaker/job_ja.rb +2 -1
  115. data/lib/ffaker/job_kr.rb +1 -1
  116. data/lib/ffaker/job_vn.rb +13 -0
  117. data/lib/ffaker/locale.rb +2 -3
  118. data/lib/ffaker/lorem.rb +5 -5
  119. data/lib/ffaker/lorem_ar.rb +4 -4
  120. data/lib/ffaker/lorem_cn.rb +3 -3
  121. data/lib/ffaker/lorem_fr.rb +4 -4
  122. data/lib/ffaker/lorem_ja.rb +40 -0
  123. data/lib/ffaker/lorem_kr.rb +4 -4
  124. data/lib/ffaker/lorem_ua.rb +8 -11
  125. data/lib/ffaker/movie.rb +18 -20
  126. data/lib/ffaker/music.rb +4 -4
  127. data/lib/ffaker/name.rb +100 -11
  128. data/lib/ffaker/name_br.rb +37 -6
  129. data/lib/ffaker/name_cn.rb +2 -2
  130. data/lib/ffaker/name_cs.rb +10 -10
  131. data/lib/ffaker/name_da.rb +6 -6
  132. data/lib/ffaker/name_de.rb +5 -5
  133. data/lib/ffaker/name_fr.rb +4 -4
  134. data/lib/ffaker/name_ga.rb +4 -5
  135. data/lib/ffaker/name_gr.rb +60 -0
  136. data/lib/ffaker/name_it.rb +4 -4
  137. data/lib/ffaker/name_ja.rb +3 -3
  138. data/lib/ffaker/name_kh.rb +22 -0
  139. data/lib/ffaker/name_kr.rb +3 -3
  140. data/lib/ffaker/name_mx.rb +14 -14
  141. data/lib/ffaker/name_nb.rb +5 -5
  142. data/lib/ffaker/name_nl.rb +7 -7
  143. data/lib/ffaker/name_ph.rb +2 -2
  144. data/lib/ffaker/name_ru.rb +7 -8
  145. data/lib/ffaker/name_se.rb +5 -5
  146. data/lib/ffaker/name_sn.rb +23 -23
  147. data/lib/ffaker/name_th.rb +3 -3
  148. data/lib/ffaker/name_th_en.rb +26 -0
  149. data/lib/ffaker/name_ua.rb +8 -8
  150. data/lib/ffaker/name_vn.rb +4 -4
  151. data/lib/ffaker/nato_alphabet.rb +10 -10
  152. data/lib/ffaker/phone_number.rb +31 -21
  153. data/lib/ffaker/phone_number_au.rb +3 -3
  154. data/lib/ffaker/phone_number_br.rb +9 -8
  155. data/lib/ffaker/phone_number_ch.rb +7 -7
  156. data/lib/ffaker/phone_number_cu.rb +5 -5
  157. data/lib/ffaker/phone_number_de.rb +1 -1
  158. data/lib/ffaker/phone_number_fr.rb +4 -4
  159. data/lib/ffaker/phone_number_it.rb +2 -2
  160. data/lib/ffaker/phone_number_kr.rb +4 -4
  161. data/lib/ffaker/phone_number_mx.rb +4 -5
  162. data/lib/ffaker/phone_number_nl.rb +13 -13
  163. data/lib/ffaker/phone_number_se.rb +18 -19
  164. data/lib/ffaker/phone_number_sg.rb +8 -8
  165. data/lib/ffaker/phone_number_sn.rb +2 -2
  166. data/lib/ffaker/product.rb +18 -14
  167. data/lib/ffaker/skill.rb +3 -3
  168. data/lib/ffaker/sport.rb +1 -1
  169. data/lib/ffaker/ssn_se.rb +19 -20
  170. data/lib/ffaker/string.rb +21 -23
  171. data/lib/ffaker/time.rb +19 -7
  172. data/lib/ffaker/tweet.rb +59 -0
  173. data/lib/ffaker/unit.rb +12 -12
  174. data/lib/ffaker/unit_english.rb +34 -35
  175. data/lib/ffaker/unit_metric.rb +25 -25
  176. data/lib/ffaker/utils/array_utils.rb +12 -9
  177. data/lib/ffaker/utils/module_utils.rb +9 -6
  178. data/lib/ffaker/utils/random_utils.rb +33 -0
  179. data/lib/ffaker/vehicle.rb +21 -21
  180. data/lib/ffaker/venue.rb +1 -1
  181. data/lib/ffaker/youtube.rb +24 -0
  182. data/scripts/benchmark.rb +3 -3
  183. data/scripts/reference.rb +26 -23
  184. data/test/helper.rb +50 -0
  185. data/test/test_address.rb +40 -21
  186. data/test/test_address_au.rb +19 -9
  187. data/test/test_address_br.rb +9 -2
  188. data/test/test_address_ca.rb +7 -0
  189. data/test/test_address_ch.rb +6 -2
  190. data/test/test_address_ch_de.rb +7 -3
  191. data/test/test_address_ch_fr.rb +7 -3
  192. data/test/test_address_ch_it.rb +5 -1
  193. data/test/test_address_da.rb +18 -9
  194. data/test/test_address_de.rb +12 -5
  195. data/test/test_address_fi.rb +10 -3
  196. data/test/test_address_fr.rb +13 -0
  197. data/test/test_address_gr.rb +43 -0
  198. data/test/test_address_in.rb +20 -12
  199. data/test/test_address_kr.rb +14 -0
  200. data/test/test_address_mx.rb +12 -5
  201. data/test/test_address_nl.rb +11 -5
  202. data/test/test_address_ru.rb +11 -5
  203. data/test/test_address_se.rb +9 -3
  204. data/test/test_address_sn.rb +7 -1
  205. data/test/test_address_ua.rb +17 -10
  206. data/test/test_address_uk.rb +11 -3
  207. data/test/test_address_us.rb +15 -6
  208. data/test/test_airline.rb +17 -0
  209. data/test/test_array_utils.rb +51 -3
  210. data/test/test_avatar.rb +5 -1
  211. data/test/test_aws.rb +25 -0
  212. data/test/test_bacon_ipsum.rb +12 -6
  213. data/test/test_book.rb +41 -0
  214. data/test/test_boolean.rb +4 -0
  215. data/test/test_cheesy_lingo.rb +14 -10
  216. data/test/test_color.rb +126 -1
  217. data/test/test_color_ua.rb +5 -1
  218. data/test/test_company.rb +7 -0
  219. data/test/test_company_cn.rb +24 -0
  220. data/test/test_company_it.rb +7 -1
  221. data/test/test_company_se.rb +6 -0
  222. data/test/test_conference.rb +5 -2
  223. data/test/test_course_mathematiques.rb +5 -1
  224. data/test/test_course_philosophie.rb +5 -1
  225. data/test/test_currency.rb +12 -0
  226. data/test/test_dizzle_ipsum.rb +12 -6
  227. data/test/test_education.rb +9 -2
  228. data/test/test_faker.rb +8 -1
  229. data/test/test_food.rb +11 -4
  230. data/test/test_gender.rb +5 -1
  231. data/test/test_gender_br.rb +18 -0
  232. data/test/test_gender_cn.rb +5 -2
  233. data/test/test_gender_kr.rb +7 -3
  234. data/test/test_geolocation.rb +11 -8
  235. data/test/test_guid.rb +6 -1
  236. data/test/test_healthcare_ipsum.rb +13 -6
  237. data/test/test_hipster_ipsum.rb +13 -6
  238. data/test/test_html_ipsum.rb +28 -20
  239. data/test/test_identification.rb +9 -2
  240. data/test/test_identification_br.rb +46 -0
  241. data/test/test_identification_co.rb +7 -0
  242. data/test/test_identification_es.rb +5 -1
  243. data/test/test_identification_es_cl.rb +5 -1
  244. data/test/test_identification_es_mx.rb +7 -2
  245. data/test/test_identification_kr.rb +4 -0
  246. data/test/test_internet.rb +36 -5
  247. data/test/test_internet_se.rb +12 -4
  248. data/test/test_job.rb +4 -0
  249. data/test/test_job_br.rb +17 -0
  250. data/test/test_job_cn.rb +4 -0
  251. data/test/test_job_fr.rb +4 -0
  252. data/test/test_job_ja.rb +4 -0
  253. data/test/test_job_kr.rb +4 -0
  254. data/test/test_job_vn.rb +22 -0
  255. data/test/test_locale.rb +10 -4
  256. data/test/test_lorem.rb +18 -11
  257. data/test/test_lorem_ar.rb +16 -8
  258. data/test/test_lorem_cn.rb +9 -2
  259. data/test/test_lorem_fr.rb +16 -8
  260. data/test/test_lorem_ja.rb +81 -0
  261. data/test/test_lorem_kr.rb +17 -8
  262. data/test/test_lorem_ua.rb +15 -8
  263. data/test/test_module_utils.rb +2 -2
  264. data/test/test_movie.rb +5 -1
  265. data/test/test_music.rb +11 -4
  266. data/test/test_name.rb +114 -1
  267. data/test/test_name_br.rb +41 -2
  268. data/test/test_name_cn.rb +7 -0
  269. data/test/test_name_cs.rb +7 -0
  270. data/test/test_name_da.rb +13 -6
  271. data/test/test_name_de.rb +4 -0
  272. data/test/test_name_fr.rb +7 -0
  273. data/test/test_name_ga.rb +7 -0
  274. data/test/test_name_gr.rb +70 -0
  275. data/test/test_name_it.rb +7 -0
  276. data/test/test_name_ja.rb +7 -0
  277. data/test/test_name_kh.rb +32 -0
  278. data/test/test_name_kr.rb +7 -0
  279. data/test/test_name_mx.rb +9 -0
  280. data/test/test_name_nb.rb +8 -0
  281. data/test/test_name_nl.rb +4 -0
  282. data/test/test_name_ph.rb +7 -0
  283. data/test/test_name_ru.rb +10 -3
  284. data/test/test_name_se.rb +12 -4
  285. data/test/test_name_sn.rb +8 -0
  286. data/test/test_name_th.rb +7 -0
  287. data/test/test_name_th_en.rb +35 -0
  288. data/test/test_name_ua.rb +26 -17
  289. data/test/test_name_vn.rb +42 -0
  290. data/test/test_nato_alphabet.rb +15 -4
  291. data/test/test_phone_number.rb +24 -6
  292. data/test/test_phone_number_au.rb +17 -6
  293. data/test/test_phone_number_br.rb +22 -13
  294. data/test/test_phone_number_cu.rb +29 -18
  295. data/test/test_phone_number_da.rb +16 -7
  296. data/test/test_phone_number_de.rb +17 -9
  297. data/test/test_phone_number_kr.rb +9 -0
  298. data/test/test_phone_number_mx.rb +16 -8
  299. data/test/test_phone_number_nl.rb +9 -2
  300. data/test/test_phone_number_se.rb +12 -7
  301. data/test/test_phone_number_sg.rb +17 -9
  302. data/test/test_phone_number_sn.rb +12 -4
  303. data/test/test_products.rb +22 -0
  304. data/test/test_skill.rb +8 -2
  305. data/test/test_sports.rb +4 -0
  306. data/test/test_ssn.rb +3 -1
  307. data/test/test_ssn_mx.rb +6 -1
  308. data/test/test_ssn_se.rb +3 -0
  309. data/test/test_string.rb +28 -1
  310. data/test/test_time.rb +33 -2
  311. data/test/test_tweet.rb +59 -0
  312. data/test/test_units.rb +7 -0
  313. data/test/test_units_english.rb +9 -0
  314. data/test/test_units_metric.rb +9 -0
  315. data/test/test_vehicle.rb +24 -15
  316. data/test/test_venue.rb +5 -1
  317. data/test/test_youtube.rb +28 -0
  318. metadata +101 -5
  319. data/lib/ffaker/data/name/first_names +0 -3008
  320. data/lib/ffaker/data/name_br/first_names +0 -91
@@ -11,30 +11,30 @@ module FFaker
11
11
  extend self
12
12
 
13
13
  LENGTH_UNITS = [
14
- { name: "millimeters", abbreviation: "mm"},
15
- { name: "centimeters", abbreviation: "cm"},
16
- { name: "meters", abbreviation: "m"},
17
- { name: "kilometers", abbreviation: "km"}
18
- ]
14
+ { name: 'millimeters', abbreviation: 'mm' },
15
+ { name: 'centimeters', abbreviation: 'cm' },
16
+ { name: 'meters', abbreviation: 'm' },
17
+ { name: 'kilometers', abbreviation: 'km' }
18
+ ].freeze
19
19
  MASS_UNITS = [
20
- { name: "gram", abbreviation: "g"},
21
- { name: "kilogram", abbreviation: "kg" },
22
- { name: "metric ton", abbreviation: "mt"}
23
- ]
20
+ { name: 'gram', abbreviation: 'g' },
21
+ { name: 'kilogram', abbreviation: 'kg' },
22
+ { name: 'metric ton', abbreviation: 'mt' }
23
+ ].freeze
24
24
  LIQUID_UNITS = [
25
- { name: "milliliters", abbreviation: "ml"},
26
- { name: "liters", abbreviation: "L"}
27
- ]
25
+ { name: 'milliliters', abbreviation: 'ml' },
26
+ { name: 'liters', abbreviation: 'L' }
27
+ ].freeze
28
28
  VOLUME_UNITS = [
29
- { name: " cubic centimeters", abbreviation: "cm^3"},
30
- { name: "cubic meters", abbreviation: "m^3"}
31
- ]
29
+ { name: ' cubic centimeters', abbreviation: 'cm^3' },
30
+ { name: 'cubic meters', abbreviation: 'm^3' }
31
+ ].freeze
32
32
  AREA_UNITS = [
33
- { name: "centimeters squared", abbreviation: "cm^2"},
34
- { name: "meters squared", abbreviation: "m^2"},
35
- { name: "hectares", abbreviation: "ha"},
36
- { name: "kilometers", abbreviation: "km" }
37
- ]
33
+ { name: 'centimeters squared', abbreviation: 'cm^2' },
34
+ { name: 'meters squared', abbreviation: 'm^2' },
35
+ { name: 'hectares', abbreviation: 'ha' },
36
+ { name: 'kilometers', abbreviation: 'km' }
37
+ ].freeze
38
38
 
39
39
  def mass_name
40
40
  mass.name
@@ -79,23 +79,23 @@ module FFaker
79
79
  private
80
80
 
81
81
  def length
82
- OpenStruct.new LENGTH_UNITS.sample
82
+ OpenStruct.new(fetch_sample(LENGTH_UNITS))
83
83
  end
84
84
 
85
85
  def mass
86
- OpenStruct.new MASS_UNITS.sample
86
+ OpenStruct.new(fetch_sample(MASS_UNITS))
87
87
  end
88
88
 
89
89
  def liquid
90
- OpenStruct.new LIQUID_UNITS.sample
90
+ OpenStruct.new(fetch_sample(LIQUID_UNITS))
91
91
  end
92
92
 
93
93
  def volume
94
- OpenStruct.new VOLUME_UNITS.sample
94
+ OpenStruct.new(fetch_sample(VOLUME_UNITS))
95
95
  end
96
96
 
97
97
  def area
98
- OpenStruct.new AREA_UNITS.sample
98
+ OpenStruct.new(fetch_sample(AREA_UNITS))
99
99
  end
100
100
  end
101
101
  end
@@ -1,5 +1,8 @@
1
+ require 'ffaker/utils/random_utils'
1
2
  module FFaker
2
3
  module ArrayUtils
4
+ extend RandomUtils
5
+
3
6
  def self.const_array(argument)
4
7
  array = argument.is_a?(Array) ? argument : argument.to_a
5
8
  array.extend ArrayUtils
@@ -7,13 +10,13 @@ module FFaker
7
10
  end
8
11
 
9
12
  def self.random_pick(array, n)
10
- warn '[ArrayUtils.random_pick] is deprecated. Please use the Array#sample method'
11
- array.sample(n)
13
+ warn '[ArrayUtils.random_pick] is deprecated. Please use the ModuleUtils#fetch_sample method'
14
+ fetch_sample(array, count: n)
12
15
  end
13
16
 
14
17
  def self.rand(array)
15
- warn '[ArrayUtils.rand] is deprecated. Please use the Array#sample method'
16
- array.sample
18
+ warn '[ArrayUtils.rand] is deprecated. Please use the ModuleUtils#fetch_sample method'
19
+ fetch_sample(array)
17
20
  end
18
21
 
19
22
  def self.freeze_all(array)
@@ -23,17 +26,17 @@ module FFaker
23
26
  end
24
27
 
25
28
  def self.shuffle(array)
26
- array.sort_by{Kernel.rand}
29
+ array.sort_by { FFaker::Random.rand }
27
30
  end
28
31
 
29
32
  def random_pick(n)
30
- warn '[ArrayUtils#random_pick] is deprecated. Please use the Array#sample method'
31
- self.sample(n)
33
+ warn '[ArrayUtils#random_pick] is deprecated. Please use the ModuleUtils#fetch_sample method'
34
+ ArrayUtils.random_pick(self, n)
32
35
  end
33
36
 
34
37
  def rand
35
- warn '[ArrayUtils#rand] is deprecated. Please use the Array#sample method'
36
- sample
38
+ warn '[ArrayUtils#rand] is deprecated. Please use the ModuleUtils#fetch_sample method'
39
+ ArrayUtils.rand(self)
37
40
  end
38
41
 
39
42
  def freeze_all
@@ -1,7 +1,10 @@
1
1
  require 'ffaker/utils/array_utils'
2
+ require 'ffaker/utils/random_utils'
2
3
 
3
4
  module FFaker
4
5
  module ModuleUtils
6
+ include RandomUtils
7
+
5
8
  def k(arg)
6
9
  FFaker::ArrayUtils.const_array(arg)
7
10
  end
@@ -10,7 +13,7 @@ module FFaker
10
13
  if const_name =~ /[a-z]/ # Not a constant, probably a class/module name.
11
14
  super const_name
12
15
  else
13
- mod_name = ancestors.first.to_s.split("::").last
16
+ mod_name = ancestors.first.to_s.split('::').last
14
17
  data_path = "#{FFaker::BASE_LIB_PATH}/ffaker/data/#{underscore(mod_name)}/#{underscore(const_name.to_s)}"
15
18
  data = k File.read(data_path).split("\n")
16
19
  const_set const_name, data
@@ -19,11 +22,11 @@ module FFaker
19
22
  end
20
23
 
21
24
  def underscore(string)
22
- string.gsub(/::/, '/').
23
- gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
24
- gsub(/([a-z\d])([A-Z])/,'\1_\2').
25
- tr("-", "_").
26
- downcase
25
+ string.gsub(/::/, '/')
26
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
27
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
28
+ .tr('-', '_')
29
+ .downcase
27
30
  end
28
31
  end
29
32
  end
@@ -0,0 +1,33 @@
1
+ module FFaker
2
+ # Methods for returning repeatably-random data using the internal
3
+ # Random Number Generator. You should not need to use this directly, it is
4
+ # automatically included when you `include ModuleUtils` in a FFaker module.
5
+ module RandomUtils
6
+ # Returns a randon number from the internal Random Number Generator. Can be
7
+ # used in place of `rand` or `Kernal.rand`.
8
+ def rand(max = nil)
9
+ FFaker::Random.rand(max)
10
+ end
11
+
12
+ # Performs Array#sample on `list` using a the internal Random Number
13
+ # Generator so that the results are deterministic.
14
+ #
15
+ # * Returns one random item from `list`.
16
+ # * Pass `count: n` in options argument, where `n` is an integer, to
17
+ # return *n* items from `list`
18
+ def fetch_sample(list, options = {})
19
+ if (count = options.delete(:count))
20
+ list.sample(count, random: FFaker::Random)
21
+ else
22
+ list.sample(random: FFaker::Random)
23
+ end
24
+ end
25
+
26
+ # Performs same action as as `Array#suffle` (returns a randomly-reordered
27
+ # copy of `list`) except that it uses the internal Random Number Generator
28
+ # so that the results are deterministic.
29
+ def shuffle(list)
30
+ list.shuffle(random: FFaker::Random)
31
+ end
32
+ end
33
+ end
@@ -5,39 +5,39 @@ module FFaker
5
5
  extend ModuleUtils
6
6
  extend self
7
7
 
8
- DRIVETRAINS = %w(4WD 4X4 AWD FWD RWD)
9
- YEARS = [*'1900'.."#{Date.today.year+1}"]
8
+ DRIVETRAINS = %w(4WD 4X4 AWD FWD RWD).freeze
9
+ YEARS = [*'1900'..(Date.today.year + 1).to_s].freeze
10
10
  COLOR_PREFIXES = k(%w(
11
- beautiful bright calm dangerous dark dull fast magnetic magnificent majestic melodic metallic
12
- mundane mute mysterious new pleasant pretty resonant royal slate soft tranquil vibrant weak
13
- ))
14
- TRANSMISSIONS_ABBR = %w(AT MT AM CVT)
15
- CYLINDERS = %w(2 5 6 8)
11
+ beautiful bright calm dangerous dark dull fast magnetic magnificent majestic melodic metallic
12
+ mundane mute mysterious new pleasant pretty resonant royal slate soft tranquil vibrant weak
13
+ ))
14
+ TRANSMISSIONS_ABBR = %w(AT MT AM CVT).freeze
15
+ CYLINDERS = %w(2 5 6 8).freeze
16
16
 
17
17
  def base_color
18
18
  FFaker::Color.name
19
19
  end
20
20
 
21
21
  def drivetrain
22
- DRIVETRAINS.sample
22
+ fetch_sample(DRIVETRAINS)
23
23
  end
24
24
 
25
25
  def make
26
- MAKES_LIST.sample
26
+ fetch_sample(MAKES_LIST)
27
27
  end
28
28
 
29
- def manufacturer_color(n=2)
29
+ def manufacturer_color(n = 2)
30
30
  # Take two prefixes because it's more fun than one
31
- (COLOR_PREFIXES.sample(n) + [base_color]).join(' ')
31
+ (fetch_sample(COLOR_PREFIXES, count: n) + [base_color]).join(' ')
32
32
  end
33
- alias_method :mfg_color, :manufacturer_color
33
+ alias mfg_color manufacturer_color
34
34
 
35
35
  def model
36
- MODELS_LIST.sample
36
+ fetch_sample(MODELS_LIST)
37
37
  end
38
38
 
39
39
  def trim
40
- TRIMS_LIST.sample
40
+ fetch_sample(TRIMS_LIST)
41
41
  end
42
42
 
43
43
  def vin
@@ -45,31 +45,31 @@ module FFaker
45
45
  end
46
46
 
47
47
  def year
48
- YEARS.sample
48
+ fetch_sample(YEARS)
49
49
  end
50
50
 
51
51
  def transmission
52
- TRANSMISSIONS_LIST.sample
52
+ fetch_sample(TRANSMISSIONS_LIST)
53
53
  end
54
54
 
55
55
  def transmission_abbr
56
- TRANSMISSIONS_ABBR.sample
56
+ fetch_sample(TRANSMISSIONS_ABBR)
57
57
  end
58
58
 
59
59
  def engine_cylinders
60
- CYLINDERS.sample
60
+ fetch_sample(CYLINDERS)
61
61
  end
62
62
 
63
63
  def engine_displacement
64
- DISPLACEMENTS_LIST.sample
64
+ fetch_sample(DISPLACEMENTS_LIST)
65
65
  end
66
66
 
67
67
  def fuel_type
68
- FUEL_TYPES_LIST.sample
68
+ fetch_sample(FUEL_TYPES_LIST)
69
69
  end
70
70
 
71
71
  def interior_upholstery
72
- UPHOLSTERY_LIST.sample
72
+ fetch_sample(UPHOLSTERY_LIST)
73
73
  end
74
74
  end
75
75
  end
@@ -6,7 +6,7 @@ module FFaker
6
6
  extend self
7
7
 
8
8
  def name
9
- VENUE_LIST.sample
9
+ fetch_sample(VENUE_LIST)
10
10
  end
11
11
  end
12
12
  end
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+
3
+ module FFaker
4
+ module Youtube
5
+ extend ModuleUtils
6
+ extend self
7
+
8
+ def url
9
+ "www.youtube.com/watch?v=#{video_id}"
10
+ end
11
+
12
+ def share_url
13
+ "youtu.be/#{video_id}"
14
+ end
15
+
16
+ def embed_url
17
+ "www.youtube.com/embed/#{video_id}"
18
+ end
19
+
20
+ def video_id
21
+ fetch_sample(VIDEO_IDS)
22
+ end
23
+ end
24
+ end
@@ -6,7 +6,7 @@ N = 10_000
6
6
  def run(name)
7
7
  require name
8
8
  Benchmark.bm do |rep|
9
- rep.report("generating #{ N } names (#{name} #{FFaker::VERSION})") do
9
+ rep.report("generating #{N} names (#{name} #{FFaker::VERSION})") do
10
10
  N.times do
11
11
  FFaker::Name.name
12
12
  end
@@ -16,5 +16,5 @@ def run(name)
16
16
  exit(0)
17
17
  end
18
18
 
19
- fork { run("faker") }; Process.wait
20
- fork { run("ffaker") }; Process.wait
19
+ fork { run('faker') }; Process.wait
20
+ fork { run('ffaker') }; Process.wait
@@ -1,10 +1,10 @@
1
- $: << File.dirname(__FILE__) + '/../lib'
1
+ $LOAD_PATH << File.dirname(__FILE__) + '/../lib'
2
2
  require 'ffaker'
3
3
 
4
4
  ICONS = {
5
- :error => "‼️",
6
- :warning => "❗"
7
- }
5
+ error: "‼️",
6
+ warning: "❗"
7
+ }.freeze
8
8
 
9
9
  # Get a list of sections
10
10
  def faker_modules
@@ -13,13 +13,16 @@ def faker_modules
13
13
  next unless mod.is_a?(Module)
14
14
  next if mod == FFaker::ArrayUtils
15
15
  next if mod == FFaker::ModuleUtils
16
+ next if mod == FFaker::RandomUtils
17
+ next if mod == FFaker::Random
16
18
  mod
17
19
  end.compact
18
20
  end
19
21
 
20
22
  # Returns faker methods for a given module
21
23
  def faker_methods(mod)
22
- methods = mod.methods - Module.methods - [:k, :underscore]
24
+ methods = mod.methods - Module.methods -
25
+ [:k, :underscore, :fetch_sample, :rand, :shuffle]
23
26
 
24
27
  # For Company.name (et al), don't discard :name if it was reimplemented
25
28
  methods << :name if mod.send(:name) != mod.to_s
@@ -32,13 +35,13 @@ def warn(msg)
32
35
  $warnings << msg if $warnings
33
36
  end
34
37
 
35
- def catch_warnings(&blk)
38
+ def catch_warnings
36
39
  $warnings = []
37
40
  [yield, $warnings]
38
41
  end
39
42
 
40
43
  def escape(str)
41
- str.gsub('&', '&amp;').gsub('<', '&lt;').gsub('>', '&gt;').gsub("\n", '')
44
+ str.gsub('&', '&amp;').gsub('<', '&lt;').gsub('>', '&gt;').delete("\n")
42
45
  end
43
46
 
44
47
  sections = faker_modules.each.map do |mod|
@@ -46,28 +49,28 @@ sections = faker_modules.each.map do |mod|
46
49
 
47
50
  methods = faker_methods(mod)
48
51
  lines << "## #{mod}"
49
- lines << ""
50
- lines << "| Method | Example |"
51
- lines << "| ------ | ------- |"
52
+ lines << ''
53
+ lines << '| Method | Example |'
54
+ lines << '| ------ | ------- |'
52
55
 
53
56
  methods.sort.each do |meth|
54
57
  arity = mod.method(meth).arity
55
58
 
56
59
  left = "`#{meth}`"
57
- right =''
60
+ right = ''
58
61
 
59
62
  if arity > 0
60
- left = "`#{meth}`(#{arity.times.map{'...'}.join(', ')})"
63
+ left = "`#{meth}`(#{arity.times.map { '...' }.join(', ')})"
61
64
  else
62
65
  begin
63
- examples, warnings = catch_warnings {
66
+ examples, warnings = catch_warnings do
64
67
  3.times.map { mod.send meth }
65
- }
66
- if warnings.any?
67
- right = "#{ICONS[:warning]} *#{warnings.first}*"
68
- else
69
- right = "#{escape examples.join(', ')}"
70
68
  end
69
+ right = if warnings.any?
70
+ "#{ICONS[:warning]} *#{warnings.first}*"
71
+ else
72
+ (escape examples.join(', ')).to_s
73
+ end
71
74
  rescue => e
72
75
  right = "#{ICONS[:error]} #{e.class}: #{e.message}"
73
76
  end
@@ -76,14 +79,14 @@ sections = faker_modules.each.map do |mod|
76
79
  lines << "| #{left} | #{right} |"
77
80
  end
78
81
 
79
- lines << ""
82
+ lines << ''
80
83
  end
81
84
 
82
- puts "# FFaker reference"
83
- puts ""
85
+ puts '# FFaker reference'
86
+ puts ''
84
87
  faker_modules.each do |mod|
85
- name = mod.to_s.downcase.gsub(':', '')
88
+ name = mod.to_s.downcase.delete(':')
86
89
  puts " * [#{mod}](##{name})"
87
90
  end
88
- puts ""
91
+ puts ''
89
92
  puts sections.flatten.join("\n")