faker 3.5.1 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +251 -7
  3. data/README.md +78 -393
  4. data/lib/faker/blockchain/bitcoin.rb +0 -1
  5. data/lib/faker/blockchain/tezos.rb +0 -1
  6. data/lib/faker/blockchain.rb +9 -0
  7. data/lib/faker/books/lovecraft.rb +1 -1
  8. data/lib/faker/books.rb +9 -0
  9. data/lib/faker/creature.rb +9 -0
  10. data/lib/faker/default/avatar.rb +1 -1
  11. data/lib/faker/default/bank.rb +1 -5
  12. data/lib/faker/default/boolean.rb +2 -1
  13. data/lib/faker/default/code.rb +4 -0
  14. data/lib/faker/default/company.rb +2 -2
  15. data/lib/faker/default/crypto.rb +0 -2
  16. data/lib/faker/default/driving_licence.rb +3 -3
  17. data/lib/faker/default/finance.rb +2 -2
  18. data/lib/faker/default/hipster.rb +1 -1
  19. data/lib/faker/default/html.rb +4 -4
  20. data/lib/faker/default/id_number.rb +1 -1
  21. data/lib/faker/default/invoice.rb +2 -2
  22. data/lib/faker/default/json.rb +7 -2
  23. data/lib/faker/default/lorem.rb +3 -3
  24. data/lib/faker/default/lorem_flickr.rb +1 -1
  25. data/lib/faker/default/markdown.rb +5 -5
  26. data/lib/faker/default/national_health_service.rb +1 -2
  27. data/lib/faker/default/omniauth.rb +58 -58
  28. data/lib/faker/default/placeholdit.rb +2 -2
  29. data/lib/faker/default/string.rb +1 -1
  30. data/lib/faker/default/types.rb +2 -2
  31. data/lib/faker/default/x.rb +189 -0
  32. data/lib/faker/default.rb +9 -0
  33. data/lib/faker/fantasy.rb +9 -0
  34. data/lib/faker/games.rb +9 -0
  35. data/lib/faker/{default/internet.rb → internet.rb} +8 -4
  36. data/lib/faker/japanese_media.rb +9 -0
  37. data/lib/faker/locations.rb +9 -0
  38. data/lib/faker/movies.rb +9 -0
  39. data/lib/faker/music/bossa_nova.rb +35 -0
  40. data/lib/faker/music/grateful_dead.rb +0 -2
  41. data/lib/faker/music/pearl_jam.rb +0 -2
  42. data/lib/faker/music/rush.rb +0 -2
  43. data/lib/faker/music/smashing_pumpkins.rb +0 -2
  44. data/lib/faker/{music/music.rb → music.rb} +4 -0
  45. data/lib/faker/quotes.rb +9 -0
  46. data/lib/faker/religion/bible.rb +1 -1
  47. data/lib/faker/religion.rb +9 -0
  48. data/lib/faker/sports.rb +9 -0
  49. data/lib/faker/travel.rb +9 -0
  50. data/lib/faker/tv_shows.rb +9 -0
  51. data/lib/faker/version.rb +1 -1
  52. data/lib/faker.rb +67 -12
  53. data/lib/helpers/deprecator.rb +1 -1
  54. data/lib/helpers/positional_generator.rb +0 -2
  55. data/lib/helpers/unique_generator.rb +1 -1
  56. data/lib/locales/README.md +2 -2
  57. data/lib/locales/ar.yml +1606 -49
  58. data/lib/locales/bg.yml +935 -18
  59. data/lib/locales/ca-CAT.yml +347 -12
  60. data/lib/locales/ca.yml +580 -7
  61. data/lib/locales/de-CH.yml +31 -0
  62. data/lib/locales/ee.yml +1185 -26
  63. data/lib/locales/en/adjective.yml +174 -174
  64. data/lib/locales/en/airport.yml +374 -374
  65. data/lib/locales/en/ancient.yml +128 -4
  66. data/lib/locales/en/animal.yml +141 -2
  67. data/lib/locales/en/app.yml +89 -2
  68. data/lib/locales/en/appliance.yml +81 -2
  69. data/lib/locales/en/aqua_teen_hunger_force.yml +31 -31
  70. data/lib/locales/en/artist.yml +43 -1
  71. data/lib/locales/en/avatar.yml +54 -28
  72. data/lib/locales/en/back_to_the_future.yml +145 -117
  73. data/lib/locales/en/bank.yml +91 -2
  74. data/lib/locales/en/beer.yml +232 -6
  75. data/lib/locales/en/bible.yml +3 -6
  76. data/lib/locales/en/big_bang_theory.yml +34 -35
  77. data/lib/locales/en/bird.yml +1225 -1226
  78. data/lib/locales/en/bojack_horseman.yml +63 -3
  79. data/lib/locales/en/book.yml +0 -1
  80. data/lib/locales/en/bossa_nova.yml +110 -3
  81. data/lib/locales/en/breaking_bad.yml +110 -25
  82. data/lib/locales/en/brooklyn_nine_nine.yml +0 -1
  83. data/lib/locales/en/buffy.yml +239 -257
  84. data/lib/locales/en/business.yml +18 -2
  85. data/lib/locales/en/cannabis.yml +344 -10
  86. data/lib/locales/en/cat.yml +155 -3
  87. data/lib/locales/en/chess.yml +2 -3
  88. data/lib/locales/en/chiquito.yml +60 -61
  89. data/lib/locales/en/chuck_norris.yml +78 -79
  90. data/lib/locales/en/clash_of_clan.yml +0 -2
  91. data/lib/locales/en/code.yml +501 -1
  92. data/lib/locales/en/coffee.yml +450 -25
  93. data/lib/locales/en/color.yml +73 -1
  94. data/lib/locales/en/commerce.yml +117 -23
  95. data/lib/locales/en/community.yml +55 -30
  96. data/lib/locales/en/company.yml +1756 -14
  97. data/lib/locales/en/compass.yml +108 -12
  98. data/lib/locales/en/conan.yml +0 -2
  99. data/lib/locales/en/construction.yml +416 -422
  100. data/lib/locales/en/cosmere.yml +219 -54
  101. data/lib/locales/en/cowboy_bebop.yml +56 -59
  102. data/lib/locales/en/culture_series.yml +298 -298
  103. data/lib/locales/en/currency.yml +358 -3
  104. data/lib/locales/en/dc_comics.yml +178 -49
  105. data/lib/locales/en/demographic.yml +215 -215
  106. data/lib/locales/en/departed.yml +40 -44
  107. data/lib/locales/en/dessert.yml +78 -3
  108. data/lib/locales/en/doraemon.yml +278 -280
  109. data/lib/locales/en/dr_who.yml +468 -93
  110. data/lib/locales/en/dragon_ball.yml +240 -240
  111. data/lib/locales/en/dumb_and_dumber.yml +72 -56
  112. data/lib/locales/en/elder_scrolls.yml +52 -53
  113. data/lib/locales/en/electrical_components.yml +49 -3
  114. data/lib/locales/en/esport.yml +58 -5
  115. data/lib/locales/en/family_guy.yml +54 -4
  116. data/lib/locales/en/file.yml +108 -9
  117. data/lib/locales/en/final_space.yml +1 -3
  118. data/lib/locales/en/finance.yml +1 -1
  119. data/lib/locales/en/food.yml +1 -1
  120. data/lib/locales/en/football.yml +121 -5
  121. data/lib/locales/en/fresh_prince_of_bel_air.yml +119 -70
  122. data/lib/locales/en/friends.yml +162 -3
  123. data/lib/locales/en/funny_name.yml +752 -1
  124. data/lib/locales/en/futurama.yml +7 -15
  125. data/lib/locales/en/game_of_thrones.yml +2487 -5
  126. data/lib/locales/en/gender.yml +15 -3
  127. data/lib/locales/en/ghostbusters.yml +101 -88
  128. data/lib/locales/en/grateful_dead.yml +47 -45
  129. data/lib/locales/en/greek_philosophers.yml +44 -23
  130. data/lib/locales/en/hacker.yml +110 -5
  131. data/lib/locales/en/hackers.yml +1 -1
  132. data/lib/locales/en/harry_potter.yml +323 -6
  133. data/lib/locales/en/hey_arnold.yml +104 -21
  134. data/lib/locales/en/hipster.yml +203 -1
  135. data/lib/locales/en/hitchhikers_guide_to_the_galaxy.yml +243 -42
  136. data/lib/locales/en/hobby.yml +0 -1
  137. data/lib/locales/en/horse.yml +446 -2
  138. data/lib/locales/en/house.yml +34 -2
  139. data/lib/locales/en/how_i_met_your_mother.yml +97 -25
  140. data/lib/locales/en/how_to_train_your_dragon.yml +0 -1
  141. data/lib/locales/en/id_number.yml +6 -1
  142. data/lib/locales/en/industry_segments.yml +188 -4
  143. data/lib/locales/en/job.yml +98 -7
  144. data/lib/locales/en/kamen_rider.yml +272 -6
  145. data/lib/locales/en/kpop.yml +954 -80
  146. data/lib/locales/en/lebowski.yml +58 -40
  147. data/lib/locales/en/lorem.yml +1095 -6
  148. data/lib/locales/en/markdown.yml +12 -2
  149. data/lib/locales/en/marketing.yml +54 -1
  150. data/lib/locales/en/measurement.yml +42 -8
  151. data/lib/locales/en/michael_scott.yml +41 -42
  152. data/lib/locales/en/movie.yml +188 -176
  153. data/lib/locales/en/name.yml +6068 -6
  154. data/lib/locales/en/nato_phonetic_alphabet.yml +27 -1
  155. data/lib/locales/en/new_girl.yml +35 -37
  156. data/lib/locales/en/one_piece.yml +359 -6
  157. data/lib/locales/en/opera.yml +1 -1
  158. data/lib/locales/en/overwatch.yml +1 -1
  159. data/lib/locales/en/parks_and_rec.yml +33 -4
  160. data/lib/locales/en/pearl_jam.yml +207 -207
  161. data/lib/locales/en/phish.yml +388 -389
  162. data/lib/locales/en/prince.yml +219 -219
  163. data/lib/locales/en/princess_bride.yml +48 -2
  164. data/lib/locales/en/programming_language.yml +753 -3
  165. data/lib/locales/en/quote.yml +599 -685
  166. data/lib/locales/en/rajnikanth.yml +74 -74
  167. data/lib/locales/en/relationship.yml +29 -6
  168. data/lib/locales/en/restaurant.yml +31 -31
  169. data/lib/locales/en/rick_and_morty.yml +116 -3
  170. data/lib/locales/en/rock_band.yml +228 -2
  171. data/lib/locales/en/rupaul.yml +120 -122
  172. data/lib/locales/en/seinfeld.yml +110 -3
  173. data/lib/locales/en/shakespeare.yml +46 -50
  174. data/lib/locales/en/silicon_valley.yml +122 -50
  175. data/lib/locales/en/simpsons.yml +897 -691
  176. data/lib/locales/en/slack_emoji.yml +874 -8
  177. data/lib/locales/en/space.yml +373 -14
  178. data/lib/locales/en/star_trek.yml +105 -4
  179. data/lib/locales/en/star_wars.yml +525 -528
  180. data/lib/locales/en/stargate.yml +65 -18
  181. data/lib/locales/en/stranger_thing.yml +31 -33
  182. data/lib/locales/en/street_fighter.yml +1 -1
  183. data/lib/locales/en/subscription.yml +47 -5
  184. data/lib/locales/en/superhero.yml +574 -4
  185. data/lib/locales/en/sword_art_online.yml +327 -331
  186. data/lib/locales/en/team.yml +125 -3
  187. data/lib/locales/en/the_expanse.yml +92 -4
  188. data/lib/locales/en/the_it_crowd.yml +148 -152
  189. data/lib/locales/en/the_office.yml +77 -81
  190. data/lib/locales/en/the_room.yml +35 -35
  191. data/lib/locales/en/the_thick_of_it.yml +83 -3
  192. data/lib/locales/en/theater.yml +593 -593
  193. data/lib/locales/en/tolkien.yml +2 -2
  194. data/lib/locales/en/touhou.yml +54 -54
  195. data/lib/locales/en/tron.yml +191 -191
  196. data/lib/locales/en/twin_peaks.yml +130 -3
  197. data/lib/locales/en/umphreys_mcgee.yml +266 -1
  198. data/lib/locales/en/university.yml +15 -2
  199. data/lib/locales/en/v_for_vendetta.yml +157 -160
  200. data/lib/locales/en/venture_bros.yml +225 -4
  201. data/lib/locales/en/verbs.yml +3785 -5
  202. data/lib/locales/en/volleyball.yml +493 -493
  203. data/lib/locales/en/warhammer_fantasy.yml +540 -573
  204. data/lib/locales/en/world_cup.yml +1132 -235
  205. data/lib/locales/en/yoda.yml +38 -1
  206. data/lib/locales/en-BORK.yml +104 -1
  207. data/lib/locales/en-GB.yml +9 -7
  208. data/lib/locales/en-NG.yml +737 -66
  209. data/lib/locales/en-PAK.yml +24 -1
  210. data/lib/locales/en-TH.yml +1 -1
  211. data/lib/locales/en-UG.yml +374 -76
  212. data/lib/locales/en-ZA.yml +1394 -13
  213. data/lib/locales/es-AR.yml +1 -1
  214. data/lib/locales/es-MX.yml +1907 -40
  215. data/lib/locales/es.yml +2117 -52
  216. data/lib/locales/fa.yml +1624 -5
  217. data/lib/locales/fi-FI.yml +315 -17
  218. data/lib/locales/fr/address.yml +761 -8
  219. data/lib/locales/fr/adjective.yml +261 -261
  220. data/lib/locales/fr/ancient.yml +134 -134
  221. data/lib/locales/fr/animal.yml +118 -1
  222. data/lib/locales/fr/appliance.yml +66 -1
  223. data/lib/locales/fr/book.yml +27 -3
  224. data/lib/locales/fr/color.yml +31 -1
  225. data/lib/locales/fr/company.yml +490 -10
  226. data/lib/locales/fr/compass.yml +58 -10
  227. data/lib/locales/fr/demographic.yml +3 -1
  228. data/lib/locales/fr/gender.yml +18 -3
  229. data/lib/locales/fr/internet.yml +12 -1
  230. data/lib/locales/fr/lorem.yml +1091 -2
  231. data/lib/locales/fr/measurement.yml +31 -4
  232. data/lib/locales/fr/name.yml +1176 -5
  233. data/lib/locales/fr/phone_number.yml +34 -3
  234. data/lib/locales/fr/pokemon.yml +417 -3
  235. data/lib/locales/fr-CA.yml +12 -6
  236. data/lib/locales/fr-CH.yml +2455 -41
  237. data/lib/locales/he.yml +255 -9
  238. data/lib/locales/hy.yml +12 -6
  239. data/lib/locales/it.yml +12 -6
  240. data/lib/locales/ja/address.yml +350 -120526
  241. data/lib/locales/ja/ancient.yml +15 -1
  242. data/lib/locales/ja/animal.yml +83 -1
  243. data/lib/locales/ja/artist.yml +46 -0
  244. data/lib/locales/ja/bank.yml +136 -1
  245. data/lib/locales/ja/book.yml +492 -3
  246. data/lib/locales/ja/cat.yml +75 -1
  247. data/lib/locales/ja/coffee.yml +19 -1
  248. data/lib/locales/ja/color.yml +32 -1
  249. data/lib/locales/ja/commerce.yml +98 -6
  250. data/lib/locales/ja/company.yml +20 -2
  251. data/lib/locales/ja/dog.yml +335 -2
  252. data/lib/locales/ja/emotion.yml +1 -3
  253. data/lib/locales/ja/food.yml +38 -1
  254. data/lib/locales/ja/gender.yml +3 -1
  255. data/lib/locales/ja/lorem.yml +1014 -3
  256. data/lib/locales/ja/name.yml +203 -3
  257. data/lib/locales/ja/overwatch.yml +33 -1
  258. data/lib/locales/ja/phone_number.yml +9 -3
  259. data/lib/locales/ja/pokemon.yml +437 -3
  260. data/lib/locales/ja/relationship.yml +29 -6
  261. data/lib/locales/ja/restaurant.yml +74 -3
  262. data/lib/locales/ja/space.yml +20 -2
  263. data/lib/locales/ja/subscription.yml +47 -5
  264. data/lib/locales/ja/super_mario.yml +68 -4
  265. data/lib/locales/ja/university.yml +15 -2
  266. data/lib/locales/ja/zelda.yml +15 -1
  267. data/lib/locales/ko.yml +1 -1
  268. data/lib/locales/lv.yml +1221 -26
  269. data/lib/locales/nl.yml +33514 -55
  270. data/lib/locales/pl.yml +4008 -37
  271. data/lib/locales/sk.yml +12 -6
  272. data/lib/locales/sv.yml +639 -49
  273. data/lib/locales/th.yml +375 -375
  274. data/lib/locales/tr.yml +77 -18
  275. data/lib/locales/uk.yml +7 -7
  276. data/lib/locales/vi.yml +392 -49
  277. data/lib/locales/zh-CN.yml +540 -19
  278. data/lib/locales/zh-TW.yml +1030 -15
  279. metadata +29 -18
  280. data/lib/faker/default/bossa_nova.rb +0 -33
  281. data/lib/faker/default/religion.rb +0 -6
  282. data/lib/faker/default/twitter.rb +0 -207
  283. /data/lib/faker/{books → default}/book.rb +0 -0
  284. /data/lib/faker/{games → default}/game.rb +0 -0
  285. /data/lib/faker/{movies → default}/movie.rb +0 -0
  286. /data/lib/faker/{quotes → default}/quote.rb +0 -0
  287. /data/lib/faker/{sports → default}/sport.rb +0 -0
  288. /data/lib/faker/{default/internet_http.rb → internet/http.rb} +0 -0
