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
@@ -0,0 +1,16 @@
1
+ # require 'spec_helper'
2
+ # require 'wukong'
3
+
4
+ # load Pathname.path_to(:examples, 'munging/airline_flights/identifiers.rb')
5
+
6
+ # describe Airport::IdMapping, :only do
7
+ # it 'loads and reconciles' do
8
+ # described_class.load(Pathname.path_to(:data, 'airline_flights'))
9
+ # #
10
+ # Airport::IdMapping::ID_MAPPINGS.each do |identifier, hsh|
11
+ # hsh.each do |id, id_mapping|
12
+ # # puts [identifier, id, id_mapping.to_tsv].join("\t")
13
+ # end
14
+ # end
15
+ # end
16
+ # end
@@ -0,0 +1,202 @@
1
+ # require 'spec_helper'
2
+ # require 'wukong'
3
+ # require 'gorillib/datetime/parse'
4
+
5
+ # load Pathname.path_to(:examples, 'munging/airline_flights/models.rb')
6
+
7
+ # describe 'Airline Flight Delays Dataset' do
8
+ # let(:example_tuple ){ ["2007", "1", "1", "1", "1232", "1225", "1341", "1340", "WN", "2891", "N351", "69", "75", "54", "1", "7", "SMF", "ONT", "389", "4", "11", "0", "", "0", "0", "0", "0", "0", "0"] }
9
+ # let(:cancelled_tuple_a){ ["2007", "1", "1", "1", "NA", "2030", "NA", "2135", "WN", "2734", "0", "NA", "65", "NA", "NA", "NA", "SNA", "LAS", "226", "0", "0", "1", "A", "0", "0", "0", "0", "0", "0"] }
10
+ # let(:cancelled_tuple_c){ ["2007", "1", "4", "4", "NA", "2120", "NA", "2125", "WN", "1631", "0", "NA", "65", "NA", "NA", "NA", "PHX", "SAN", "304", "0", "0", "1", "C", "0", "0", "0", "0", "0", "0"] }
11
+ # let(:diverted_tuple ){ ["2007", "1", "12", "5", "1054", "1054", "NA", "1209", "EV", "4351", "N857AS", "NA", "135", "NA", "NA", "0", "ATL", "TUL", "674", "0", "11", "0", "", "1", "0", "0", "0", "0", "0"] }
12
+
13
+ # let(:raw_flight ){ RawAirlineFlight.from_tuple(*example_tuple) }
14
+ # let(:raw_cancelled ){ RawAirlineFlight.from_tuple(*cancelled_tuple_a) }
15
+ # let(:raw_diverted ){ RawAirlineFlight.from_tuple(*diverted_tuple) }
16
+ # let(:example_flight ){ raw_flight.to_airline_flight }
17
+ # let(:cancelled_flight ){ raw_cancelled.to_airline_flight }
18
+ # let(:diverted_flight ){ raw_diverted.to_airline_flight }
19
+
20
+ # let(:de_airports_filename ){ Pathname.path_to(:data, 'airline_flights/dataexpo_airports-raw.csv') }
21
+
22
+ # let(:raw_airports_filename ){ Pathname.path_to(:data, 'airline_flights/openflights_airports-raw.csv') }
23
+ # let(:raw_airlines_filename ){ Pathname.path_to(:data, 'airline_flights/openflights_airlines-raw-sample.csv') }
24
+
25
+ # let(:example_flight_attrs) { {
26
+ # flight_datestr: '20070101', unique_carrier: "WN", flight_num: 2891,
27
+ # from_airport: "SMF", into_airport: "ONT", tail_num: "N351", distance_km: 626, day_of_week: 1,
28
+ # crs_dep_itime: 1167654300, crs_arr_itime: 1167658800,
29
+ # act_dep_itime: 1167654720, act_arr_itime: 1167658860,
30
+ # crs_dep_tod: "1225", crs_arr_tod: "1340",
31
+ # act_dep_tod: "1232", act_arr_tod: "1341",
32
+ # crs_duration: 75, act_duration: 69, air_duration: 54, taxi_in_duration: 4, taxi_out_duration: 11,
33
+ # is_diverted: false, is_cancelled: false, cancellation_code: "Z",
34
+ # dep_delay: 7, arr_delay: 1, carrier_delay: 0, weather_delay: 0, nas_delay: 0, security_delay: 0, late_aircraft_delay: 0,
35
+ # } }
36
+
37
+ # describe RawAirlineFlight do
38
+ # subject{ raw_flight }
39
+
40
+ # it 'loads from a hash' do
41
+ # p subject.compact_attributes
42
+ # subject.compact_attributes.should == {
43
+ # date_year: 2007, date_month: 1, date_day: 1, day_of_week: 1,
44
+ # act_arr_tod: "1341", act_dep_tod: "1232",
45
+ # crs_arr_tod: "1340", crs_dep_tod: "1225",
46
+ # # act_arr_itime: 1167658860, act_dep_itime: 1167654720,
47
+ # # crs_arr_itime: 1167658800, crs_dep_itime: 1167654300,
48
+ # unique_carrier: "WN", flight_num: 2891, tail_num: "N351",
49
+ # act_duration: 69, crs_duration: 75, air_duration: 54, arr_delay: 1, dep_delay: 7,
50
+ # from_airport: "SMF", into_airport: "ONT", distance_mi: 389, taxi_in_duration: 4, taxi_out_duration: 11,
51
+ # is_cancelled: false, cancellation_code: "Z", is_diverted: false,
52
+ # carrier_delay: 0, weather_delay: 0, nas_delay: 0, security_delay: 0, late_aircraft_delay: 0,
53
+ # }
54
+ # end
55
+
56
+ # it 'loads cancelled flights OK' do
57
+ # # ff = RawAirlineFlight.fields[:act_dep_itime].type
58
+ # flight = described_class.from_tuple(*cancelled_tuple_a)
59
+ # p flight.compact_attributes
60
+ # flight.compact_attributes.should == {
61
+ # date_year: 2007, date_month: 1, date_day: 1, day_of_week: 1,
62
+ # act_arr_tod: nil, act_dep_tod: nil,
63
+ # crs_arr_tod: "2135", crs_dep_tod: "2030",
64
+ # # act_arr_itime: nil, act_dep_itime: nil,
65
+ # # crs_arr_itime: 1167687300, crs_dep_itime: 1167683400,
66
+ # unique_carrier: "WN", flight_num: 2734, tail_num: nil,
67
+ # act_duration: nil, crs_duration: 65, air_duration: nil, arr_delay: nil, dep_delay: nil,
68
+ # from_airport: "SNA", into_airport: "LAS", distance_mi: 226, taxi_in_duration: 0, taxi_out_duration: 0,
69
+ # is_cancelled: true, cancellation_code: "A", is_diverted: false,
70
+ # carrier_delay: 0, weather_delay: 0, nas_delay: 0, security_delay: 0, late_aircraft_delay: 0,
71
+ # }
72
+ # end
73
+
74
+ # it 'loads diverted flights OK' do
75
+ # # ff = RawAirlineFlight.fields[:act_dep_itime].type
76
+ # flight = described_class.from_tuple(*diverted_tuple)
77
+ # p flight.compact_attributes
78
+ # flight.compact_attributes.should == {
79
+ # date_year: 2007, date_month: 1, date_day: 12, day_of_week: 5,
80
+ # act_arr_tod: nil, act_dep_tod: "1054",
81
+ # crs_arr_tod: "1209", crs_dep_tod: "1054",
82
+ # # act_arr_itime: nil, act_dep_itime: 1168599240,
83
+ # # crs_arr_itime: 1168603740, crs_dep_itime: 1168599240,
84
+ # unique_carrier: "EV", flight_num: 4351, tail_num: "N857AS",
85
+ # act_duration: nil, crs_duration: 135, air_duration: nil, arr_delay: nil, dep_delay: 0,
86
+ # from_airport: "ATL", into_airport: "TUL", distance_mi: 674, taxi_in_duration: 0, taxi_out_duration: 11,
87
+ # is_cancelled: false, cancellation_code: "Z", is_diverted: true,
88
+ # carrier_delay: 0, weather_delay: 0, nas_delay: 0, security_delay: 0, late_aircraft_delay: 0,
89
+ # }
90
+ # end
91
+
92
+ # it 'does dates right' do
93
+ # { normal: [example_tuple, raw_flight],
94
+ # cancelled: [cancelled_tuple_a, raw_cancelled],
95
+ # diverted: [diverted_tuple, raw_diverted],
96
+ # }.each do |label, (raw_values, raw_flight)|
97
+ # [ [raw_flight.act_dep_itime, raw_values[4] ],
98
+ # [raw_flight.crs_dep_itime, raw_values[5] ],
99
+ # [raw_flight.act_arr_itime, raw_values[6] ],
100
+ # [raw_flight.crs_arr_itime, raw_values[7] ],
101
+ # ].each do |itime, hhmm|
102
+ # next unless itime
103
+ # tm = Time.at(itime).utc
104
+ # (tm.hour * 100 + tm.min).to_s.should == hhmm
105
+ # end
106
+ # end
107
+ # end
108
+
109
+ # it 'receives idempotently' do
110
+ # subject.should == RawAirlineFlight.receive(subject.compact_attributes)
111
+ # end
112
+
113
+ # it '#to_airline_flight' do
114
+ # flight = subject.to_airline_flight
115
+ # flight.should be_a(AirlineFlight)
116
+ # flight.compact_attributes.should == example_flight_attrs
117
+ # end
118
+ # end
119
+
120
+ # describe AirlineFlight do
121
+ # subject{ example_flight }
122
+
123
+ # it "makes sense" do
124
+ # { normal: example_flight, cancelled: cancelled_flight, diverted: diverted_flight
125
+ # }.each do |label, flight|
126
+ # linted = subject.lint
127
+ # p [label, linted, flight] unless linted.values.all?
128
+ # linted.values.should be_all
129
+ # end
130
+ # end
131
+
132
+ # it 'has correct field alignment' do
133
+ # described_class.field_names.should == example_flight_attrs.keys
134
+ # described_class.fields.values.map(&:position).should == (0..30).to_a
135
+ # end
136
+
137
+ # it 'calculates local times correctly' do
138
+ # Airport.load(raw_airports_filename)
139
+ # Airport::AIRPORTS.each{|id,airport| puts airport.to_tsv }
140
+ # end
141
+
142
+ # end
143
+
144
+ # describe 'parsing raw' do
145
+ # it 'works' do
146
+ # raw_file = File.open(raw_airlines_filename)
147
+ # raw_file.readline
148
+ # puts AirlineFlight.field_names.map{|fn| fn[0..6] }.join("\t")
149
+ # raw_file.each do |line|
150
+ # tuple = line.split(',')
151
+ # # next unless tuple[23] == "1"
152
+ # raw_flight = RawAirlineFlight.from_tuple(*tuple)
153
+ # flight = raw_flight.to_airline_flight
154
+ # # if not flight.lint.values.all?
155
+ # # p flight.lint.values
156
+ # puts flight.to_tsv
157
+ # # p [
158
+ # # [raw_flight.crs_dep_itime, tuple[5] ],
159
+ # # [raw_flight.crs_arr_itime, tuple[7] ],
160
+ # # (raw_flight.crs_arr_itime - raw_flight.crs_arr_itime),
161
+ # # (raw_flight.crs_arr_itime - raw_flight.crs_dep_itime)/60.0,
162
+ # # raw_flight.crs_duration
163
+ # # ]
164
+ # # end
165
+ # end
166
+ # end
167
+ # end
168
+
169
+ # describe RawDataexpoAirport do
170
+ # it 'works' do
171
+ # puts described_class.field_names.map{|fn| fn[0..6] }.join("\t")
172
+ # raw_airports = RawDataexpoAirport.load_csv(de_airports_filename)
173
+ # raw_airports.each do |airport|
174
+ # puts airport.to_tsv
175
+ # end
176
+ # end
177
+ # end
178
+
179
+ # describe RawOpenflightAirport do
180
+ # it 'works' do
181
+ # puts described_class.field_names.join("\t") # .map{|fn| fn[0..6] }.join("\t")
182
+ # raw_airports = described_class.load_csv(raw_airports_filename)
183
+ # raw_airports.each do |airport|
184
+ # # puts airport.to_tsv
185
+ # linted = airport.lint
186
+ # puts [airport.iata, airport.icao, linted.inspect, airport.to_tsv, ].join("\t") if linted.present?
187
+ # end
188
+ # end
189
+ # end
190
+
191
+ # describe Airport do
192
+ # it 'loads and reconciles' do
193
+ # Airport.load(raw_airports_filename, de_airports_filename)
194
+ # Airport::AIRPORTS.each{|id,airport|
195
+ # #puts airport.to_tsv
196
+ # linted = airport.lint
197
+ # warn [airport.iata, airport.icao, airport.de_iata, "%-25s" % airport.name, linted.inspect].join("\t") if linted.present?
198
+ # }
199
+ # end
200
+ # end
201
+
202
+ # end
@@ -1,21 +1,18 @@
1
1
  require 'spec_helper'
