wukong 3.0.0.pre → 3.0.0.pre2

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 (476) hide show
  1. data/.gitignore +46 -33
  2. data/.gitmodules +3 -0
  3. data/.rspec +1 -1
  4. data/.travis.yml +8 -1
  5. data/.yardopts +0 -13
  6. data/Guardfile +4 -6
  7. data/{LICENSE.textile → LICENSE.md} +43 -55
  8. data/README-old.md +422 -0
  9. data/README.md +279 -418
  10. data/Rakefile +21 -5
  11. data/TODO.md +6 -6
  12. data/bin/wu-clean-encoding +31 -0
  13. data/bin/wu-lign +2 -2
  14. data/bin/wu-local +69 -0
  15. data/bin/wu-server +70 -0
  16. data/examples/Gemfile +38 -0
  17. data/examples/README.md +9 -0
  18. data/examples/dataflow/apache_log_line.rb +64 -25
  19. data/examples/dataflow/fibonacci_series.rb +101 -0
  20. data/examples/dataflow/parse_apache_logs.rb +37 -7
  21. data/examples/{dataflow.rb → dataflow/scraper_macro_flow.rb} +0 -0
  22. data/examples/dataflow/simple.rb +4 -4
  23. data/examples/geo.rb +4 -0
  24. data/examples/geo/geo_grids.numbers +0 -0
  25. data/examples/geo/geolocated.rb +331 -0
  26. data/examples/geo/quadtile.rb +69 -0
  27. data/examples/geo/spec/geolocated_spec.rb +247 -0
  28. data/examples/geo/tile_fetcher.rb +77 -0
  29. data/examples/graph/minimum_spanning_tree.rb +61 -61
  30. data/examples/jabberwocky.txt +36 -0
  31. data/examples/models/wikipedia.rb +20 -0
  32. data/examples/munging/Gemfile +8 -0
  33. data/examples/munging/airline_flights/airline.rb +57 -0
  34. data/examples/munging/airline_flights/airline_flights.rake +83 -0
  35. data/{lib/wukong/settings.rb → examples/munging/airline_flights/airplane.rb} +0 -0
  36. data/examples/munging/airline_flights/airport.rb +211 -0
  37. data/examples/munging/airline_flights/airport_id_unification.rb +129 -0
  38. data/examples/munging/airline_flights/airport_ok_chars.rb +4 -0
  39. data/examples/munging/airline_flights/flight.rb +156 -0
  40. data/examples/munging/airline_flights/models.rb +4 -0
  41. data/examples/munging/airline_flights/parse.rb +26 -0
  42. data/examples/munging/airline_flights/reconcile_airports.rb +142 -0
  43. data/examples/munging/airline_flights/route.rb +35 -0
  44. data/examples/munging/airline_flights/tasks.rake +83 -0
  45. data/examples/munging/airline_flights/timezone_fixup.rb +62 -0
  46. data/examples/munging/airline_flights/topcities.rb +167 -0
  47. data/examples/munging/airports/40_wbans.txt +40 -0
  48. data/examples/munging/airports/filter_weather_reports.rb +37 -0
  49. data/examples/munging/airports/join.pig +31 -0
  50. data/examples/munging/airports/to_tsv.rb +33 -0
  51. data/examples/munging/airports/usa_wbans.pig +19 -0
  52. data/examples/munging/airports/usa_wbans.txt +2157 -0
  53. data/examples/munging/airports/wbans.pig +19 -0
  54. data/examples/munging/airports/wbans.txt +2310 -0
  55. data/examples/munging/geo/geo_json.rb +54 -0
  56. data/examples/munging/geo/geo_models.rb +69 -0
  57. data/examples/munging/geo/geonames_models.rb +78 -0
  58. data/examples/munging/geo/iso_codes.rb +172 -0
  59. data/examples/munging/geo/reconcile_countries.rb +124 -0
  60. data/examples/munging/geo/tasks.rake +71 -0
  61. data/examples/munging/rake_helper.rb +62 -0
  62. data/examples/munging/weather/.gitignore +1 -0
  63. data/examples/munging/weather/Gemfile +4 -0
  64. data/examples/munging/weather/Rakefile +28 -0
  65. data/examples/munging/weather/extract_ish.rb +13 -0
  66. data/examples/munging/weather/models/weather.rb +119 -0
  67. data/examples/munging/weather/utils/noaa_downloader.rb +46 -0
  68. data/examples/munging/wikipedia/README.md +34 -0
  69. data/examples/munging/wikipedia/Rakefile +193 -0
  70. data/examples/munging/wikipedia/articles/extract_articles-parsed.rb +79 -0
  71. data/examples/munging/wikipedia/articles/extract_articles-templated.rb +136 -0
  72. data/examples/munging/wikipedia/articles/textualize_articles.rb +54 -0
  73. data/examples/munging/wikipedia/articles/verify_structure.rb +43 -0
  74. data/examples/munging/wikipedia/articles/wp2txt-LICENSE.txt +22 -0
  75. data/examples/munging/wikipedia/articles/wp2txt_article.rb +259 -0
  76. data/examples/munging/wikipedia/articles/wp2txt_utils.rb +452 -0
  77. data/examples/munging/wikipedia/dbpedia/dbpedia_common.rb +4 -0
  78. data/examples/munging/wikipedia/dbpedia/dbpedia_extract_geocoordinates.rb +78 -0
  79. data/examples/munging/wikipedia/dbpedia/extract_links.rb +193 -0
  80. data/examples/munging/wikipedia/dbpedia/sameas_extractor.rb +20 -0
  81. data/examples/munging/wikipedia/n1_subuniverse/n1_nodes.pig +18 -0
  82. data/examples/munging/wikipedia/page_metadata/extract_page_metadata.rb +21 -0
  83. data/examples/munging/wikipedia/page_metadata/extract_page_metadata.rb.old +27 -0
  84. data/examples/munging/wikipedia/pagelinks/augment_pagelinks.pig +29 -0
  85. data/examples/munging/wikipedia/pagelinks/extract_pagelinks.rb +14 -0
  86. data/examples/munging/wikipedia/pagelinks/extract_pagelinks.rb.old +25 -0
  87. data/examples/munging/wikipedia/pagelinks/undirect_pagelinks.pig +29 -0
  88. data/examples/munging/wikipedia/pageviews/augment_pageviews.pig +32 -0
  89. data/examples/munging/wikipedia/pageviews/extract_pageviews.rb +85 -0
  90. data/examples/munging/wikipedia/pig_style_guide.md +25 -0
  91. data/examples/munging/wikipedia/redirects/redirects_page_metadata.pig +19 -0
  92. data/examples/munging/wikipedia/subuniverse/sub_articles.pig +23 -0
  93. data/examples/munging/wikipedia/subuniverse/sub_page_metadata.pig +24 -0
  94. data/examples/munging/wikipedia/subuniverse/sub_pagelinks_from.pig +22 -0
  95. data/examples/munging/wikipedia/subuniverse/sub_pagelinks_into.pig +22 -0
  96. data/examples/munging/wikipedia/subuniverse/sub_pagelinks_within.pig +26 -0
  97. data/examples/munging/wikipedia/subuniverse/sub_pageviews.pig +29 -0
  98. data/examples/munging/wikipedia/subuniverse/sub_undirected_pagelinks_within.pig +24 -0
  99. data/examples/munging/wikipedia/utils/get_namespaces.rb +86 -0
  100. data/examples/munging/wikipedia/utils/munging_utils.rb +68 -0
  101. data/examples/munging/wikipedia/utils/namespaces.json +1 -0
  102. data/examples/rake_helper.rb +85 -0
  103. data/examples/server_logs/geo_ip_mapping/munge_geolite.rb +82 -0
  104. data/examples/server_logs/logline.rb +95 -0
  105. data/examples/server_logs/models.rb +66 -0
  106. data/examples/server_logs/page_counts.pig +48 -0
  107. data/examples/server_logs/server_logs-01-parse-script.rb +13 -0
  108. data/examples/server_logs/server_logs-02-histograms-full.rb +33 -0
  109. data/examples/server_logs/server_logs-02-histograms-mapper.rb +14 -0
  110. data/{old/examples/server_logs/breadcrumbs.rb → examples/server_logs/server_logs-03-breadcrumbs-full.rb} +26 -30
  111. data/examples/server_logs/server_logs-04-page_page_edges-full.rb +40 -0
  112. data/examples/string_reverser.rb +26 -0
  113. data/examples/text/pig_latin.rb +2 -2
  114. data/examples/text/regional_flavor/README.md +14 -0
  115. data/examples/text/regional_flavor/article_wordbags.pig +39 -0
  116. data/examples/text/regional_flavor/j01-article_wordbags.rb +4 -0
  117. data/examples/text/regional_flavor/simple_pig_script.pig +27 -0
  118. data/examples/word_count/accumulator.rb +26 -0
  119. data/examples/word_count/tokenizer.rb +13 -0
  120. data/examples/word_count/word_count.rb +6 -0
  121. data/examples/workflow/cherry_pie.dot +97 -0
  122. data/examples/workflow/cherry_pie.png +0 -0
  123. data/examples/workflow/cherry_pie.rb +61 -26
  124. data/lib/hanuman.rb +34 -7
  125. data/lib/hanuman/graph.rb +55 -31
  126. data/lib/hanuman/graphvizzer.rb +199 -178
  127. data/lib/hanuman/graphvizzer/gv_models.rb +161 -0
  128. data/lib/hanuman/graphvizzer/gv_presenter.rb +97 -0
  129. data/lib/hanuman/link.rb +35 -0
  130. data/lib/hanuman/registry.rb +46 -0
  131. data/lib/hanuman/stage.rb +76 -32
  132. data/lib/wukong.rb +23 -24
  133. data/lib/wukong/boot.rb +87 -0
  134. data/lib/wukong/configuration.rb +8 -0
  135. data/lib/wukong/dataflow.rb +45 -78
  136. data/lib/wukong/driver.rb +99 -0
  137. data/lib/wukong/emitter.rb +22 -0
  138. data/lib/wukong/model/faker.rb +24 -24
  139. data/lib/wukong/model/flatpack_parser/flat.rb +60 -0
  140. data/lib/wukong/model/flatpack_parser/flatpack.rb +4 -0
  141. data/lib/wukong/model/flatpack_parser/lang.rb +46 -0
  142. data/lib/wukong/model/flatpack_parser/parser.rb +55 -0
  143. data/lib/wukong/model/flatpack_parser/tokens.rb +130 -0
  144. data/lib/wukong/processor.rb +60 -114
  145. data/lib/wukong/spec_helpers.rb +81 -0
  146. data/lib/wukong/spec_helpers/integration_driver.rb +144 -0
  147. data/lib/wukong/spec_helpers/integration_driver_matchers.rb +219 -0
  148. data/lib/wukong/spec_helpers/processor_helpers.rb +95 -0
  149. data/lib/wukong/spec_helpers/processor_methods.rb +108 -0
  150. data/lib/wukong/spec_helpers/shared_examples.rb +15 -0
  151. data/lib/wukong/spec_helpers/spec_driver.rb +28 -0
  152. data/lib/wukong/spec_helpers/spec_driver_matchers.rb +195 -0
  153. data/lib/wukong/version.rb +2 -1
  154. data/lib/wukong/widget/filters.rb +311 -0
  155. data/lib/wukong/widget/processors.rb +156 -0
  156. data/lib/wukong/widget/reducers.rb +7 -0
  157. data/lib/wukong/widget/reducers/accumulator.rb +73 -0
  158. data/lib/wukong/widget/reducers/bin.rb +318 -0
  159. data/lib/wukong/widget/reducers/count.rb +61 -0
  160. data/lib/wukong/widget/reducers/group.rb +85 -0
  161. data/lib/wukong/widget/reducers/group_concat.rb +70 -0
  162. data/lib/wukong/widget/reducers/moments.rb +72 -0
  163. data/lib/wukong/widget/reducers/sort.rb +130 -0
  164. data/lib/wukong/widget/serializers.rb +287 -0
  165. data/lib/wukong/widget/sink.rb +10 -52
  166. data/lib/wukong/widget/source.rb +7 -113
  167. data/lib/wukong/widget/utils.rb +46 -0
  168. data/lib/wukong/widgets.rb +6 -0
  169. data/spec/examples/dataflow/fibonacci_series_spec.rb +18 -0
  170. data/spec/examples/dataflow/parsing_spec.rb +12 -11
  171. data/spec/examples/dataflow/simple_spec.rb +32 -6
  172. data/spec/examples/dataflow/telegram_spec.rb +36 -36
  173. data/spec/examples/graph/minimum_spanning_tree_spec.rb +30 -31
  174. data/spec/examples/munging/airline_flights/identifiers_spec.rb +16 -0
  175. data/spec/examples/munging/airline_flights_spec.rb +202 -0
  176. data/spec/examples/text/pig_latin_spec.rb +13 -16
  177. data/spec/examples/workflow/cherry_pie_spec.rb +34 -4
  178. data/spec/hanuman/graph_spec.rb +27 -2
  179. data/spec/hanuman/hanuman_spec.rb +10 -0
  180. data/spec/hanuman/registry_spec.rb +123 -0
  181. data/spec/hanuman/stage_spec.rb +61 -7
  182. data/spec/spec_helper.rb +29 -19
  183. data/spec/support/hanuman_test_helpers.rb +14 -12
  184. data/spec/support/shared_context_for_reducers.rb +37 -0
  185. data/spec/support/shared_examples_for_builders.rb +101 -0
  186. data/spec/support/shared_examples_for_shortcuts.rb +57 -0
  187. data/spec/support/wukong_test_helpers.rb +37 -11
  188. data/spec/wukong/dataflow_spec.rb +77 -55
  189. data/spec/wukong/local_runner_spec.rb +24 -24
  190. data/spec/wukong/model/faker_spec.rb +132 -131
  191. data/spec/wukong/runner_spec.rb +8 -8
  192. data/spec/wukong/widget/filters_spec.rb +61 -0
  193. data/spec/wukong/widget/processors_spec.rb +126 -0
  194. data/spec/wukong/widget/reducers/bin_spec.rb +92 -0
  195. data/spec/wukong/widget/reducers/count_spec.rb +11 -0
  196. data/spec/wukong/widget/reducers/group_spec.rb +20 -0
  197. data/spec/wukong/widget/reducers/moments_spec.rb +36 -0
  198. data/spec/wukong/widget/reducers/sort_spec.rb +26 -0
  199. data/spec/wukong/widget/serializers_spec.rb +92 -0
  200. data/spec/wukong/widget/sink_spec.rb +15 -15
  201. data/spec/wukong/widget/source_spec.rb +65 -41
  202. data/spec/wukong/wukong_spec.rb +10 -0
  203. data/wukong.gemspec +17 -10
  204. metadata +359 -335
  205. data/.document +0 -5
  206. data/VERSION +0 -1
  207. data/bin/hdp-bin +0 -44
  208. data/bin/hdp-bzip +0 -23
  209. data/bin/hdp-cat +0 -3
  210. data/bin/hdp-catd +0 -3
  211. data/bin/hdp-cp +0 -3
  212. data/bin/hdp-du +0 -86
  213. data/bin/hdp-get +0 -3
  214. data/bin/hdp-kill +0 -3
  215. data/bin/hdp-kill-task +0 -3
  216. data/bin/hdp-ls +0 -11
  217. data/bin/hdp-mkdir +0 -2
  218. data/bin/hdp-mkdirp +0 -12
  219. data/bin/hdp-mv +0 -3
  220. data/bin/hdp-parts_to_keys.rb +0 -77
  221. data/bin/hdp-ps +0 -3
  222. data/bin/hdp-put +0 -3
  223. data/bin/hdp-rm +0 -32
  224. data/bin/hdp-sort +0 -40
  225. data/bin/hdp-stream +0 -40
  226. data/bin/hdp-stream-flat +0 -22
  227. data/bin/hdp-stream2 +0 -39
  228. data/bin/hdp-sync +0 -17
  229. data/bin/hdp-wc +0 -67
  230. data/bin/wu-flow +0 -10
  231. data/bin/wu-map +0 -17
  232. data/bin/wu-red +0 -17
  233. data/bin/wukong +0 -17
  234. data/data/CREDITS.md +0 -355
  235. data/data/graph/airfares.tsv +0 -2174
  236. data/data/text/gift_of_the_magi.txt +0 -225
  237. data/data/text/jabberwocky.txt +0 -36
  238. data/data/text/rectification_of_names.txt +0 -33
  239. data/data/twitter/a_atsigns_b.tsv +0 -64
  240. data/data/twitter/a_follows_b.tsv +0 -53
  241. data/data/twitter/tweet.tsv +0 -167
  242. data/data/twitter/twitter_user.tsv +0 -55
  243. data/data/wikipedia/dbpedia-sentences.tsv +0 -1000
  244. data/docpages/INSTALL.textile +0 -92
  245. data/docpages/LICENSE.textile +0 -107
  246. data/docpages/README-elastic_map_reduce.textile +0 -377
  247. data/docpages/README-performance.textile +0 -90
  248. data/docpages/README-wulign.textile +0 -65
  249. data/docpages/UsingWukong-part1-get_ready.textile +0 -17
  250. data/docpages/UsingWukong-part2-ThinkingBigData.textile +0 -75
  251. data/docpages/UsingWukong-part3-parsing.textile +0 -138
  252. data/docpages/_config.yml +0 -39
  253. data/docpages/avro/avro_notes.textile +0 -56
  254. data/docpages/avro/performance.textile +0 -36
  255. data/docpages/avro/tethering.textile +0 -19
  256. data/docpages/bigdata-tips.textile +0 -143
  257. data/docpages/code/api_response_example.txt +0 -20
  258. data/docpages/code/parser_skeleton.rb +0 -38
  259. data/docpages/diagrams/MapReduceDiagram.graffle +0 -0
  260. data/docpages/favicon.ico +0 -0
  261. data/docpages/gem.css +0 -16
  262. data/docpages/hadoop-tips.textile +0 -83
  263. data/docpages/index.textile +0 -92
  264. data/docpages/intro.textile +0 -8
  265. data/docpages/moreinfo.textile +0 -174
  266. data/docpages/news.html +0 -24
  267. data/docpages/pig/PigLatinExpressionsList.txt +0 -122
  268. data/docpages/pig/PigLatinReferenceManual.txt +0 -1640
  269. data/docpages/pig/commandline_params.txt +0 -26
  270. data/docpages/pig/cookbook.html +0 -481
  271. data/docpages/pig/images/hadoop-logo.jpg +0 -0
  272. data/docpages/pig/images/instruction_arrow.png +0 -0
  273. data/docpages/pig/images/pig-logo.gif +0 -0
  274. data/docpages/pig/piglatin_ref1.html +0 -1103
  275. data/docpages/pig/piglatin_ref2.html +0 -14340
  276. data/docpages/pig/setup.html +0 -505
  277. data/docpages/pig/skin/basic.css +0 -166
  278. data/docpages/pig/skin/breadcrumbs.js +0 -237
  279. data/docpages/pig/skin/fontsize.js +0 -166
  280. data/docpages/pig/skin/getBlank.js +0 -40
  281. data/docpages/pig/skin/getMenu.js +0 -45
  282. data/docpages/pig/skin/images/chapter.gif +0 -0
  283. data/docpages/pig/skin/images/chapter_open.gif +0 -0
  284. data/docpages/pig/skin/images/current.gif +0 -0
  285. data/docpages/pig/skin/images/external-link.gif +0 -0
  286. data/docpages/pig/skin/images/header_white_line.gif +0 -0
  287. data/docpages/pig/skin/images/page.gif +0 -0
  288. data/docpages/pig/skin/images/pdfdoc.gif +0 -0
  289. data/docpages/pig/skin/images/rc-b-l-15-1body-2menu-3menu.png +0 -0
  290. data/docpages/pig/skin/images/rc-b-r-15-1body-2menu-3menu.png +0 -0
  291. data/docpages/pig/skin/images/rc-b-r-5-1header-2tab-selected-3tab-selected.png +0 -0
  292. data/docpages/pig/skin/images/rc-t-l-5-1header-2searchbox-3searchbox.png +0 -0
  293. data/docpages/pig/skin/images/rc-t-l-5-1header-2tab-selected-3tab-selected.png +0 -0
  294. data/docpages/pig/skin/images/rc-t-l-5-1header-2tab-unselected-3tab-unselected.png +0 -0
  295. data/docpages/pig/skin/images/rc-t-r-15-1body-2menu-3menu.png +0 -0
  296. data/docpages/pig/skin/images/rc-t-r-5-1header-2searchbox-3searchbox.png +0 -0
  297. data/docpages/pig/skin/images/rc-t-r-5-1header-2tab-selected-3tab-selected.png +0 -0
  298. data/docpages/pig/skin/images/rc-t-r-5-1header-2tab-unselected-3tab-unselected.png +0 -0
  299. data/docpages/pig/skin/print.css +0 -54
  300. data/docpages/pig/skin/profile.css +0 -181
  301. data/docpages/pig/skin/screen.css +0 -587
  302. data/docpages/pig/tutorial.html +0 -1059
  303. data/docpages/pig/udf.html +0 -1509
  304. data/docpages/tutorial.textile +0 -283
  305. data/docpages/usage.textile +0 -195
  306. data/docpages/wutils.textile +0 -263
  307. data/examples/dataflow/complex.rb +0 -11
  308. data/examples/dataflow/donuts.rb +0 -13
  309. data/examples/tiny_count/jabberwocky_output.tsv +0 -92
  310. data/examples/word_count.rb +0 -48
  311. data/examples/workflow/fiddle.rb +0 -24
  312. data/lib/away/escapement.rb +0 -129
  313. data/lib/away/exe.rb +0 -11
  314. data/lib/away/experimental.rb +0 -5
  315. data/lib/away/from_file.rb +0 -52
  316. data/lib/away/job.rb +0 -56
  317. data/lib/away/job/rake_compat.rb +0 -17
  318. data/lib/away/registry.rb +0 -79
  319. data/lib/away/runner.rb +0 -276
  320. data/lib/away/runner/execute.rb +0 -121
  321. data/lib/away/script.rb +0 -161
  322. data/lib/away/script/hadoop_command.rb +0 -240
  323. data/lib/away/source/file_list_source.rb +0 -15
  324. data/lib/away/source/looper.rb +0 -18
  325. data/lib/away/task.rb +0 -219
  326. data/lib/hanuman/action.rb +0 -21
  327. data/lib/hanuman/chain.rb +0 -4
  328. data/lib/hanuman/graphviz.rb +0 -74
  329. data/lib/hanuman/resource.rb +0 -6
  330. data/lib/hanuman/slot.rb +0 -87
  331. data/lib/hanuman/slottable.rb +0 -220
  332. data/lib/wukong/bad_record.rb +0 -15
  333. data/lib/wukong/event.rb +0 -44
  334. data/lib/wukong/local_runner.rb +0 -55
  335. data/lib/wukong/mapred.rb +0 -3
  336. data/lib/wukong/universe.rb +0 -48
  337. data/lib/wukong/widget/filter.rb +0 -81
  338. data/lib/wukong/widget/gibberish.rb +0 -123
  339. data/lib/wukong/widget/monitor.rb +0 -26
  340. data/lib/wukong/widget/reducer.rb +0 -66
  341. data/lib/wukong/widget/stringifier.rb +0 -50
  342. data/lib/wukong/workflow.rb +0 -22
  343. data/lib/wukong/workflow/command.rb +0 -42
  344. data/old/config/emr-example.yaml +0 -48
  345. data/old/examples/README.txt +0 -17
  346. data/old/examples/contrib/jeans/README.markdown +0 -165
  347. data/old/examples/contrib/jeans/data/normalized_sizes +0 -3
  348. data/old/examples/contrib/jeans/data/orders.tsv +0 -1302
  349. data/old/examples/contrib/jeans/data/sizes +0 -3
  350. data/old/examples/contrib/jeans/normalize.rb +0 -20
  351. data/old/examples/contrib/jeans/sizes.rb +0 -55
  352. data/old/examples/corpus/bnc_word_freq.rb +0 -44
  353. data/old/examples/corpus/bucket_counter.rb +0 -47
  354. data/old/examples/corpus/dbpedia_abstract_to_sentences.rb +0 -86
  355. data/old/examples/corpus/sentence_bigrams.rb +0 -53
  356. data/old/examples/corpus/sentence_coocurrence.rb +0 -66
  357. data/old/examples/corpus/stopwords.rb +0 -138
  358. data/old/examples/corpus/words_to_bigrams.rb +0 -53
  359. data/old/examples/emr/README.textile +0 -110
  360. data/old/examples/emr/dot_wukong_dir/credentials.json +0 -7
  361. data/old/examples/emr/dot_wukong_dir/emr.yaml +0 -69
  362. data/old/examples/emr/dot_wukong_dir/emr_bootstrap.sh +0 -33
  363. data/old/examples/emr/elastic_mapreduce_example.rb +0 -28
  364. data/old/examples/network_graph/adjacency_list.rb +0 -74
  365. data/old/examples/network_graph/breadth_first_search.rb +0 -72
  366. data/old/examples/network_graph/gen_2paths.rb +0 -68
  367. data/old/examples/network_graph/gen_multi_edge.rb +0 -112
  368. data/old/examples/network_graph/gen_symmetric_links.rb +0 -64
  369. data/old/examples/pagerank/README.textile +0 -6
  370. data/old/examples/pagerank/gen_initial_pagerank_graph.pig +0 -57
  371. data/old/examples/pagerank/pagerank.rb +0 -72
  372. data/old/examples/pagerank/pagerank_initialize.rb +0 -42
  373. data/old/examples/pagerank/run_pagerank.sh +0 -21
  374. data/old/examples/sample_records.rb +0 -33
  375. data/old/examples/server_logs/apache_log_parser.rb +0 -15
  376. data/old/examples/server_logs/nook.rb +0 -48
  377. data/old/examples/server_logs/nook/faraday_dummy_adapter.rb +0 -94
  378. data/old/examples/server_logs/user_agent.rb +0 -40
  379. data/old/examples/simple_word_count.rb +0 -82
  380. data/old/examples/size.rb +0 -61
  381. data/old/examples/stats/avg_value_frequency.rb +0 -86
  382. data/old/examples/stats/binning_percentile_estimator.rb +0 -140
  383. data/old/examples/stats/data/avg_value_frequency.tsv +0 -3
  384. data/old/examples/stats/rank_and_bin.rb +0 -173
  385. data/old/examples/stupidly_simple_filter.rb +0 -40
  386. data/old/examples/word_count.rb +0 -75
  387. data/old/graph/graphviz_builder.rb +0 -580
  388. data/old/graph_easy/Attributes.pm +0 -4181
  389. data/old/graph_easy/Graphviz.pm +0 -2232
  390. data/old/wukong.rb +0 -18
  391. data/old/wukong/and_pig.rb +0 -38
  392. data/old/wukong/bad_record.rb +0 -18
  393. data/old/wukong/datatypes.rb +0 -24
  394. data/old/wukong/datatypes/enum.rb +0 -127
  395. data/old/wukong/datatypes/fake_types.rb +0 -17
  396. data/old/wukong/decorator.rb +0 -28
  397. data/old/wukong/encoding/asciize.rb +0 -108
  398. data/old/wukong/extensions.rb +0 -16
  399. data/old/wukong/extensions/array.rb +0 -18
  400. data/old/wukong/extensions/blank.rb +0 -93
  401. data/old/wukong/extensions/class.rb +0 -189
  402. data/old/wukong/extensions/date_time.rb +0 -53
  403. data/old/wukong/extensions/emittable.rb +0 -69
  404. data/old/wukong/extensions/enumerable.rb +0 -79
  405. data/old/wukong/extensions/hash.rb +0 -167
  406. data/old/wukong/extensions/hash_keys.rb +0 -16
  407. data/old/wukong/extensions/hash_like.rb +0 -150
  408. data/old/wukong/extensions/hashlike_class.rb +0 -47
  409. data/old/wukong/extensions/module.rb +0 -2
  410. data/old/wukong/extensions/pathname.rb +0 -27
  411. data/old/wukong/extensions/string.rb +0 -65
  412. data/old/wukong/extensions/struct.rb +0 -17
  413. data/old/wukong/extensions/symbol.rb +0 -11
  414. data/old/wukong/filename_pattern.rb +0 -74
  415. data/old/wukong/helper.rb +0 -7
  416. data/old/wukong/helper/stopwords.rb +0 -195
  417. data/old/wukong/helper/tokenize.rb +0 -35
  418. data/old/wukong/logger.rb +0 -38
  419. data/old/wukong/periodic_monitor.rb +0 -72
  420. data/old/wukong/schema.rb +0 -269
  421. data/old/wukong/script.rb +0 -286
  422. data/old/wukong/script/avro_command.rb +0 -5
  423. data/old/wukong/script/cassandra_loader_script.rb +0 -40
  424. data/old/wukong/script/emr_command.rb +0 -168
  425. data/old/wukong/script/hadoop_command.rb +0 -237
  426. data/old/wukong/script/local_command.rb +0 -41
  427. data/old/wukong/store.rb +0 -10
  428. data/old/wukong/store/base.rb +0 -27
  429. data/old/wukong/store/cassandra.rb +0 -10
  430. data/old/wukong/store/cassandra/streaming.rb +0 -75
  431. data/old/wukong/store/cassandra/struct_loader.rb +0 -21
  432. data/old/wukong/store/cassandra_model.rb +0 -91
  433. data/old/wukong/store/chh_chunked_flat_file_store.rb +0 -37
  434. data/old/wukong/store/chunked_flat_file_store.rb +0 -48
  435. data/old/wukong/store/conditional_store.rb +0 -57
  436. data/old/wukong/store/factory.rb +0 -8
  437. data/old/wukong/store/flat_file_store.rb +0 -89
  438. data/old/wukong/store/key_store.rb +0 -51
  439. data/old/wukong/store/null_store.rb +0 -15
  440. data/old/wukong/store/read_thru_store.rb +0 -22
  441. data/old/wukong/store/tokyo_tdb_key_store.rb +0 -33
  442. data/old/wukong/store/tyrant_rdb_key_store.rb +0 -57
  443. data/old/wukong/store/tyrant_tdb_key_store.rb +0 -20
  444. data/old/wukong/streamer.rb +0 -30
  445. data/old/wukong/streamer/accumulating_reducer.rb +0 -83
  446. data/old/wukong/streamer/base.rb +0 -126
  447. data/old/wukong/streamer/counting_reducer.rb +0 -25
  448. data/old/wukong/streamer/filter.rb +0 -20
  449. data/old/wukong/streamer/instance_streamer.rb +0 -15
  450. data/old/wukong/streamer/json_streamer.rb +0 -21
  451. data/old/wukong/streamer/line_streamer.rb +0 -12
  452. data/old/wukong/streamer/list_reducer.rb +0 -31
  453. data/old/wukong/streamer/rank_and_bin_reducer.rb +0 -145
  454. data/old/wukong/streamer/record_streamer.rb +0 -14
  455. data/old/wukong/streamer/reducer.rb +0 -11
  456. data/old/wukong/streamer/set_reducer.rb +0 -14
  457. data/old/wukong/streamer/struct_streamer.rb +0 -48
  458. data/old/wukong/streamer/summing_reducer.rb +0 -29
  459. data/old/wukong/streamer/uniq_by_last_reducer.rb +0 -51
  460. data/old/wukong/typed_struct.rb +0 -12
  461. data/spec/away/encoding_spec.rb +0 -32
  462. data/spec/away/exe_spec.rb +0 -20
  463. data/spec/away/flow_spec.rb +0 -82
  464. data/spec/away/graph_spec.rb +0 -6
  465. data/spec/away/job_spec.rb +0 -15
  466. data/spec/away/rake_compat_spec.rb +0 -9
  467. data/spec/away/script_spec.rb +0 -81
  468. data/spec/hanuman/graphviz_spec.rb +0 -29
  469. data/spec/hanuman/slot_spec.rb +0 -2
  470. data/spec/support/examples_helper.rb +0 -10
  471. data/spec/support/streamer_test_helpers.rb +0 -6
  472. data/spec/support/wukong_widget_helpers.rb +0 -66
  473. data/spec/wukong/processor_spec.rb +0 -109
  474. data/spec/wukong/widget/filter_spec.rb +0 -99
  475. data/spec/wukong/widget/stringifier_spec.rb +0 -51
  476. data/spec/wukong/workflow/command_spec.rb +0 -5