@@ -0,0 +1,189 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class X < Base
5
+ class << self
6
+ ##
7
+ # Produces a random X user based on X's v2 API.
8
+ #
9
+ # @return [Hash]
10
+ #
11
+ # @example
12
+ # Faker::X.user #=> { data: [{:id=>"8821452687517076614", :name=>"Lincoln Paucek", :screen_name=>"cody"...
13
+ #
14
+ # @faker.version 1.7.3
15
+ def user
16
+ author_id = Faker::Number.between(from: 1, to: 9_223_372_036_854_775_807)
17
+
18
+ {
19
+ data: [
20
+ {
21
+ author_id: author_id.to_s,
22
+ id: id.to_s,
23
+ text: Faker::Lorem.sentence
24
+ }
25
+ ],
26
+ includes: {
27
+ users: [
28
+ {
29
+ public_metrics: {
30
+ followers_count: Faker::Number.between(to: 1, from: 1_000),
31
+ following_count: Faker::Number.between(to: 1, from: 200),
32
+ tweet_count: Faker::Number.between(to: 1, from: 10_000),
33
+ listed_count: Faker::Number.between(to: 1, from: 1_000)
34
+ },
35
+ username: screen_name,
36
+ pinned_tweet_id: Faker::Number.between(from: 1, to: 9_223_372_036_854_775_807).to_s,
37
+ entities: user_entities,
38
+ description: Faker::Lorem.sentence,
39
+ name: Faker::Name.name,
40
+ verified: Faker::Boolean.boolean(true_ratio: 0.1),
41
+ location: Faker::Internet.public_ip_v4_address,
42
+ id: author_id.to_s,
43
+ protected: Faker::Boolean.boolean(true_ratio: 0.1),
44
+ url: url,
45
+ profile_image_url: Faker::Avatar.image(slug: id, size: '48x48'),
46
+ created_at: created_at
47
+ }
48
+ ]
49
+ }
50
+ }
51
+ end
52
+
53
+ ##
54
+ # Produces a random X tweet with default attributes.
55
+ #
56
+ # @param include_user [Boolean] Include user details
57
+ # @param include_media [Boolean] Include user media (photo) details
58
+ # @return [Hash]
59
+ #
60
+ # @example
61
+ # Faker::X.tweet #=> { data: [{:id=>"8821452687517076614", :text=>"Ea et laboriosam vel non."...
62
+ # Faker::X.tweet(include_media: true) # Get a tweet object with a photo media attachment
63
+ # Faker::X.tweet(include_user: true) # Get a tweet object with an user details
64
+ #
65
+ # @faker.version 1.7.3
66
+ def tweet(include_media: false, include_user: false)
67
+ tweet = {}
68
+ tweet_object = tweet_item
69
+ includes = {}
70
+
71
+ if include_media
72
+ media_key = Faker::Number.between(from: 1, to: 9_223_372_036_854_775_807).to_s
73
+
74
+ includes[:media] = media(media_key)
75
+ tweet_object[:attachments] = { media_keys: [media_key] }
76
+ end
77
+
78
+ includes[:users] = user[:includes][:users] if include_user
79
+
80
+ tweet[:data] = [
81
+ tweet_object
82
+ ]
83
+
84
+ unless includes.empty?
85
+ tweet[:includes] = includes
86
+ end
87
+
88
+ tweet
89
+ end
90
+
91
+ ##
92
+ # Produces a random screen_name.
93
+ #
94
+ # @return [String]
95
+ #
96
+ # @example
97
+ # Faker::X.screen_name #=> "audreanne_hackett"
98
+ #
99
+ # @faker.version 1.7.3
100
+ def screen_name
101
+ Faker::Internet.username(specifier: nil, separators: ['_'])[0...20]
102
+ end
103
+
104
+ private
105
+
106
+ def id
107
+ Faker::Number.between(from: 1, to: 9_223_372_036_854_775_807)
108
+ end
109
+
110
+ def created_at
111
+ Faker::Date.between(from: '2006-03-21', to: ::Date.today).to_time.utc.iso8601(3)
112
+ end
113
+
114
+ def url
115
+ "https://t.co/#{Faker::Lorem.characters(number: 10)}"
116
+ end
117
+
118
+ def user_entities
119
+ entities = tweet_entities
120
+
121
+ {
122
+ url: {
123
+ urls: entities[:urls]
124
+ },
125
+ description: {
126
+ hashtags: entities[:hashtags]
127
+ }
128
+ }
129
+ end
130
+
131
+ def tweet_entities
132
+ display_url = Faker::Internet.url(host: 'example.com')
133
+
134
+ {
135
+ urls: [
136
+ {
137
+ start: 0,
138
+ end: 5,
139
+ url: url,
140
+ expanded_url: display_url,
141
+ display_url: display_url.sub('http://', '')
142
+ }
143
+ ],
144
+ hashtags: [
145
+ {
146
+ start: 0,
147
+ end: 5,
148
+ tag: Faker::Lorem.word.capitalize
149
+ }
150
+ ]
151
+ }
152
+ end
153
+
154
+ def media(media_key)
155
+ expanded_url = Faker::LoremFlickr.image(size: '1064x600')
156
+
157
+ [{
158
+ height: Faker::Number.between(to: 1, from: 1000),
159
+ media_key: media_key,
160
+ type: 'photo',
161
+ preview_image_url: expanded_url,
162
+ width: Faker::Number.between(to: 1, from: 2000),
163
+ alt_text: Faker::Lorem.sentence
164
+ }]
165
+ end
166
+
167
+ def tweet_item
168
+ conversation_id = id.to_s
169
+
170
+ {
171
+ id: conversation_id,
172
+ text: Faker::Lorem.sentence,
173
+ lang: sample(%w[en fr es pt it ja]),
174
+ conversation_id: conversation_id,
175
+ created_at: created_at,
176
+ author_id: Faker::Number.between(from: 1, to: 9_223_372_036_854_775_807).to_s,
177
+ public_metrics: {
178
+ retweet_count: Faker::Number.between(to: 1, from: 100),
179
+ reply_count: Faker::Number.between(to: 1, from: 20),
180
+ like_count: Faker::Number.between(to: 1, from: 25),
181
+ quote_count: Faker::Number.between(to: 1, from: 10)
182
+ },
183
+ possibly_sensitive: Faker::Boolean.boolean(true_ratio: 0.1),
184
+ entities: tweet_entities
185
+ }
186
+ end
187
+ end
188
+ end
189
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Default
5
+ if Faker::Config.lazy_loading?
6
+ Faker.lazy_load(self)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Fantasy
5
+ if Faker::Config.lazy_loading?
6
+ Faker.lazy_load(self)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Games
5
+ if Faker::Config.lazy_loading?
6
+ Faker.lazy_load(self)
7
+ end
8
+ end
9
+ end
@@ -2,6 +2,10 @@
2
2
 
