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,12 +0,0 @@
1
- class TypedStruct < Struct
2
- def self.new *members_types
3
- members, mtypes = members_types.transpose
4
- klass = Struct.new *members.map(&:to_sym)
5
- klass.class_eval do
6
- cattr_accessor :mtypes, :members_types
7
- self.mtypes = mtypes
8
- self.members_types = Hash.zip(members, mtypes)
9
- end
10
- klass
11
- end
12
- end
@@ -1,32 +0,0 @@
1
- # require 'spec_helper'
2
- # require 'wukong/encoding'
3
- #
4
- # describe "Wukong encoding" do
5
- #
6
- # it 'en/decodes to xml by default' do
7
- # Wukong.encode_str("&" ).should == '&amp;'
8
- # Wukong.decode_str("&amp;" ).should == '&'
9
- # end
10
- # it 'en/decodes to xml with :xml' do
11
- # Wukong.encode_str("&", :xml ).should == '&amp;'
12
- # Wukong.decode_str("&amp;", :xml ).should == '&'
13
- # end
14
- # it 'url en/decodes with :url' do
15
- # Wukong.encode_str("&", :url ).should == '%26'
16
- # Wukong.decode_str("%26", :url ).should == '&'
17
- # end
18
- # { "'" => "&apos;", "\t" => "&#9;", "\n" => "&#10;", nil => '',}.each do |raw, enc|
19
- # it 'encodes #{raw} to #{enc}' do
20
- # Wukong.encode_str(raw, :xml ).should == enc
21
- # end
22
- # it 'decodes #{enc} to #{raw}' do
23
- # Wukong.decode_str(enc, :xml ).should == raw.to_s
24
- # end
25
- # end
26
- # ["normal_string with %punctuation should `not be molested", ""].each do |str|
27
- # it 'doesn\'t change #{str}' do
28
- # Wukong.encode_str(str, :xml ).should == str
29
- # end
30
- # end
31
- #
32
- # end
@@ -1,20 +0,0 @@
1
- # require 'spec_helper'
2
- # require 'wukong'
3
- #
4
- # describe 'auto runner for scripts', :helpers => true do
5
- #
6
- # context 'at exit hook' do
7
- #
8
- # it 'defines a hook to run on exit'
9
- #
10
- # it 'does not run a script twice'
11
- #
12
- # it 'runs a script based on its invoked name (so that it works with symlinks)'
13
- #
14
- # end
15
- #
16
- # end
17
- #
18
- # describe 'wukong shell at exit hook' do
19
- # it 'runs pry at correct point'
20
- # end
@@ -1,82 +0,0 @@
1
- require 'spec_helper'
2
- require 'wukong'
3
-
4
- # describe 'wukong', :helpers => true do
5
- # subject{ described_class.new(:example) }
6
- #
7
- # describe Wukong::Flow do
8
- # let(:test_sink){ test_array_sink }
9
- # let(:example_flow) do
10
- # test_sink = test_sink()
11
- # Wukong.flow(:simple) do
12
- # source(:iter, 1..100) | limit(7) | test_sink
13
- # end
14
- # end
15
- #
16
- # context '#add_stage' do
17
- # it 'creates right subclass of Wukong::Source' do
18
- # subject.add_stage(:source, :iter, []).should be_a(Wukong::Source::Iter)
19
- # end
20
- # end
21
- #
22
- # it 'works with a simple example' do
23
- # example_flow.run
24
- # test_array_sink.records.should == (1..7).to_a
25
- # end
26
- #
27
- # # context '#run' do
28
- # # let(:test_sink){ mock }
29
- # # it 'announces events and calls methods in right order' do
30
- # # test_sink = test_sink()
31
- # # test_sink.should_receive(:tell).with(:beg_stream).ordered
32
- # # test_sink.should_receive(:call).exactly(7).times.ordered
33
- # # test_sink.should_receive(:finally).once.ordered
34
- # # test_sink.should_receive(:tell).with(:end_stream).ordered
35
- # # example_flow.run
36
- # # end
37
- # # end
38
- #
39
- # context '#stdin' do
40
- # its(:stdin){ should be_a(Wukong::Source::Iter) }
41
- # end
42
- # context '#stdout' do
43
- # its(:stdout){ should be_a(Wukong::Sink::Stdout) }
44
- # end
45
- # context '#stderr' do
46
- # its(:stderr){ should be_a(Wukong::Sink::Stderr) }
47
- # end
48
- #
49
- # end
50
- #
51
- # describe Wukong do
52
- # context '.streamer' do
53
- # subject{ Wukong.streamer('from_meth'){ def call(rec) rec.reverse ; end ; def bob() 1 ; end } }
54
- # it 'raises an error if the handle is not a valid identifier' do
55
- # ->{ Wukong.streamer('1love') }.should raise_error(ArgumentError, /no funny/)
56
- # ->{ Wukong.streamer('this/that') }.should raise_error(ArgumentError, /no funny/)
57
- # ->{ Wukong.streamer('This::That') }.should raise_error(ArgumentError, /no funny/)
58
- # end
59
- #
60
- # it{ should < Wukong::Streamer }
61
- # it{ should be_method_defined(:call) }
62
- # it{ should be_method_defined(:bob) }
63
- #
64
- # it 'defines a constant in Wukong::Streamer' do
65
- # subject.to_s.should == 'Wukong::Streamer::FromMeth'
66
- # Wukong::Streamer.should be_const_defined(:FromMeth)
67
- # end
68
- # it 'raises if already defined' do
69
- # subject
70
- # ->{ Wukong.streamer('from_meth') }.should raise_error(ArgumentError, /already defined/i)
71
- # end
72
- #
73
- # it 'works as expected' do
74
- # subject.new.call("hi mom").should == "mom ih"
75
- # subject.new.bob.should == 1
76
- # end
77
- #
78
- # after{ Wukong::Streamer.send(:remove_const, :FromMeth) if Wukong::Streamer.const_defined?(:FromMeth) }
79
- # end
80
- # end
81
- #
82
- # end
@@ -1,6 +0,0 @@
1
- # require 'spec_helper'
2
- # require 'wukong'
3
- #
4
- # describe Wukong::Graph, :helpers => true do
5
- #
6
- # end
@@ -1,15 +0,0 @@
1
- # require 'spec_helper'
2
- # require 'wukong'
3
- #
4
- # describe Wukong::Job, :helpers => true do
5
- #
6
- # context '#output_dir' do
7
- # it 'has filename helpers'
8
- # end
9
- #
10
- # context '#dry_run' do
11
- # it 'does nothing when dry run flag is set'
12
- #
13
- # it 'announces each foregone action using Log.info'
14
- # end
15
- # end
@@ -1,9 +0,0 @@
1
- # require 'spec_helper'
2
- # require 'wukong'
3
- #
4
- # describe 'rake compatibility', :helpers => true do
5
- # it 'loads rake'
6
- # it 'warns if the rake DSL is included at global level'
7
- #
8
- # it 'plays nice with Rails'
9
- # end
@@ -1,81 +0,0 @@
1
- # require 'spec_helper'
2
- # require 'wukong/runner/hadoop'
3
- #
4
- # describe "Wukong::Runner::Hadoop" do
5
- # before do
6
- # ARGV.replace []
7
- # @script = Wukong::Script.new 'mapper', 'reducer'
8
- # end
9
- #
10
- # describe 'initialize' do
11
- # it 'sets :reduce_tasks to 0 if reducer_klass is nil and no reduce_command or explicit setting' do
12
- # @script = Wukong::Script.new 'mapper', nil
13
- # @script.options[:reduce_tasks].should == 0
14
- # end
15
- # it 'respects :reduce_tasks if set even if reducer_klass is nil' do
16
- # @script = Wukong::Script.new 'mapper', nil, :reduce_tasks => 1
17
- # @script.options[:reduce_tasks].should == 1
18
- # end
19
- # it "doesn't set :reduce_tasks reduce_command is given" do
20
- # @script = Wukong::Script.new 'mapper', nil, :reduce_command => 1
21
- # @script.options[:reduce_tasks].should be_nil
22
- # end
23
- # it 'sets mapper_klass in initializer' do
24
- # @script.mapper_klass.should == 'mapper'
25
- # end
26
- # it 'sets reducer_klass in initializer' do
27
- # @script.reducer_klass.should == 'reducer'
28
- # end
29
- # end
30
- #
31
- # describe 'child processes' do
32
- # it 'calls self if a mapper_klass is set' do
33
- # @script.should_receive(:ruby_interpreter_path).and_return('/path/to/ruby')
34
- # @script.should_receive(:this_script_filename).and_return('/path/to/this_script')
35
- # @script.map_command.should == %Q{/path/to/ruby /path/to/this_script --map }
36
- # end
37
- # it 'calls default_mapper if nil mapper_klass and no map_command is set' do
38
- # @script = Wukong::Script.new nil, 'reducer', :default_mapper => 'default_mapper'
39
- # @script.map_command.should == 'default_mapper'
40
- # end
41
- # it 'calls map_command if nil mapper_klass and map_command is set' do
42
- # @script = Wukong::Script.new nil, 'reducer', :map_command => 'map_command', :default_mapper => 'default_mapper'
43
- # @script.map_command.should == 'map_command'
44
- # end
45
- #
46
- # it 'calls self if a reducer_klass is set' do
47
- # @script.should_receive(:ruby_interpreter_path).and_return('/path/to/ruby')
48
- # @script.should_receive(:this_script_filename).and_return('/path/to/this_script')
49
- # @script.reduce_command.should == %Q{/path/to/ruby /path/to/this_script --reduce }
50
- # end
51
- # it 'calls default_reducer if nil reducer_klass and no reduce_command is set' do
52
- # @script = Wukong::Script.new 'mapper', nil, :default_reducer => 'default_reducer'
53
- # @script.reduce_command.should == 'default_reducer'
54
- # end
55
- # it 'calls reduce_command if nil reducer_klass and reduce_command is set' do
56
- # @script = Wukong::Script.new 'mapper', nil, :reduce_command => 'reduce_command', :default_reducer => 'default_reducer'
57
- # @script.reduce_command.should == 'reduce_command'
58
- # end
59
- #
60
- # it 'runs script | sort | script when in local mode' do
61
- # @script.should_receive(:run_mode).and_return('local')
62
- # @script.should_receive(:map_command).and_return('map_command')
63
- # @script.should_receive(:reduce_command).and_return('reduce_command')
64
- # @script.runner_command("/path/in", "/path/out").should == %Q{ cat '/path/in' | map_command | sort | reduce_command > '/path/out'}
65
- # end
66
- #
67
- # it 'calls out to hadoop when in non-local mode' do
68
- # @script.should_receive(:run_mode).and_return('hadoop')
69
- # @script.should_receive(:hadoop_command).and_return('hadoop_command whee!')
70
- # @script.runner_command("/path/in", "/path/out").should == 'hadoop_command whee!'
71
- # end
72
- # end
73
- #
74
- # describe 'runner phase'
75
- # it 'preserves non-internal-to-wukong params in non_wukong_params' do
76
- # @script.options[:foo] = 'bar'
77
- # @script.non_wukong_params.should == "--foo=bar"
78
- # end
79
- #
80
- #
81
- # end
@@ -1,29 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require 'wukong'
4
- require 'hanuman/graphvizzer'
5
- require 'hanuman/graphviz'
6
-
7
- describe 'Graphviz View' do
8
- describe 'Cherry Pie Example', :if => GRAPHVIZ, :examples_spec => true, :helpers => true do
9
- it 'makes a png' do
10
- require Pathname.path_to(:examples, 'workflow/cherry_pie.rb')
11
- gv = Warrant.to_graphviz
12
-
13
- basename = Pathname.path_to(:tmp, 'cherry_pie')
14
- gv.save(basename, 'png')
15
- # puts File.read("#{basename}.dot")
16
- end
17
- end
18
-
19
- describe 'Telegram Dataflow Example', :if => GRAPHVIZ, :examples_spec => true, :helpers => true do
20
- it 'makes a png' do
21
- require Pathname.path_to(:examples, 'dataflow/telegram.rb')
22
- gv = ExampleUniverse.to_graphviz
23
-
24
- basename = Pathname.path_to(:tmp, 'telegram')
25
- gv.save(basename, 'png')
26
- # puts File.read("#{basename}.dot")
27
- end
28
- end
29
- end
@@ -1,2 +0,0 @@
1
- require 'spec_helper'
2
- require 'hanuman'
@@ -1,10 +0,0 @@
1
- RSpec::Core::DSL.module_eval do
2
- def describe_example_script(example_name, source_file, attrs={}, &block)
3
- load Pathname.path_to(:examples, source_file)
4
-
5
- describe "Example: #{example_name}", attrs.merge(:examples_spec => true, :helpers => true) do
6
- subject{ ExampleUniverse.dataflow(example_name) }
7
- instance_eval(&block)
8
- end
9
- end
10
- end
@@ -1,6 +0,0 @@
1
-
2
- shared_context 'streamer', :streamers => true do
3
- let(:identity_streamer){ Wukong::Streamer::Identity.new }
4
-
5
- let(:mock_record){ mock }
6
- end
@@ -1,66 +0,0 @@
1
- shared_context 'widgets', :helpers => true do
2
- let(:sample_dataflow){ Wukong.dataflow(:sample) }
3
- let(:next_stage){ mock('next stage') }
4
-
5
- def mock_next_stage(obj=nil)
6
- (obj ||= subject).set_output next_stage
7
- end
8
- end
9
-
10
- shared_examples_for 'a processor' do
11
-
12
- it{ should respond_to(:process) }
13
- it{ should respond_to(:setup) }
14
- it{ should respond_to(:stop) }
15
- it{ should respond_to(:notify) }
16
- it{ should respond_to(:report) }
17
- its(:report){ should be_a(Hash) }
18
- end
19
-
20
- shared_examples_for "a filter processor" do |objects|
21
- it_behaves_like 'a processor'
22
-
23
- it 'accepts good objects' do
24
- objects[:good].each do |obj|
25
- subject.select?(obj).should be_true
26
- subject.reject?(obj).should be_false
27
- end
28
- end unless objects[:good].empty?
29
-
30
- it 'rejects bad objects' do
31
- objects[:bad].each do |obj|
32
- subject.select?(obj).should be_false
33
- subject.reject?(obj).should be_true
34
- end
35
- end unless objects[:bad].empty?
36
-
37
- context '#process' do
38
- before{ mock_next_stage }
39
-
40
- objects[:good].each do |obj|
41
- it "passes along objects like #{obj.inspect}" do
42
- next_stage.should_receive(:process).with(obj)
43
- subject.process(obj)
44
- end
45
- end unless objects[:good].empty?
46
- objects[:bad].each do |obj|
47
- it "drops objects like #{obj.inspect}" do
48
- next_stage.should_not_receive(:process)
49
- subject.process(obj)
50
- end
51
- end unless objects[:bad].empty?
52
-
53
- it "passes along good objects if select? is true" do
54
- subject.stub(:select?).and_return(true)
55
- subject.stub(:reject?).and_return(false)
56
- next_stage.should_receive(:process).with(mock_record)
57
- subject.process(mock_record)
58
- end
59
- it "drops objects if reject? is true" do
60
- subject.stub(:select?).and_return(false)
61
- subject.stub(:reject?).and_return(true)
62
- next_stage.should_not_receive(:process)
63
- subject.process(mock_record)
64
- end
65
- end
66
- end
@@ -1,109 +0,0 @@
1
- require 'spec_helper'
2
- require 'wukong'
3
-
4
- describe :processors, :helpers => true, :widgets => true do
5
- subject{ described_class.new }
6
- let(:mock_dataflow){ md = mock('dataflow') ; md }
7
-
8
- describe Wukong::Processor do
9
- it_behaves_like 'it can be linked from'
10
- it_behaves_like 'it can be linked into'
11
- end
12
-
13
- describe Wukong::Map do
14
- it_behaves_like 'a processor'
15
- let(:sample_proc){ ->(rec){ rec.reverse } }
16
- subject{ described_class.new(sample_proc) }
17
-
18
- it 'emits whatever the proc does' do
19
- subject.should_receive(:emit).with("won ytineres")
20
- subject.process("serenity now")
21
- end
22
-
23
- it 'accepts a proc or block arg' do
24
- subject = sample_dataflow.map(->(rec){ rec.reverse })
25
- subject.should_receive(:emit).with("won ytineres")
26
- subject.process("serenity now")
27
- end
28
-
29
- it 'swallows a nil result' do
30
- sample_proc.should_receive(:call).with(mock_val).and_return(nil)
31
- subject.should_not_receive(:emit)
32
- subject.process(mock_val)
33
- end
34
-
35
- it 'registers a dataflow helper `map`' do
36
- st = sample_dataflow.map{|rec| rec.reverse }
37
- st.should be_a(described_class)
38
- end
39
- end
40
-
41
- describe Wukong::Foreach do
42
- it_behaves_like 'a processor'
43
- let(:sample_proc){ ->(rec){ emit rec.reverse } }
44
- subject{ described_class.new(sample_proc) }
45
-
46
- it 'calls the proc' do
47
- subject.should_receive(:emit).with("won ytineres")
48
- subject.process("serenity now")
49
- end
50
-
51
- it 'does not call emit on your behalf' do
52
- subject = sample_dataflow.foreach{|rec| rec.reverse }
53
- mock_val.stub(:reverse)
54
- subject.should_not_receive(:emit)
55
- subject.process(mock_val)
56
- end
57
-
58
- it 'accepts a proc or block arg' do
59
- subject = sample_dataflow.foreach{|rec| emit rec.reverse }
60
- subject.should_receive(:emit).with("won ytineres")
61
- subject.process("serenity now")
62
- end
63
-
64
- it 'registers a dataflow helper `foreach`' do
65
- st = sample_dataflow.foreach{|rec| rec.reverse }
66
- st.should be_a(described_class)
67
- end
68
- end
69
-
70
- describe Wukong::Flatten do
71
- it_behaves_like 'a processor'
72
- it 'emits each item in each input' do
73
- subject.set_output test_sink
74
- [ [:this, :that], [], 1..5, { :a => :b} ].each{|rec| subject.process(rec) }
75
- test_sink.records.should == [:this, :that, 1, 2, 3, 4, 5, [:a, :b]]
76
- end
77
- it 'registers a dataflow helper `flatten`' do
78
- st = sample_dataflow.flatten
79
- st.should be_a(described_class)
80
- end
81
- end
82
-
83
- describe Wukong::AsIs do
84
- it_behaves_like 'a processor'
85
- it 'emits each record' do
86
- subject.should_receive(:emit).with(:this)
87
- subject.should_receive(:emit).with(:that)
88
- [:this, :that].each{|rec| subject.process(rec) }
89
- end
90
- it 'registers a dataflow helper `as_is`' do
91
- st = sample_dataflow.as_is
92
- st.should be_a(described_class)
93
- end
94
- end
95
-
96
- describe Wukong::Null do
97
- it_behaves_like 'a processor'
98
- it 'emits each record' do
99
- subject.should_not_receive(:emit)
100
- [:this, :that].each{|rec| subject.process(rec) }
101
- end
102
- it 'registers a dataflow helper `null`' do
103
- st = sample_dataflow.null
104
- st.should be_a(described_class)
105
- end
106
- end
107
-
108
-
109
- end