@@ -1,32 +1,31 @@
1
- require 'multi_json'
2
-
3
1
  require 'configliere'
4
2
  require 'gorillib/logger/log'
5
- require 'gorillib/some'
6
- require 'gorillib/builder'
7
- require 'gorillib/model/serialization'
8
-
9
- require 'wukong/settings'
3
+ require 'vayacondios-client'
4
+ require 'multi_json'
10
5
 
11
6
  require 'hanuman'
12
7
 
13
- #
14
- # Dataflow specific
15
- #
16
- require 'wukong/universe'
17
- require 'wukong/dataflow'
18
- require 'wukong/event'
8
+ require 'wukong/processor'
9
+ require 'wukong/driver'
19
10
 
20
- require 'wukong/processor' # processes records in series
21
- require 'wukong/widget/filter' # passes through only records that meet `accept?`
22
- require 'wukong/widget/source' # generates raw records from outside
23
- require 'wukong/widget/sink' # dispatch raw records to outside
24
- require 'wukong/widget/stringifier' # converts raw blobs into structured records and vice/versa
25
- require 'wukong/mapred' # the standard stream-sort-group-stream map/reduce flow
26
- require 'wukong/local_runner'
27
- require 'wukong/bad_record'
11
+ require 'wukong/emitter'
12
+ require 'wukong/dataflow'
13
+ require 'wukong/configuration'
14
+ require 'wukong/widgets'
28
15
 