3
3
  module Faker
4
4
  class Internet < Base
5
+ if Faker::Config.lazy_loading?
6
+ Faker.lazy_load(self)
7
+ end
8
+
5
9
  # Private, Host, and Link-Local network address blocks as defined in https://en.wikipedia.org/wiki/IPv4#Special-use_addresses
6
10
  PRIVATE_IPV4_ADDRESS_RANGES = [
7
11
  [10..10, 0..255, 0..255, 1..255], # 10.0.0.0/8 - Used for local communications within a private network
@@ -93,8 +97,8 @@ module Faker
93
97
  end
94
98
 
95
99
  sample([
96
- Char.prepare(Name.first_name),
97
- [Name.first_name, Name.last_name].map do |name|
100
+ Char.prepare(Faker::Name.first_name),
101
+ [Faker::Name.first_name, Faker::Name.last_name].map do |name|
98
102
  Char.prepare(name)
99
103
  end.join(sample(separators))
100
104
  ])
@@ -235,7 +239,7 @@ module Faker
235
239
  # @example
236
240
  # Faker::Internet.domain_word #=> "senger"
237
241
  def domain_word
238
- with_locale(:en) { Char.prepare(Company.name.split.first) }
242
+ with_locale(:en) { Char.prepare(Faker::Company.name.split.first) }
239
243
  end
240
244
 
241
245
  ## Returns the domain suffix e.g. com, org, co, biz, info etc.
@@ -267,7 +271,7 @@ module Faker
267
271
  # Faker::Internet.mac_address(prefix: 'aa:44') #=> "aa:44:30:88:6e:95"
268
272
  def mac_address(prefix: '')
269
273
  prefix_digits = prefix.split(':').map { |d| d.to_i(16) }
270
- address_digits = Array.new((6 - prefix_digits.size)) { rand(256) }
274
+ address_digits = Array.new(6 - prefix_digits.size) { rand(256) }
271
275
  (prefix_digits + address_digits).map { |d| format('%02x', d) }.join(':')
272
276
  end
273
277
 
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class JapaneseMedia
5
+ if Faker::Config.lazy_loading?
6
+ Faker.lazy_load(self)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Locations
5
+ if Faker::Config.lazy_loading?
6
+ Faker.lazy_load(self)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Movies
5
+ if Faker::Config.lazy_loading?
6
+ Faker.lazy_load(self)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Music
5
+ class BossaNova < Base
6
+ class << self
7
+ ##
8
+ # Produces the name of a bossa nova artist.
9
+ #
10
+ # @return [String]
11
+ #
12
+ # @example
13
+ # Faker::Music::BossaNova.artist #=> "Tom Jobin"
14
+ #
15
+ # @faker.version 1.8.3
16
+ def artist
17
+ fetch('bossa_nova.artists')
18
+ end
19
+
20
+ ##
21
+ # Produces a bossa nova song.
22
+ #
23
+ # @return [String]
24
+ #
25
+ # @example
26
+ # Faker::Music::BossaNova.song #=> "Chega de Saudade"
27
+ #
28
+ # @faker.version 1.8.3
29
+ def song
30
+ fetch('bossa_nova.songs')
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'music'
4
-
5
3
  module Faker
6
4
  class Music
7
5
  class GratefulDead < Base
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'music'
4
-
5
3
  module Faker
6
4
  class Music
7
5
  class PearlJam < Base
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'music'
4
-
5
3
  module Faker
6
4
  class Music
7
5
  class Rush < Base
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'music'
4
-
5
3
  module Faker
6
4
  class Music
7
5
  class SmashingPumpkins < Base
@@ -2,6 +2,10 @@
2
2
 
3
3
  module Faker
4
4
  class Music < Base
5
+ if Faker::Config.lazy_loading?
6
+ Faker.lazy_load(self)
7
+ end
8
+
5
9
  class << self
6
10
  NOTE_LETTERS = %w[C D E F G A B].freeze
7
11
  ACCIDENTAL_SIGNS = ['b', '#', ''].freeze
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Quotes
5
+ if Faker::Config.lazy_loading?
6
+ Faker.lazy_load(self)
7
+ end
8
+ end
9
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Faker
4
- module Religion
4
+ class Religion
5
5
  class Bible < Base
6
6
  flexible :bible
7
7
 
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Religion
5
+ if Faker::Config.lazy_loading?
6
+ Faker.lazy_load(self)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Sports
5
+ if Faker::Config.lazy_loading?
6
+ Faker.lazy_load(self)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Travel
5
+ if Faker::Config.lazy_loading?
6
+ Faker.lazy_load(self)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class TvShows
5
+ if Faker::Config.lazy_loading?
6
+ Faker.lazy_load(self)
7
+ end
8
+ end
9
+ end
data/lib/faker/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Faker # :nodoc:
4
- VERSION = '3.5.1'
4
+ VERSION = '3.8.0'
5
5
  end
data/lib/faker.rb CHANGED
@@ -5,6 +5,8 @@ mydir = __dir__
5
5
  require 'psych'
6
6
  require 'i18n'
7
7
 
8
+ autoload(:OpenSSL, 'openssl')
9
+
8
10
  Dir.glob(File.join(mydir, 'helpers', '*.rb')).each { |file| require file }
9
11
 
10
12
  I18n.load_path += Dir[File.join(mydir, 'locales', '**/*.yml')]
@@ -36,6 +38,18 @@ module Faker
36
38
  def random
37
39
  Thread.current[:faker_config_random] || Random
38
40
  end
41
+
42
+ def lazy_loading?
43
+ if ENV.key?('FAKER_LAZY_LOAD') && !ENV['FAKER_LAZY_LOAD'].nil?
44
+ %w[true TRUE 1].include?(ENV.fetch('FAKER_LAZY_LOAD', nil))
45
+ else
46
+ Thread.current[:faker_lazy_loading] == true
47
+ end
48
+ end
49
+
50
+ def lazy_loading=(value)
51
+ Thread.current[:faker_lazy_loading] = value
52
+ end
39
53
  end
40
54
  end
41
55
 
@@ -65,8 +79,8 @@ module Faker
65
79
  letterify(numerify(string))
66
80
  end
67
81
 
68
- def generate(as_type, &block)
69
- PositionalGenerator.new(as_type, &block).generate
82
+ def generate(as_type, &)
83
+ PositionalGenerator.new(as_type, &).generate
70
84
  end
71
85
 
72
86
  # Given a regular expression, attempt to generate a string
@@ -93,12 +107,12 @@ module Faker
93
107
  reg
94
108
  .gsub(%r{^/?\^?}, '').gsub(%r{\$?/?$}, '') # Ditch the anchors
95
109
  .gsub(/\{(\d+)\}/, '{\1,\1}').gsub('?', '{0,1}') # All {2} become {2,2} and ? become {0,1}
96
- .gsub(/(\[[^\]]+\])\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # [12]{1,2} becomes [12] or [12][12]
97
- .gsub(/(\([^)]+\))\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # (12|34){1,2} becomes (12|34) or (12|34)(12|34)
98
- .gsub(/(\\?.)\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # A{1,2} becomes A or AA or \d{3} becomes \d\d\d
99
- .gsub(/\((.*?)\)/) { |match| sample(match.gsub(/[()]/, '').split('|')) } # (this|that) becomes 'this' or 'that'
100
- .gsub(/\[([^\]]+)\]/) { |match| match.gsub(/(\w-\w)/) { |range| sample(Array(Range.new(*range.split('-')))) } } # All A-Z inside of [] become C (or X, or whatever)
101
- .gsub(/\[([^\]]+)\]/) { |_match| sample(Regexp.last_match(1).chars) } # All [ABC] become B (or A or C)
110
+ .gsub(/(\[[^\]]++\])\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # [12]{1,2} becomes [12] or [12][12]
111
+ .gsub(/(\([^)]++\))\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # (12|34){1,2} becomes (12|34) or (12|34)(12|34)
112
+ .gsub(/(\\?.)\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # A{1,2} becomes A or AA or \d{3} becomes \d\d\d
113
+ .gsub(/\((.*?)\)/) { |match| sample(match.gsub(/[()]/, '').split('|')) } # (this|that) becomes 'this' or 'that'
114
+ .gsub(/\[([^\]]++)\]/) { |match| match.gsub(/(\w-\w)/) { |range| sample(Array(Range.new(*range.split('-')))) } } # All A-Z inside of [] become C (or X, or whatever)
115
+ .gsub(/\[([^\]]++)\]/) { |_match| sample(Regexp.last_match(1).chars) } # All [ABC] become B (or A or C)
102
116
  .gsub('\d') { |_match| sample(Numbers) }