2
- require 'wukong'
3
- require 'wukong/local_runner'
2
+ # require 'wukong'
4
3
 
5
- load Pathname.path_to(:examples, 'text/pig_latin.rb')
4
+ # describe_example_script(:pig_latin, 'text/pig_latin.rb') do
6
5
 
7
- describe 'Pig Latin', :examples_spec => true, :helpers => true do
6
+ # context 'processor' do
7
+ # subject{ Wukong::Widget::PigLatinize.new }
8
+ # it 'breaks text into pig latin' do
9
+ # subject.should_receive(:emit).with("Iway indfay ethay astramipay otay ebay ethay ostmay ensualsay ofway allway ethay altedsay uredcay eatsmay.")
10
+ # subject.process("I find the pastrami to be the most sensual of all the salted cured meats.")
11
+ # end
12
+ # end
8
13
 
9
- context 'processor' do
10
- subject{ Wukong::Widget::PigLatinize.new }
11
- it 'breaks text into pig latin' do
12
- subject.should_receive(:emit).with("Iway indfay ethay astramipay otay ebay ethay ostmay ensualsay ofway allway ethay altedsay uredcay eatsmay.")
13
- subject.process("I find the pastrami to be the most sensual of all the salted cured meats.")
14
- end
15
- end
14
+ # it 'runs' do
15
+ # Wukong::LocalRunner.run(ExampleUniverse.dataflow(:pig_latin), :default)
16
+ # end
16
17
 