16
+ # The Wukong module will contain all code for Wukong's core (like
17
+ # Processors and Dataflows) as well as all plugins.
29
18
  #
30
- # Workflow Specific
31
- #
32
- require 'wukong/workflow/command'
19
+ # Plugins are expected to own their own namespace within Wukong,
20
+ # e.g. - Wukong::Hadoop, Wukong::Storm, &c.
21
+ module Wukong
22
+ extend Hanuman::Shortcuts
23
+
24
+ # A common error class intended to be raised by code within Wukong
25
+ # or its plugins.
26
+ Error = Class.new(StandardError)
27
+
28
+ add_shortcut_method_for(:processor, ProcessorBuilder)
29
+ add_shortcut_method_for(:dataflow, DataflowBuilder)
30
+
31
+ end
@@ -0,0 +1,87 @@
1
+ module Wukong
2
+
3
+ # Boots Wukong, reading any and all relevant `settings` for your
4
+ # processors.
5
+ #
6
+ # This is most useful for any script which wants to run within a
7
+ # deploy. See Wukong::Deploy for more details.
8
+ #
9
+ # @param [Configliere::Param] settings the relevant settings object that should be configured to boot within a deploy pack
10
+ def self.boot! settings
11
+ # First we load the deploy pack's environment, but only if we seem
12
+ # to be running within a deploy pack.
13
+ Boot.load_environment if in_deploy_pack?
14
+
15
+ # Next pass the `settings` to the Deploy pack itself to add
16
+ # options it needs.
17
+ Deploy.configure(settings) if loaded_deploy_pack?
18
+
19
+ # Resolve the `settings` so we can capture all the options we need
20
+ # from the command line, the environment, &c.
21
+ settings.resolve!
22
+
23
+ # Now boot the deploy pack itself, passing in its known location
24
+ # and the `settings`
25
+ Deploy.boot!(settings, Boot.deploy_pack_dir) if loaded_deploy_pack?
26
+ end
27
+
28
+ # Is execution likely happening within a deploy pack?
29
+ #
30
+ # See Wukong::Deploy for more information on deploy packs.
31
+ #
32
+ # @return [true, false]
33
+ def self.in_deploy_pack?
34
+ return @in_deploy_pack unless @in_deploy_pack.nil?
35
+ @in_deploy_pack = (Boot.deploy_pack_dir != '/')
36
+ end
37
+
38
+ # Have we already loaded the environment of a deploy pack?
39
+ #
40
+ # See Wukong::Deploy for more information on deploy packs.
41
+ #
42
+ # @return [true, false]
43
+ def self.loaded_deploy_pack?
44
+ in_deploy_pack? && defined?(::Wukong::Deploy)
45
+ end
46
+
47
+ # Lets Wukong bootstrap by requiring an enclosing deploy pack's
48
+ # environment file if available.
49
+ #
50
+ # We use a simple heuristic (presence of 'Gemfile' and
51
+ # 'config/environment.rb' in a non-root parent directory) to
52
+ # determine whether or not we are in a deploy pack.
53
+ module Boot
54
+
55
+ # Return the directory of the enclosing deploy pack. Will return
56
+ # the root ('/') if no deeper directory is identified as a deploy
57
+ # pack.
58
+ #
59
+ # @return [String]
60
+ def self.deploy_pack_dir
61
+ return @deploy_pack_dir if @deploy_pack_dir
62
+ wd = Dir.pwd
63
+ parent = File.dirname(wd)
64
+ until wd == parent
65
+ return wd if File.exist?(File.join(wd, 'Gemfile')) && File.exist?(File.join(wd, 'config', 'environment.rb'))
66
+ wd = parent
67
+ parent = File.dirname(wd)
68
+ end
69
+ @deploy_pack_dir = wd
70
+ end
71
+
72
+ # The default environment file that will be require'd when
73
+ # booting.
74
+ #
75
+ # @return [String]
76
+ def self.environment_file
77
+ File.join(deploy_pack_dir, 'config', 'environment.rb')
78
+ end
79
+
80
+ # Load the actual deploy pack environment. Will not swallow any
81
+ # load errors.
82
+ def self.load_environment
83
+ require environment_file
84
+ end
85
+ end
86
+
87
+ end
@@ -0,0 +1,8 @@
1
+ module Wukong
2
+ module Local
3
+
4
+ # All local configuration for Wukong lives within this object.
5
+ Configuration = Configliere::Param.new unless defined? Configuration
6
+
7
+ end
8
+ end
@@ -1,102 +1,69 @@
1
1
  module Wukong