103
117
  .gsub('\w') { |_match| sample(Letters) }
104
118
  end
@@ -131,7 +145,8 @@ module Faker
131
145
  # formatted translation: e.g., "#{first_name} #{last_name}".
132
146
  def parse(key)
133
147
  fetched = fetch(key)
134
- parts = fetched.scan(/(\(?)#\{([A-Za-z]+\.)?([^}]+)\}([^#]+)?/).map do |prefix, kls, meth, etc|
148
+
149
+ parts = fetched.scan(/(\(?)#\{([A-Za-z]+\.)?([^}]+)\}([^#]++)?/).map do |prefix, kls, meth, etc|
135
150
  # If the token had a class Prefix (e.g., Name.first_name)
136
151
  # grab the constant, otherwise use self
137
152
  cls = kls ? Faker.const_get(kls.chop) : self
@@ -195,7 +210,7 @@ module Faker
195
210
  # name:
196
211
  # girls_name: ["Alice", "Cheryl", "Tatiana"]
197
212
  # Then you can call Faker::Name.girls_name and it will act like #first_name
198
- def method_missing(mth, *args, &block)
213
+ def method_missing(mth, *args, &)
199
214
  super unless flexible_key
200
215
 
201
216
  if (translation = translate("faker.#{flexible_key}.#{mth}"))
@@ -272,7 +287,47 @@ module Faker
272
287
  end
273
288
  end
274
289
  end
290
+
291
+ if Faker::Config.lazy_loading?
292
+ def self.load_path(*constants)
293
+ constants.map do |class_name|
294
+ class_name
295
+ .to_s
296
+ .gsub('::', '/')
297
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
298
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
299
+ .tr('-', '_')
300
+ .downcase
301
+ end.join('/')
302
+ end
303
+
304
+ def self.lazy_load(klass)
305
+ def klass.const_missing(class_name)
306
+ load_path = case class_name
307
+ when :DnD
308
+ Faker.load_path('faker/games/dnd')
309
+ else
310
+ Faker.load_path(name, class_name)
311
+ end
312
+
313
+ begin
314
+ require(load_path)
315
+ rescue LoadError
316
+ require(load_path.gsub('faker/', 'faker/default/'))
317
+ end
318
+
319
+ const_get(class_name)
320
+ end
321
+ end
322
+
323
+ lazy_load(self)
324
+ end
275
325
  end
276
326
 
277
- # require faker objects
278
- Dir.glob(File.join(mydir, 'faker', '/**/*.rb')).each { |file| require file }
327
+ unless Faker::Config.lazy_loading?
328
+ rb_files = []
329
+ rb_files << File.join(mydir, 'faker', '*.rb')
330
+ rb_files << File.join(mydir, 'faker', '/**/*.rb')
331
+
332
+ Dir.glob(rb_files).each { |file| require file }
333
+ end
@@ -103,7 +103,7 @@ module Faker
103
103
  end
104
104
 
105
105
  def self.skip_warning?
106
- skip == true
106
+ @skip == true
107
107
  end
108
108
 
109
109
  def self.skip
@@ -278,8 +278,6 @@ class PositionalGenerator
278
278
  # [2]
279
279
  # ]
280
280
  def build_stack(graph)
281
- require 'set'
282
-
283
281
  terminals = graph.filter_map { |(from, to)| to.nil? && from }
284
282
  stack = [terminals]
285
283
  seen = Set.new(terminals)
@@ -30,7 +30,7 @@ module Faker
30
30
  method_name.to_s.start_with?('faker_') || super
31
31
  end
32
32
 
33
- RetryLimitExceeded = Class.new(StandardError)
33
+ class RetryLimitExceeded < StandardError; end
34
34
 
35
35
  def previous_results
36
36
  Thread.current[:faker_unique_generator_previous_results] ||= {}
@@ -20,7 +20,7 @@ Faker::Hipster.word #=> "kogi"
20
20
 
21
21
  ## How to update a locale with more translations
22
22
 
23
- To update a locale with more translation features, simply add a new field to the .yml file that corresponds to an existing piece of functionality in the "en.yml" file. In this example, that would mean providing Chinese hipster words.
23
+ To update a locale with more translation features, simply add a new field to the `.yml` file that corresponds to an existing piece of functionality in the "en.yml" file. In this example, that would mean providing Chinese hipster words.
24
24
 
25
25
  ```yaml
26
26
  # /lib/locales/zh-CN.yml
@@ -52,5 +52,5 @@ Faker::Config.default_locale = :pt
52
52
  In threaded server environments, e.g., Puma, locale per thread can be set as the following:
53
53
 
54
54
  ```ruby
55
- Faker::Config.locale = :es
55
+ Faker::Config.locale = :es
56
56
  ```