17
- it 'runs' do
18
- Wukong::LocalRunner.run(ExampleUniverse.dataflow(:pig_latin), :default)
19
- end
20
-
21
- end
18
+ # end
@@ -1,6 +1,36 @@
1
1
  require 'spec_helper'
2
- require 'wukong'
3
- require 'wukong/local_runner'
2
+ # require 'wukong'
4
3
 
5
- require 'hanuman/graphvizzer'
6
- require 'hanuman/graphviz'
4
+ # require 'hanuman/graphvizzer/gv_presenter'
5
+
6
+ # describe 'cherry_pie' do
7
+
8
+ # # it 'fiddles' do
9
+ # # load(Pathname.path_to(:examples, 'workflow/cherry_pie.rb'))
10
+ # # Wukong.workflow(:cherry_pie) do
11
+ # # Log.dump self
12
+ # #
13
+ # # graph(:crust) do
14
+ # # Log.dump self
15
+ # # action(:bob)
16
+ # # end
17
+ # #
18
+ # # Log.dump graph(:crust)
19
+ # #
20
+ # # end
21
+ # # end
22
+
23
+
24
+ # describe 'Graphviz View', :if => GRAPHVIZ do
25
+ # it 'makes a png' do
26
+ # require Pathname.path_to(:examples, 'workflow/cherry_pie.rb')
27
+
28
+ # gv = Wukong.to_graphviz
29
+
30
+ # basename = Pathname.path_to(:tmp, 'cherry_pie')
31
+ # gv.save(basename, 'png')
32
+ # puts File.read("#{basename}.dot")
33
+ # end
34
+ # end
35
+
36
+ # end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
- require 'hanuman'
3
2
 