2
+ class DataflowBuilder < Hanuman::GraphBuilder
2
3
 
3
- #
4
- # Describe a dataflow of sources, processors and sinks.
5
- #
6
- #
7
- class Dataflow < Hanuman::Graph
8
- include Hanuman::SplatInputs
9
- include Hanuman::SplatOutputs
4
+ def describe desc
5
+ @description = desc
6
+ end
10
7
 
11
- # * defines the named input slot, if it doesn't exist
12
- # * wires the given stage to that input slot
13
- # * returns the named input slot
14
- def input(slot_name, default_stage = nil)
15
- if not splat_inslots.include?(slot_name)
16
- slot = Hanuman::InputSlot.new(:name => slot_name, :stage => self)
17
- self.splat_inslots << slot
18
- else
19
- slot = splat_inslots[slot_name]
20
- end
21
- if default_stage.present?
22
- self.add_stage(default_stage) if not self.stages.include?(default_stage)
23
- slot.input(default_stage)
8
+ def description
9
+ @description
10
+ end
11
+
12
+ def namespace() Wukong::Dataflow ; end
13
+
14
+ def handle_dsl_arguments_for(stage, *args, &action)
15
+ options = args.extract_options!
16
+ stage.merge!(options.merge(action: action).compact)
17
+ stage
18
+ end
19
+
20
+ def linkable_name(direction)
21
+ case direction
22
+ when :in then directed_sort.first
23
+ when :out then directed_sort.last
24
24
  end
25
- slot.input
26
25
  end
27
26
 
28
- def output(slot_name, default_stage = nil)
29
- if not splat_outslots.include?(slot_name)
30
- slot = Hanuman::OutputSlot.new(:name => slot_name, :stage => self)
31
- self.splat_outslots << slot
27
+ def method_missing(name, *args, &blk)
28
+ if stages[name]
29
+ handle_dsl_arguments_for(stages[name], *args, &blk)
32
30
  else
33
- slot = splat_outslots[slot_name]
34
- end
35
- if default_stage.present?
36
- self.add_stage(default_stage) if not self.stages.include?(default_stage)
37
- slot.output(default_stage)
31
+ super
38
32
  end
39
- slot.output
40
33
  end
34
+
35
+ end
36
+
37
+ class Dataflow < Hanuman::Graph
41
38
 
42
- # FIXME: only handles one output slot
43
- def process(rec)
44
- input(:default).output.process(rec)
45
- # stages.to_a.first.process(rec)
39
+ def has_input?(stage)
40
+ links.any?{ |link| link.into == stage }
46
41
  end
47
-
48
- def set_output(sink)
49
- stages.to_a.last.set_output sink
42
+
43
+ def has_output?(stage)
44
+ links.any?{ |link| link.from == stage }
50
45
  end