4
- describe Hanuman::Graph, :helpers => true do
3
+ describe Hanuman::Graph, :hanuman => true do
5
4
 
6
5
  # it 'makes a tree' do
7
6
  # example_graph.tree.should == {
@@ -15,3 +14,29 @@ describe Hanuman::Graph, :helpers => true do
15
14
  # end
16
15
 
17
16
  end
17
+
18
+ describe Hanuman::GraphBuilder, :hanuman => true do
19
+
20
+ it_behaves_like 'a Stage::Builder'
21
+
22
+ its(:namespace){ should be(Hanuman::Graph) }
23
+
24
+ context '#define' do
25
+ let(:block_arg){ ->(){ def say() "I'm the Juggernaut!" ; end } }
26
+
27
+ it 'evalutes a supplied block itself' do
28
+ subject.label = :juggernaut
29
+ subject.should_receive(:instance_eval).with(&block_arg)
30
+ subject.define(&block_arg)
31
+ end
32
+ end
33
+
34
+ context '#build' do
35
+ end
36
+
37
+ context '#serialize' do
38
+ it 'serializes into a Hash with stages and links' do
39
+ subject.serialize.should include(:stages, :links)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hanuman do
4
+
5
+ it_behaves_like Hanuman::Shortcuts
6
+
7
+ it{ should respond_to(:stage) }
8
+ it{ should respond_to(:graph) }
9
+
10
+ end
@@ -0,0 +1,123 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hanuman::Registry, :hanuman => true do
4
+
5
+ before(:each) do
6
+ @orig_reg = Hanuman.registry.show
7
+ Hanuman.registry.clear!
8
+ end
9
+
10
+ after(:each) do
11
+ Hanuman.registry.clear!
12
+ Hanuman.registry.merge!(@orig_reg)
13
+ end
14
+
15
+ let(:definition){ { :universe => 'Marvel' } }
16
+ let(:builder) { Hanuman::StageBuilder.receive(definition) }
17
+
18
+ context '#create' do
19
+ context 'non-existing entry' do
20
+ it 'creates a new entry for supplied definition' do
21
+ subject.create(:storm, builder).should be true
22
+ subject.should be_registered(:storm)
23
+ subject.retrieve(:storm).should == builder
24
+ end
25
+ end
26
+
27
+ context 'existing' do
28
+ it 'does not create a new entry' do
29
+ subject.create(:storm, builder)
30
+ subject.create(:storm, builder).should be false
31
+ end
32
+ end
33
+ end
34
+
35
+ context '#update' do
36
+ context 'non-existing entry' do
37
+ it 'does not update the entry' do
38
+ subject.update(:rogue, definition).should be false
39
+ subject.should_not be_registered(:rogue)
40
+ end
41
+ end
42
+
43
+ context 'existing' do
44
+ let(:new_definition){ { :universe => 'alternate' } }
45
+
46
+ it 'updates the entry' do
47
+ subject.create(:rogue, builder)
48
+ subject.update(:rogue, new_definition).should be true
49
+ subject.retrieve(:rogue).serialize.should include(new_definition)
50
+ end
51
+ end
52
+ end
53
+
54
+ context '#create_or_update' do
55
+ context 'non-existing entry' do
56
+ it 'creates the entry' do
57
+ subject.should_not be_registered(:cyclops)
58
+ subject.create_or_update(:cyclops, definition).should be true
59
+ subject.retrieve(:cyclops).should == definition
60
+ end
61
+ end
62
+
63
+ context 'existing' do
64
+ let(:new_definition){ { :universe => 'alternate' } }
65
+
66
+ it 'updates the entry' do
67
+ subject.create(:cyclops, builder)
68
+ subject.create_or_update(:cyclops, new_definition).should be true
69
+ subject.retrieve(:cyclops).serialize.should include(new_definition)
70
+ end
71
+ end
72
+ end
73
+
74
+ context '#decorate_with_registry' do
75
+ let(:graph_builder){ Hanuman::GraphBuilder.receive(label: :beastman) }
76
+ let(:definition) { Hanuman::StageBuilder.receive(label: :mystique) }
77
+
78
+ before(:each) do
79
+ subject.create(:mystique, definition)
80
+ subject.decorate_with_registry(graph_builder)
81
+ end
82
+
83
+ it 'decorates a builder with the registry entries as methods' do
84
+ graph_builder.should respond_to(:mystique)
85
+ end
86
+
87
+ it 'decorates using singleton method definitions' do
88
+ graph_builder.dup.should_not respond_to(:mystique)
89
+ end
90
+
91
+ it 'returns an instance of Hanuman::StageBuilder for chaining' do
92
+ graph_builder.send(:mystique).should be_instance_of(Hanuman::StageBuilder)
93
+ end
94
+
95
+ it 'adds the instance of Hanuman::StageBuilder to its :stages attribute when used' do
96
+ graph_builder.stages.should_not include(:mystique)
97
+ graph_builder.send(:mystique)
98
+ graph_builder.stages.should include(:mystique)
99
+ end
100
+
101
+ it 'retrieves the Hanuman::StageBuilder from the registry' do
102
+ Hanuman.registry.should_receive(:retrieve).with(:mystique).and_return(definition)
103
+ graph_builder.send(:mystique)
104
+ end
105
+
106
+ it 'saves updated definitions in its :stages attribute' do
107
+ graph_builder.send(:mystique, for_class: String)
108
+ graph_builder.stages[:mystique].for_class.should == String
109
+ end
110
+
111
+ it 'allows for relabelling of Hanuman::StageBuilders' do
112
+ graph_builder.send(:mystique, label: :colossus)
113
+ graph_builder.stages.should include(:colossus)
114
+ graph_builder.stages.should_not include(:mystique)
115
+ end
116
+ end
117
+
118
+ context '#show' do
119
+ it 'shows what is currently registered' do
120
+ subject.show.should be_a(Hash)
121
+ end
122
+ end
123
+ end