51
46
 
52
- #
53
- # lifecycle
54
- #
55
-
56
- def setup
57
- stages.each_value{|stage| stage.setup}
47
+ def connected?(stage)
48
+ input = has_input?(stage) || stages[stage].is_a?(Wukong::Source)
49
+ output = has_output?(stage) || stages[stage].is_a?(Wukong::Sink)
50
+ input && output
58
51
  end
59
52
 
60
- # FIXME -- this is ugly, and evidence to consider in the "Where does an input live" conundrum
61
- # ... or it means that we're thinking about message propogation wrong.
62
-
63
- def stop
64
- source_stages.each{|stage| stage.stop}
65
- process_stages.each{|stage| stage.stop}
66
- sink_stages.each{|stage| stage.stop}
53
+ def complete?
54
+ stages.all?{ |(name, stage)| connected? name }
67
55
  end
68
56
 
69
- def source_stages() stages.to_a.select{|st| st.is_a?(Wukong::Source) } end
70
- def process_stages() stages.to_a.select{|st| (not st.is_a?(Wukong::Source)) && (not st.is_a?(Wukong::Sink)) } end
71
- def sink_stages() stages.to_a.select{|st| st.is_a?(Wukong::Sink) } end
72
-
73
- def drive(slot_name)
74
- raise StandardError, "No source wired up input slot '#{slot_name.inspect}' of #{self.inspect} #{self.attributes}" unless has_input?(slot_name)
75
- input(slot_name).drive
57
+ def setup
58
+ directed_sort.each{ |name| stages[name].setup }
76
59
  end
77
60
 
78
- #
79
- # Processor helpers
80
- #
81
-
82
- def reject(re_or_block=nil, &block)
83
- raise ArgumentError, "Supply a block or regular expression, not both" if re_or_block && block
84
- if re_or_block.is_a?(Regexp)
85
- add_stage(Widget::RegexpRejecter.new(:pattern => re_or_block))
86
- else
87
- block ||= re_or_block
88
- add_stage(Widget::ProcRejecter.new(block))
89
- end
61
+ def run
62
+ stages[directed_sort.first].run
90
63
  end
91
64
 
92
- def select(re_or_block=nil, &block)
93
- raise ArgumentError, "Supply a block or regular expression, not both" if re_or_block && block
94
- if re_or_block.is_a?(Regexp)
95
- add_stage(Widget::RegexpFilter.new(:pattern => re_or_block))
96
- else
97
- block ||= re_or_block
98
- add_stage(Widget::ProcFilter.new(block))
99
- end
65
+ def stop
66
+ directed_sort.each{ |name| stages[name].stop }
100
67
  end
101
68
 
102
69
  end
@@ -0,0 +1,99 @@
1
+ module Wukong
2
+ class Driver
3
+
4
+ class << self
5
+ def run(dataflow, options)
6
+ new(dataflow, options).run!
7
+ end
8
+ end
9
+
10
+ def lookup(label)
11
+ builder = Wukong.registry.retrieve(label)
12
+ builder.build(@settings)
13
+ end
14
+
15
+ def wire(flow)
16
+ using = @settings[:wiring] || :emitter
17
+ if flow.complete?
18
+ flow.links.each do |link|
19
+ Hanuman::LinkFactory.connect(using, flow.stages[link.from], flow.stages[link.into])
20
+ end
21
+ end
22
+ flow
23
+ end
24
+ end
25
+
26
+ class LocalDriver < Driver
27
+ attr_accessor :dataflow, :source
28
+
29
+ def initialize(dataflow, options = {})
30
+ builder = (Wukong.registry.retrieve(dataflow) or raise Error.new("No such processor or dataflow: #{dataflow.inspect}"))
31
+ dataflow = builder.build(options)
32
+ @dataflow = dataflow.respond_to?(:stages) ? dataflow.directed_sort.map{ |name| dataflow.stages[name] } : [ dataflow ]
33
+ @dataflow << Wukong.registry.retrieve(:stdout).build
34
+ @source = Wukong.registry.retrieve(:stdin).build
35
+ end
36
+
37
+ def emitter
38
+ @emitter ||= ProcEmitter.new(dataflow)
39
+ end
40
+
41
+ def stage_iterator(stage)
42
+ return dataflow.first if stage.nil?
43
+ position = dataflow.find_index(stage)
44
+ dataflow[position + 1]
45
+ end
46
+
47
+ def next_record(&blk)
48
+ trap('SIGINT'){ break }
49
+ source.process(&blk)
50
+ end
51
+
52
+ def run!
53
+ dataflow.each(&:setup)
54
+ next_record do |record|
55
+ emitter.send_through_dataflow(record)
56
+ end
57
+ dataflow.each do |stage|
58
+ stage.finalize(&emitter.advance(stage)) if stage.respond_to?(:finalize)
59
+ stage.stop
60
+ end
61
+ nil
62
+ end
63
+ end
64
+ end
65
+
66
+ class ProcEmitter
67
+
68
+ attr_accessor :dataflow
69
+
70
+ def initialize(dataflow)
71
+ @dataflow = dataflow
72
+ end
73
+
74
+ def to_proc
75
+ return @wiring if @wiring
76
+ @wiring = Proc.new do |stage, record|
77
+ stage.process(record, &advance(stage)) if stage
78
+ end
79
+ end
80
+
81
+ def send_through_dataflow(record)
82
+ self.call(dataflow.first, record)
83
+ end
84
+
85
+ def advance(stage)
86
+ next_stage = stage_iterator(stage)
87
+ self.to_proc.curry.call(next_stage)
88
+ end
89
+
90
+ def stage_iterator(stage)
91
+ position = dataflow.find_index(stage)
92
+ dataflow[position + 1]
93
+ end
94
+
95
+ def call(*args)
96
+ to_proc.call(*args)
97
+ end
98
+
99
+ end
@@ -0,0 +1,22 @@
1
+ module Wukong
2
+ class Emitter < Hanuman::DirectedLink
3
+
4
+ def initialize(from, into)
5
+ @from = from
6
+ @into = into
7
+ @from.write_attribute(:emitter, self)
8
+ end
9
+
10
+ def call(record)
11
+ into.process(record)
12
+ end
13
+
14
+ def to_s
15
+ "#<#{self.class}(#{from.label} -> #{into.label})>"
16
+ end
17
+
18
+ end
19
+
20
+ Hanuman::LinkFactory.register(:emitter, ->(from_stage, into_stage){ Wukong::Emitter.new(from_stage, into_stage) })
21
+
22
+ end
@@ -109,28 +109,28 @@ module Gorillib::Factory
109
109
  nil
110
110
  end
111
111
  end
112
-
113
- class StringFactory ; def fake_value() receive(Wukong::Faker::Helpers.fake_word) ; end ; end
114
- class GuidFactory ; def fake_value() receive(UUIDTools::UUID.random_create.to_s) ; end ; end
115
- class HostnameFactory ; def fake_value() receive(Wukong::Faker::Helpers.fake_hostname) ; end ; end
116
- class IpAddressFactory ; def fake_value() receive(Wukong::Faker::Helpers.fake_ip_addresss) ; end ; end
117
-
118
- class SymbolFactory ; def fake_value() receive(Wukong::Faker::Helpers.fake_identifier) ; end ; end
119
- class PathnameFactory ; def fake_value() receive(Wukong::Faker::Helpers.fake_filename) ; end ; end
120
-
121
- class IntegerFactory ; def fake_value(opts={}) receive(Wukong::Faker::Helpers.fake_integer(opts)) ; end ; end
122
- class BignumFactory ; def fake_value(opts={}) super({:min => 2**68, :max => 2**90}.merge(opts)) ; end ; end
123
-
124
- class FloatFactory ; def fake_value(opts={}) receive(Wukong::Faker::Helpers.fake_float(opts)) ; end ; end
125
- class ComplexFactory ; def fake_value() receive(Kernel.rand, Kernel.rand) ; end ; end
126
- class RationalFactory ; def fake_value() receive(Kernel.rand.to_r) ; end ; end
127
-
128
- class TimeFactory ; def fake_value() receive(Time.now) ; end ; end
129
-
130
- class ExceptionFactory ; def fake_value() Exception.constants.sample ; end ; end
131
-
132
- class NilFactory ; def fake_value() nil ; end ; end
133
- class TrueFactory ; def fake_value() true ; end ; end
134
- class FalseFactory ; def fake_value() false ; end ; end
135
- class BooleanFactory ; def fake_value() [true, false].sample ; end ; end
112
+
113
+ StringFactory.class_eval { def fake_value() receive(Wukong::Faker::Helpers.fake_word) ; end }
114
+ GuidFactory.class_eval { def fake_value() receive(UUIDTools::UUID.random_create.to_s) ; end }
115
+ HostnameFactory.class_eval { def fake_value() receive(Wukong::Faker::Helpers.fake_hostname) ; end }
116
+ IpAddressFactory.class_eval{ def fake_value() receive(Wukong::Faker::Helpers.fake_ip_addresss) ; end }
117
+
118
+ SymbolFactory.class_eval { def fake_value() receive(Wukong::Faker::Helpers.fake_identifier) ; end }
119
+ PathnameFactory.class_eval { def fake_value() receive(Wukong::Faker::Helpers.fake_filename) ; end }
120
+
121
+ IntegerFactory.class_eval { def fake_value(opts={}) receive(Wukong::Faker::Helpers.fake_integer(opts)) ; end }
122
+ BignumFactory.class_eval { def fake_value(opts={}) super({:min => 2**68, :max => 2**90}.merge(opts)) ; end }
123
+
124
+ FloatFactory.class_eval { def fake_value(opts={}) receive(Wukong::Faker::Helpers.fake_float(opts)) ; end }
125
+ ComplexFactory.class_eval { def fake_value() receive(Kernel.rand, Kernel.rand) ; end }
126
+ RationalFactory.class_eval { def fake_value() receive(Kernel.rand.to_r) ; end }
127
+
128
+ TimeFactory.class_eval { def fake_value() receive(Time.now) ; end }
129
+
130
+ ExceptionFactory.class_eval{ def fake_value() Exception.constants.sample ; end }
131
+
132
+ NilFactory.class_eval { def fake_value() nil ; end }
133
+ TrueFactory.class_eval { def fake_value() true ; end }
134
+ FalseFactory.class_eval { def fake_value() false ; end }
135
+ BooleanFactory.class_eval { def fake_value() [true, false].sample ; end }
136
136
  end