metry 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. data/History.txt +5 -0
  2. data/Manifest.txt +376 -0
  3. data/README.txt +62 -0
  4. data/Rakefile +23 -0
  5. data/TODO +10 -0
  6. data/example/example.rb +22 -0
  7. data/features/app_tracking.feature +11 -0
  8. data/features/basic_tracking.feature +88 -0
  9. data/features/sample_application.feature +12 -0
  10. data/features/step_definitions/tracking.rb +35 -0
  11. data/features/step_definitions/web.rb +31 -0
  12. data/features/support/env.rb +22 -0
  13. data/lib/metry.rb +19 -0
  14. data/lib/metry/experiment.rb +25 -0
  15. data/lib/metry/memory.rb +27 -0
  16. data/lib/metry/rack/tracking.rb +51 -0
  17. data/lib/metry/tokyo.rb +153 -0
  18. data/radiant/example/CHANGELOG +611 -0
  19. data/radiant/example/CONTRIBUTORS +168 -0
  20. data/radiant/example/INSTALL +38 -0
  21. data/radiant/example/LICENSE +21 -0
  22. data/radiant/example/README +60 -0
  23. data/radiant/example/Rakefile +21 -0
  24. data/radiant/example/config/boot.rb +161 -0
  25. data/radiant/example/config/database.yml +20 -0
  26. data/radiant/example/config/environment.rb +83 -0
  27. data/radiant/example/config/environments/cucumber.rb +18 -0
  28. data/radiant/example/config/environments/development.rb +17 -0
  29. data/radiant/example/config/environments/production.rb +19 -0
  30. data/radiant/example/config/environments/test.rb +36 -0
  31. data/radiant/example/config/routes.rb +1 -0
  32. data/radiant/example/db/schema.rb +112 -0
  33. data/radiant/example/features/metry.feature +139 -0
  34. data/radiant/example/features/step_definitions/experiments.rb +12 -0
  35. data/radiant/example/features/step_definitions/radiant.rb +14 -0
  36. data/radiant/example/features/step_definitions/tracking.rb +35 -0
  37. data/radiant/example/features/step_definitions/web.rb +22 -0
  38. data/radiant/example/features/support/env.rb +52 -0
  39. data/radiant/example/public/.htaccess +40 -0
  40. data/radiant/example/public/404.html +8 -0
  41. data/radiant/example/public/500.html +8 -0
  42. data/radiant/example/public/dispatch.cgi +10 -0
  43. data/radiant/example/public/dispatch.fcgi +24 -0
  44. data/radiant/example/public/dispatch.rb +10 -0
  45. data/radiant/example/public/favicon.ico +0 -0
  46. data/radiant/example/public/images/admin/add-child.png +0 -0
  47. data/radiant/example/public/images/admin/brown-bottom-line.gif +0 -0
  48. data/radiant/example/public/images/admin/clear-page-cache.png +0 -0
  49. data/radiant/example/public/images/admin/collapse.png +0 -0
  50. data/radiant/example/public/images/admin/expand.png +0 -0
  51. data/radiant/example/public/images/admin/layout.png +0 -0
  52. data/radiant/example/public/images/admin/minus.png +0 -0
  53. data/radiant/example/public/images/admin/new-homepage.png +0 -0
  54. data/radiant/example/public/images/admin/new-layout.png +0 -0
  55. data/radiant/example/public/images/admin/new-snippet.png +0 -0
  56. data/radiant/example/public/images/admin/new-user.png +0 -0
  57. data/radiant/example/public/images/admin/page.png +0 -0
  58. data/radiant/example/public/images/admin/plus.png +0 -0
  59. data/radiant/example/public/images/admin/remove-disabled.png +0 -0
  60. data/radiant/example/public/images/admin/remove.png +0 -0
  61. data/radiant/example/public/images/admin/snippet.png +0 -0
  62. data/radiant/example/public/images/admin/spinner.gif +0 -0
  63. data/radiant/example/public/images/admin/view-site.gif +0 -0
  64. data/radiant/example/public/images/admin/virtual-page.png +0 -0
  65. data/radiant/example/public/javascripts/admin/admin.js +149 -0
  66. data/radiant/example/public/javascripts/admin/ruledtable.js +13 -0
  67. data/radiant/example/public/javascripts/admin/sitemap.js +132 -0
  68. data/radiant/example/public/javascripts/admin/tabcontrol.js +133 -0
  69. data/radiant/example/public/javascripts/application.js +2 -0
  70. data/radiant/example/public/javascripts/controls.js +963 -0
  71. data/radiant/example/public/javascripts/dragdrop.js +973 -0
  72. data/radiant/example/public/javascripts/effects.js +1128 -0
  73. data/radiant/example/public/javascripts/pngfix.js +39 -0
  74. data/radiant/example/public/javascripts/prototype.js +4320 -0
  75. data/radiant/example/public/javascripts/string.js +17 -0
  76. data/radiant/example/public/robots.txt +1 -0
  77. data/radiant/example/public/stylesheets/admin/main.css +640 -0
  78. data/radiant/example/script/about +3 -0
  79. data/radiant/example/script/autospec +5 -0
  80. data/radiant/example/script/breakpointer +3 -0
  81. data/radiant/example/script/console +3 -0
  82. data/radiant/example/script/cucumber +8 -0
  83. data/radiant/example/script/dbconsole +3 -0
  84. data/radiant/example/script/extension +5 -0
  85. data/radiant/example/script/generate +18 -0
  86. data/radiant/example/script/performance/benchmarker +3 -0
  87. data/radiant/example/script/performance/profiler +3 -0
  88. data/radiant/example/script/performance/request +3 -0
  89. data/radiant/example/script/process/inspector +3 -0
  90. data/radiant/example/script/process/reaper +3 -0
  91. data/radiant/example/script/process/spawner +3 -0
  92. data/radiant/example/script/process/spinner +3 -0
  93. data/radiant/example/script/runner +3 -0
  94. data/radiant/example/script/server +3 -0
  95. data/radiant/example/script/spec +5 -0
  96. data/radiant/example/script/spec_server +116 -0
  97. data/radiant/example/script/version +5 -0
  98. data/radiant/extension/README +3 -0
  99. data/radiant/extension/Rakefile +120 -0
  100. data/radiant/extension/lib/metry_tags.rb +25 -0
  101. data/radiant/extension/lib/tasks/metry_extension_tasks.rake +28 -0
  102. data/radiant/extension/metry_extension.rb +24 -0
  103. data/test/shared.rb +6 -0
  104. data/test/test_tokyo.rb +14 -0
  105. data/vendor/rufus-tokyo/CHANGELOG.txt +112 -0
  106. data/vendor/rufus-tokyo/CREDITS.txt +27 -0
  107. data/vendor/rufus-tokyo/LICENSE.txt +21 -0
  108. data/vendor/rufus-tokyo/README.txt +310 -0
  109. data/vendor/rufus-tokyo/Rakefile +118 -0
  110. data/vendor/rufus-tokyo/TODO.txt +25 -0
  111. data/vendor/rufus-tokyo/doc/decision_table.numbers +0 -0
  112. data/vendor/rufus-tokyo/doc/rdoc-style.css +320 -0
  113. data/vendor/rufus-tokyo/lib/rufus-edo.rb +3 -0
  114. data/vendor/rufus-tokyo/lib/rufus-tokyo.rb +3 -0
  115. data/vendor/rufus-tokyo/lib/rufus/edo.rb +39 -0
  116. data/vendor/rufus-tokyo/lib/rufus/edo/README.txt +106 -0
  117. data/vendor/rufus-tokyo/lib/rufus/edo/cabcore.rb +333 -0
  118. data/vendor/rufus-tokyo/lib/rufus/edo/cabinet/abstract.rb +219 -0
  119. data/vendor/rufus-tokyo/lib/rufus/edo/cabinet/table.rb +159 -0
  120. data/vendor/rufus-tokyo/lib/rufus/edo/error.rb +36 -0
  121. data/vendor/rufus-tokyo/lib/rufus/edo/ntyrant.rb +4 -0
  122. data/vendor/rufus-tokyo/lib/rufus/edo/ntyrant/abstract.rb +137 -0
  123. data/vendor/rufus-tokyo/lib/rufus/edo/ntyrant/table.rb +141 -0
  124. data/vendor/rufus-tokyo/lib/rufus/edo/tabcore.rb +567 -0
  125. data/vendor/rufus-tokyo/lib/rufus/tokyo.rb +58 -0
  126. data/vendor/rufus-tokyo/lib/rufus/tokyo/cabinet/abstract.rb +568 -0
  127. data/vendor/rufus-tokyo/lib/rufus/tokyo/cabinet/lib.rb +230 -0
  128. data/vendor/rufus-tokyo/lib/rufus/tokyo/cabinet/table.rb +753 -0
  129. data/vendor/rufus-tokyo/lib/rufus/tokyo/cabinet/util.rb +425 -0
  130. data/vendor/rufus-tokyo/lib/rufus/tokyo/config.rb +161 -0
  131. data/vendor/rufus-tokyo/lib/rufus/tokyo/dystopia.rb +43 -0
  132. data/vendor/rufus-tokyo/lib/rufus/tokyo/dystopia/lib.rb +65 -0
  133. data/vendor/rufus-tokyo/lib/rufus/tokyo/dystopia/words.rb +71 -0
  134. data/vendor/rufus-tokyo/lib/rufus/tokyo/hmethods.rb +111 -0
  135. data/vendor/rufus-tokyo/lib/rufus/tokyo/query.rb +102 -0
  136. data/vendor/rufus-tokyo/lib/rufus/tokyo/transactions.rb +74 -0
  137. data/vendor/rufus-tokyo/lib/rufus/tokyo/ttcommons.rb +59 -0
  138. data/vendor/rufus-tokyo/lib/rufus/tokyo/tyrant.rb +35 -0
  139. data/vendor/rufus-tokyo/lib/rufus/tokyo/tyrant/abstract.rb +146 -0
  140. data/vendor/rufus-tokyo/lib/rufus/tokyo/tyrant/lib.rb +153 -0
  141. data/vendor/rufus-tokyo/lib/rufus/tokyo/tyrant/table.rb +162 -0
  142. data/vendor/rufus-tokyo/rufus-tokyo.gemspec +25 -0
  143. data/vendor/rufus-tokyo/spec/cabinet_spec.rb +472 -0
  144. data/vendor/rufus-tokyo/spec/cabinetconfig_spec.rb +82 -0
  145. data/vendor/rufus-tokyo/spec/edo_cabinet_spec.rb +447 -0
  146. data/vendor/rufus-tokyo/spec/edo_ntyrant_spec.rb +299 -0
  147. data/vendor/rufus-tokyo/spec/edo_ntyrant_table_spec.rb +462 -0
  148. data/vendor/rufus-tokyo/spec/edo_table_spec.rb +560 -0
  149. data/vendor/rufus-tokyo/spec/hmethods_spec.rb +44 -0
  150. data/vendor/rufus-tokyo/spec/incr.lua +20 -0
  151. data/vendor/rufus-tokyo/spec/spec.rb +9 -0
  152. data/vendor/rufus-tokyo/spec/spec_base.rb +23 -0
  153. data/vendor/rufus-tokyo/spec/start_tyrants.sh +26 -0
  154. data/vendor/rufus-tokyo/spec/stop_tyrants.sh +9 -0
  155. data/vendor/rufus-tokyo/spec/table_spec.rb +567 -0
  156. data/vendor/rufus-tokyo/spec/tyrant_spec.rb +309 -0
  157. data/vendor/rufus-tokyo/spec/tyrant_table_spec.rb +479 -0
  158. data/vendor/rufus-tokyo/spec/util_list_spec.rb +200 -0
  159. data/vendor/rufus-tokyo/spec/util_map_spec.rb +132 -0
  160. data/vendor/rufus-tokyo/tasks/dev.rb +70 -0
  161. data/vendor/rufus-tokyo/test/bm0.rb +353 -0
  162. data/vendor/rufus-tokyo/test/bm1_compression.rb +54 -0
  163. data/vendor/rufus-tokyo/test/con0.rb +30 -0
  164. data/vendor/rufus-tokyo/test/mem.rb +49 -0
  165. data/vendor/rufus-tokyo/test/mem1.rb +44 -0
  166. data/vendor/rufus-tokyo/test/readme0.rb +17 -0
  167. data/vendor/rufus-tokyo/test/readme1.rb +21 -0
  168. data/vendor/rufus-tokyo/test/readme2.rb +15 -0
  169. data/vendor/rufus-tokyo/test/readme3.rb +24 -0
  170. data/vendor/rufus-tokyo/test/readmes_test.sh +17 -0
  171. data/vendor/webrat/.document +4 -0
  172. data/vendor/webrat/History.txt +358 -0
  173. data/vendor/webrat/MIT-LICENSE.txt +19 -0
  174. data/vendor/webrat/README.rdoc +85 -0
  175. data/vendor/webrat/Rakefile +200 -0
  176. data/vendor/webrat/install.rb +1 -0
  177. data/vendor/webrat/lib/webrat.rb +31 -0
  178. data/vendor/webrat/lib/webrat/core.rb +14 -0
  179. data/vendor/webrat/lib/webrat/core/configuration.rb +102 -0
  180. data/vendor/webrat/lib/webrat/core/elements/area.rb +31 -0
  181. data/vendor/webrat/lib/webrat/core/elements/element.rb +33 -0
  182. data/vendor/webrat/lib/webrat/core/elements/field.rb +411 -0
  183. data/vendor/webrat/lib/webrat/core/elements/form.rb +103 -0
  184. data/vendor/webrat/lib/webrat/core/elements/label.rb +31 -0
  185. data/vendor/webrat/lib/webrat/core/elements/link.rb +93 -0
  186. data/vendor/webrat/lib/webrat/core/elements/select_option.rb +35 -0
  187. data/vendor/webrat/lib/webrat/core/locators.rb +20 -0
  188. data/vendor/webrat/lib/webrat/core/locators/area_locator.rb +38 -0
  189. data/vendor/webrat/lib/webrat/core/locators/button_locator.rb +54 -0
  190. data/vendor/webrat/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
  191. data/vendor/webrat/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
  192. data/vendor/webrat/lib/webrat/core/locators/field_locator.rb +25 -0
  193. data/vendor/webrat/lib/webrat/core/locators/field_named_locator.rb +41 -0
  194. data/vendor/webrat/lib/webrat/core/locators/form_locator.rb +19 -0
  195. data/vendor/webrat/lib/webrat/core/locators/label_locator.rb +34 -0
  196. data/vendor/webrat/lib/webrat/core/locators/link_locator.rb +74 -0
  197. data/vendor/webrat/lib/webrat/core/locators/locator.rb +20 -0
  198. data/vendor/webrat/lib/webrat/core/locators/select_option_locator.rb +59 -0
  199. data/vendor/webrat/lib/webrat/core/logging.rb +24 -0
  200. data/vendor/webrat/lib/webrat/core/matchers.rb +4 -0
  201. data/vendor/webrat/lib/webrat/core/matchers/have_content.rb +73 -0
  202. data/vendor/webrat/lib/webrat/core/matchers/have_selector.rb +74 -0
  203. data/vendor/webrat/lib/webrat/core/matchers/have_tag.rb +21 -0
  204. data/vendor/webrat/lib/webrat/core/matchers/have_xpath.rb +147 -0
  205. data/vendor/webrat/lib/webrat/core/methods.rb +63 -0
  206. data/vendor/webrat/lib/webrat/core/mime.rb +29 -0
  207. data/vendor/webrat/lib/webrat/core/save_and_open_page.rb +48 -0
  208. data/vendor/webrat/lib/webrat/core/scope.rb +350 -0
  209. data/vendor/webrat/lib/webrat/core/session.rb +290 -0
  210. data/vendor/webrat/lib/webrat/core/xml.rb +115 -0
  211. data/vendor/webrat/lib/webrat/core/xml/hpricot.rb +19 -0
  212. data/vendor/webrat/lib/webrat/core/xml/nokogiri.rb +76 -0
  213. data/vendor/webrat/lib/webrat/core/xml/rexml.rb +24 -0
  214. data/vendor/webrat/lib/webrat/core_extensions/blank.rb +58 -0
  215. data/vendor/webrat/lib/webrat/core_extensions/deprecate.rb +8 -0
  216. data/vendor/webrat/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  217. data/vendor/webrat/lib/webrat/core_extensions/meta_class.rb +6 -0
  218. data/vendor/webrat/lib/webrat/core_extensions/nil_to_param.rb +5 -0
  219. data/vendor/webrat/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  220. data/vendor/webrat/lib/webrat/mechanize.rb +74 -0
  221. data/vendor/webrat/lib/webrat/merb.rb +9 -0
  222. data/vendor/webrat/lib/webrat/merb_multipart_support.rb +27 -0
  223. data/vendor/webrat/lib/webrat/merb_session.rb +80 -0
  224. data/vendor/webrat/lib/webrat/rack.rb +24 -0
  225. data/vendor/webrat/lib/webrat/rack_test.rb +32 -0
  226. data/vendor/webrat/lib/webrat/rails.rb +105 -0
  227. data/vendor/webrat/lib/webrat/rspec-rails.rb +10 -0
  228. data/vendor/webrat/lib/webrat/selenium.rb +81 -0
  229. data/vendor/webrat/lib/webrat/selenium/application_server_factory.rb +40 -0
  230. data/vendor/webrat/lib/webrat/selenium/application_servers.rb +5 -0
  231. data/vendor/webrat/lib/webrat/selenium/application_servers/base.rb +46 -0
  232. data/vendor/webrat/lib/webrat/selenium/application_servers/external.rb +26 -0
  233. data/vendor/webrat/lib/webrat/selenium/application_servers/merb.rb +50 -0
  234. data/vendor/webrat/lib/webrat/selenium/application_servers/rails.rb +44 -0
  235. data/vendor/webrat/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
  236. data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
  237. data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/label.js +16 -0
  238. data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
  239. data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webratlink.js +12 -0
  240. data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  241. data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  242. data/vendor/webrat/lib/webrat/selenium/matchers.rb +4 -0
  243. data/vendor/webrat/lib/webrat/selenium/matchers/have_content.rb +66 -0
  244. data/vendor/webrat/lib/webrat/selenium/matchers/have_selector.rb +49 -0
  245. data/vendor/webrat/lib/webrat/selenium/matchers/have_tag.rb +72 -0
  246. data/vendor/webrat/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
  247. data/vendor/webrat/lib/webrat/selenium/selenium_extensions.js +6 -0
  248. data/vendor/webrat/lib/webrat/selenium/selenium_rc_server.rb +84 -0
  249. data/vendor/webrat/lib/webrat/selenium/selenium_session.rb +248 -0
  250. data/vendor/webrat/lib/webrat/selenium/silence_stream.rb +18 -0
  251. data/vendor/webrat/lib/webrat/sinatra.rb +44 -0
  252. data/vendor/webrat/spec/fakes/test_session.rb +34 -0
  253. data/vendor/webrat/spec/integration/merb/Rakefile +35 -0
  254. data/vendor/webrat/spec/integration/merb/app/controllers/application.rb +2 -0
  255. data/vendor/webrat/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  256. data/vendor/webrat/spec/integration/merb/app/controllers/testing.rb +27 -0
  257. data/vendor/webrat/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
  258. data/vendor/webrat/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
  259. data/vendor/webrat/spec/integration/merb/app/views/layout/application.html.erb +12 -0
  260. data/vendor/webrat/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
  261. data/vendor/webrat/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
  262. data/vendor/webrat/spec/integration/merb/config/environments/development.rb +15 -0
  263. data/vendor/webrat/spec/integration/merb/config/environments/rake.rb +11 -0
  264. data/vendor/webrat/spec/integration/merb/config/environments/test.rb +14 -0
  265. data/vendor/webrat/spec/integration/merb/config/init.rb +25 -0
  266. data/vendor/webrat/spec/integration/merb/config/rack.rb +11 -0
  267. data/vendor/webrat/spec/integration/merb/config/router.rb +34 -0
  268. data/vendor/webrat/spec/integration/merb/spec/spec.opts +1 -0
  269. data/vendor/webrat/spec/integration/merb/spec/spec_helper.rb +24 -0
  270. data/vendor/webrat/spec/integration/merb/spec/webrat_spec.rb +39 -0
  271. data/vendor/webrat/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  272. data/vendor/webrat/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  273. data/vendor/webrat/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  274. data/vendor/webrat/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
  275. data/vendor/webrat/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  276. data/vendor/webrat/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  277. data/vendor/webrat/spec/integration/rack/Rakefile +5 -0
  278. data/vendor/webrat/spec/integration/rack/rack_app.rb +16 -0
  279. data/vendor/webrat/spec/integration/rack/test/test_helper.rb +20 -0
  280. data/vendor/webrat/spec/integration/rack/test/webrat_rack_test.rb +67 -0
  281. data/vendor/webrat/spec/integration/rails/Rakefile +30 -0
  282. data/vendor/webrat/spec/integration/rails/app/controllers/application.rb +15 -0
  283. data/vendor/webrat/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
  284. data/vendor/webrat/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
  285. data/vendor/webrat/spec/integration/rails/app/controllers/links_controller.rb +7 -0
  286. data/vendor/webrat/spec/integration/rails/app/controllers/webrat_controller.rb +43 -0
  287. data/vendor/webrat/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
  288. data/vendor/webrat/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
  289. data/vendor/webrat/spec/integration/rails/app/helpers/links_helper.rb +2 -0
  290. data/vendor/webrat/spec/integration/rails/app/views/buttons/show.html.erb +11 -0
  291. data/vendor/webrat/spec/integration/rails/app/views/fields/show.html.erb +9 -0
  292. data/vendor/webrat/spec/integration/rails/app/views/links/show.html.erb +5 -0
  293. data/vendor/webrat/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
  294. data/vendor/webrat/spec/integration/rails/app/views/webrat/buttons.html.erb +11 -0
  295. data/vendor/webrat/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
  296. data/vendor/webrat/spec/integration/rails/config/boot.rb +109 -0
  297. data/vendor/webrat/spec/integration/rails/config/environment.rb +12 -0
  298. data/vendor/webrat/spec/integration/rails/config/environments/development.rb +17 -0
  299. data/vendor/webrat/spec/integration/rails/config/environments/selenium.rb +22 -0
  300. data/vendor/webrat/spec/integration/rails/config/environments/test.rb +22 -0
  301. data/vendor/webrat/spec/integration/rails/config/initializers/inflections.rb +10 -0
  302. data/vendor/webrat/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  303. data/vendor/webrat/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  304. data/vendor/webrat/spec/integration/rails/config/locales/en.yml +5 -0
  305. data/vendor/webrat/spec/integration/rails/config/routes.rb +18 -0
  306. data/vendor/webrat/spec/integration/rails/public/404.html +30 -0
  307. data/vendor/webrat/spec/integration/rails/public/422.html +30 -0
  308. data/vendor/webrat/spec/integration/rails/public/500.html +33 -0
  309. data/vendor/webrat/spec/integration/rails/script/about +4 -0
  310. data/vendor/webrat/spec/integration/rails/script/console +3 -0
  311. data/vendor/webrat/spec/integration/rails/script/dbconsole +3 -0
  312. data/vendor/webrat/spec/integration/rails/script/destroy +3 -0
  313. data/vendor/webrat/spec/integration/rails/script/generate +3 -0
  314. data/vendor/webrat/spec/integration/rails/script/performance/benchmarker +3 -0
  315. data/vendor/webrat/spec/integration/rails/script/performance/profiler +3 -0
  316. data/vendor/webrat/spec/integration/rails/script/performance/request +3 -0
  317. data/vendor/webrat/spec/integration/rails/script/plugin +3 -0
  318. data/vendor/webrat/spec/integration/rails/script/process/inspector +3 -0
  319. data/vendor/webrat/spec/integration/rails/script/process/reaper +3 -0
  320. data/vendor/webrat/spec/integration/rails/script/process/spawner +3 -0
  321. data/vendor/webrat/spec/integration/rails/script/runner +3 -0
  322. data/vendor/webrat/spec/integration/rails/script/server +3 -0
  323. data/vendor/webrat/spec/integration/rails/test/integration/button_click_test.rb +80 -0
  324. data/vendor/webrat/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
  325. data/vendor/webrat/spec/integration/rails/test/integration/link_click_test.rb +27 -0
  326. data/vendor/webrat/spec/integration/rails/test/integration/webrat_test.rb +97 -0
  327. data/vendor/webrat/spec/integration/rails/test/test_helper.rb +25 -0
  328. data/vendor/webrat/spec/integration/sinatra/Rakefile +5 -0
  329. data/vendor/webrat/spec/integration/sinatra/classic_app.rb +64 -0
  330. data/vendor/webrat/spec/integration/sinatra/modular_app.rb +16 -0
  331. data/vendor/webrat/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  332. data/vendor/webrat/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  333. data/vendor/webrat/spec/integration/sinatra/test/test_helper.rb +16 -0
  334. data/vendor/webrat/spec/private/core/configuration_spec.rb +116 -0
  335. data/vendor/webrat/spec/private/core/field_spec.rb +85 -0
  336. data/vendor/webrat/spec/private/core/link_spec.rb +24 -0
  337. data/vendor/webrat/spec/private/core/logging_spec.rb +10 -0
  338. data/vendor/webrat/spec/private/core/session_spec.rb +195 -0
  339. data/vendor/webrat/spec/private/mechanize/mechanize_session_spec.rb +81 -0
  340. data/vendor/webrat/spec/private/merb/attaches_file_spec.rb +93 -0
  341. data/vendor/webrat/spec/private/merb/merb_session_spec.rb +61 -0
  342. data/vendor/webrat/spec/private/nokogiri_spec.rb +77 -0
  343. data/vendor/webrat/spec/private/rails/attaches_file_spec.rb +81 -0
  344. data/vendor/webrat/spec/private/rails/rails_session_spec.rb +110 -0
  345. data/vendor/webrat/spec/private/selenium/application_servers/rails_spec.rb +26 -0
  346. data/vendor/webrat/spec/public/basic_auth_spec.rb +24 -0
  347. data/vendor/webrat/spec/public/check_spec.rb +191 -0
  348. data/vendor/webrat/spec/public/choose_spec.rb +118 -0
  349. data/vendor/webrat/spec/public/click_area_spec.rb +106 -0
  350. data/vendor/webrat/spec/public/click_button_spec.rb +496 -0
  351. data/vendor/webrat/spec/public/click_link_spec.rb +511 -0
  352. data/vendor/webrat/spec/public/fill_in_spec.rb +209 -0
  353. data/vendor/webrat/spec/public/locators/field_by_xpath_spec.rb +19 -0
  354. data/vendor/webrat/spec/public/locators/field_labeled_spec.rb +172 -0
  355. data/vendor/webrat/spec/public/locators/field_with_id_spec.rb +16 -0
  356. data/vendor/webrat/spec/public/matchers/contain_spec.rb +114 -0
  357. data/vendor/webrat/spec/public/matchers/have_selector_spec.rb +142 -0
  358. data/vendor/webrat/spec/public/matchers/have_tag_spec.rb +39 -0
  359. data/vendor/webrat/spec/public/matchers/have_xpath_spec.rb +136 -0
  360. data/vendor/webrat/spec/public/reload_spec.rb +10 -0
  361. data/vendor/webrat/spec/public/save_and_open_spec.rb +70 -0
  362. data/vendor/webrat/spec/public/select_date_spec.rb +112 -0
  363. data/vendor/webrat/spec/public/select_datetime_spec.rb +137 -0
  364. data/vendor/webrat/spec/public/select_spec.rb +249 -0
  365. data/vendor/webrat/spec/public/select_time_spec.rb +100 -0
  366. data/vendor/webrat/spec/public/selenium/application_server_factory_spec.rb +49 -0
  367. data/vendor/webrat/spec/public/selenium/application_servers/external_spec.rb +12 -0
  368. data/vendor/webrat/spec/public/selenium/selenium_session_spec.rb +37 -0
  369. data/vendor/webrat/spec/public/set_hidden_field_spec.rb +5 -0
  370. data/vendor/webrat/spec/public/submit_form_spec.rb +5 -0
  371. data/vendor/webrat/spec/public/visit_spec.rb +58 -0
  372. data/vendor/webrat/spec/public/within_spec.rb +177 -0
  373. data/vendor/webrat/spec/rcov.opts +1 -0
  374. data/vendor/webrat/spec/spec.opts +2 -0
  375. data/vendor/webrat/spec/spec_helper.rb +50 -0
  376. data/vendor/webrat/vendor/selenium-server.jar +0 -0
  377. metadata +442 -0
@@ -0,0 +1,44 @@
1
+
2
+ #
3
+ # Specifying rufus-tokyo
4
+ #
5
+ # Sun Feb 8 14:15:31 JST 2009
6
+ #
7
+
8
+ require File.dirname(__FILE__) + '/spec_base'
9
+
10
+ require 'rufus/tokyo/hmethods'
11
+
12
+
13
+ class MyHash
14
+ include Rufus::Tokyo::HashMethods
15
+ attr_accessor :default_proc
16
+ def get (k)
17
+ k.to_i % 2 == 0 ? k : nil
18
+ end
19
+ end
20
+
21
+ describe 'an instance that include HashMethods' do
22
+
23
+ before do
24
+ @h = MyHash.new
25
+ end
26
+
27
+ it 'should be ready for testing' do # :(
28
+ @h[1].should.be.nil
29
+ @h[2].should.equal(2)
30
+ end
31
+
32
+ it 'should accept a default value' do
33
+ @h.default = :default
34
+ @h.default.should.equal(:default)
35
+ end
36
+
37
+ it 'should accept a default_proc' do
38
+ @h.default_proc = lambda { |h, k| k * 2 }
39
+ @h[1].should.equal(2)
40
+ @h[2].should.equal(2)
41
+ @h[3].should.equal(6)
42
+ end
43
+ end
44
+
@@ -0,0 +1,20 @@
1
+
2
+ --
3
+ -- Taken from http://tokyocabinet.sourceforge.net/tyrantdoc/#luaext
4
+ --
5
+
6
+ function incr (key, value)
7
+ value = tonumber(value)
8
+ if not value then
9
+ return nil
10
+ end
11
+ local old = tonumber(_get(key))
12
+ if old then
13
+ value = value + old
14
+ end
15
+ if not _put(key, value) then
16
+ return nil
17
+ end
18
+ return value
19
+ end
20
+
@@ -0,0 +1,9 @@
1
+
2
+ #
3
+ # specifying rufus-tokyo
4
+ #
5
+ # Sun Feb 8 13:12:54 JST 2009
6
+ #
7
+
8
+ Dir["#{File.dirname(__FILE__)}/*_spec.rb"].each { |path| load(path) }
9
+
@@ -0,0 +1,23 @@
1
+
2
+ #
3
+ # Specifying rufus-tokyo
4
+ #
5
+ # Sun Feb 8 13:15:08 JST 2009
6
+ #
7
+
8
+ #
9
+ # bacon
10
+
11
+ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
12
+
13
+ require 'rubygems'
14
+ require 'fileutils'
15
+
16
+ $:.unshift(File.expand_path('~/tmp/bacon/lib')) # my own bacon for a while
17
+
18
+ require 'bacon'
19
+
20
+ puts
21
+
22
+ Bacon.summary_on_exit
23
+
@@ -0,0 +1,26 @@
1
+ #!/bin/bash
2
+
3
+ #
4
+ # starting the tt servers (standard + table)
5
+ #
6
+
7
+ TMP=`pwd`/tmp
8
+ # so that tt doesn't complain about relative paths...
9
+
10
+ [ -d $TMP ] || mkdir $TMP
11
+
12
+ ttserver \
13
+ -dmn \
14
+ -ext `pwd`/spec/incr.lua \
15
+ -port 45000 \
16
+ -pid $TMP/t_spec.pid -rts $TMP/t_spec.rts \
17
+ -log $TMP/t.log \
18
+ $TMP/tyrant.tch
19
+
20
+ ttserver \
21
+ -dmn \
22
+ -port 45001 \
23
+ -pid $TMP/tt_spec.pid -rts $TMP/tt_spec.rts \
24
+ -log $TMP/tt.log \
25
+ $TMP/tyrant_table.tct
26
+
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+
3
+ # stopping the spec ttservers
4
+
5
+ ruby -e "%w{ tmp/t_spec.pid tmp/tt_spec.pid }.each { |pf| File.exist?(pf) && Process.kill(9, File.read(pf).strip.to_i) }"
6
+
7
+ rm tmp/t_spec.pid
8
+ rm tmp/tt_spec.pid
9
+
@@ -0,0 +1,567 @@
1
+
2
+ #
3
+ # Specifying rufus-tokyo
4
+ #
5
+ # Sun Feb 8 16:07:16 JST 2009
6
+ #
7
+
8
+ require File.dirname(__FILE__) + '/spec_base'
9
+
10
+ require 'rufus/tokyo'
11
+
12
+ FileUtils.mkdir('tmp') rescue nil
13
+
14
+
15
+ describe 'Rufus::Tokyo::Table' do
16
+
17
+ it 'should open in write/create mode by default' do
18
+
19
+ t = Rufus::Tokyo::Table.new('tmp/default.tct')
20
+ t.close
21
+ File.exist?('tmp/default.tct').should.equal(true)
22
+ FileUtils.rm('tmp/default.tct')
23
+ end
24
+
25
+ it 'should raise an error when file is missing' do
26
+
27
+ lambda {
28
+ Rufus::Tokyo::Table.new('tmp/missing.tct', :mode => 'r')
29
+ }.should.raise(
30
+ Rufus::Tokyo::TokyoError).message.should.equal('(err 3) file not found')
31
+ end
32
+ end
33
+
34
+ describe 'Rufus::Tokyo::Table' do
35
+
36
+ before do
37
+ @t = Rufus::Tokyo::Table.new('tmp/table.tct')
38
+ @t.clear
39
+ end
40
+ after do
41
+ @t.close
42
+ end
43
+
44
+ it 'should return its path' do
45
+
46
+ @t.path.should.equal('tmp/table.tct')
47
+ end
48
+
49
+ it 'should generate unique ids' do
50
+
51
+ @t.genuid.should.satisfy { |i| i > 0 }
52
+ end
53
+
54
+ it 'should return nil for missing keys' do
55
+
56
+ @t['missing'].should.be.nil
57
+ end
58
+
59
+ it 'should accept Array and Hash input' do
60
+
61
+ @t.size.should.equal(0)
62
+
63
+ @t['pk0'] = [ 'name', 'toto', 'age', '30' ]
64
+ @t['pk1'] = { 'name' => 'fred', 'age' => '22' }
65
+
66
+ @t.size.should.equal(2)
67
+ @t['pk0'].should.equal({ 'name' => 'toto', 'age' => '30' })
68
+ end
69
+
70
+ it 'should return nil when deleting inexistent entries' do
71
+
72
+ @t.delete('I_do_not_exist').should.equal(nil)
73
+ end
74
+
75
+ it 'should delete the entry and return the value' do
76
+
77
+ @t['pk0'] = [ 'name', 'toto', 'age', '30' ]
78
+ @t.delete('pk0').should.equal({ 'name' => 'toto', 'age' => '30' })
79
+ @t.size.should.equal(0)
80
+ end
81
+
82
+ it 'should raise an ArgumentError on non map or hash input' do
83
+
84
+ lambda {
85
+ @t['pk0'] = 'bad thing here'
86
+ }.should.raise(ArgumentError)
87
+ end
88
+
89
+ unless defined?(JRUBY_VERSION)
90
+ it 'should raise an ArgumentError on non-string column name' do
91
+
92
+ lambda {
93
+ @t['pk0'] = [ 1, 2 ]
94
+ }.should.raise(ArgumentError)
95
+ lambda {
96
+ @t['pk0'] = { 1 => 2 }
97
+ }.should.raise(ArgumentError)
98
+ end
99
+
100
+ it 'should raise an ArgumentError on non-string column value' do
101
+
102
+ lambda {
103
+ @t['pk0'] = { 'a' => 2 }
104
+ }.should.raise(ArgumentError)
105
+ end
106
+ end
107
+
108
+ it 'should correctly abort transactions' do
109
+
110
+ @t.transaction {
111
+ @t['pk0'] = { 'a' => 'A' }
112
+ @t.abort
113
+ }
114
+ @t.size.should.be.zero
115
+ end
116
+
117
+ it 'should rollback transactions with errors' do
118
+
119
+ @t.transaction {
120
+ @t['pk0'] = { 'a' => 'A' }
121
+ raise 'something goes wrong'
122
+ }
123
+ @t.size.should.be.zero
124
+ end
125
+
126
+ it 'should commit successful transactions' do
127
+
128
+ @t.transaction do
129
+ @t['pk0'] = { 'a' => 'A' }
130
+ end
131
+ @t['pk0'].should.equal({ 'a' => 'A' })
132
+ end
133
+
134
+ it 'should abort low level transactions' do
135
+
136
+ @t.tranbegin
137
+ @t['pk0'] = { 'a' => 'A' }
138
+ @t.tranabort
139
+ @t.size.should.be.zero
140
+ end
141
+
142
+ it 'should commit low level transactions' do
143
+
144
+ @t.tranbegin
145
+ @t['pk0'] = { 'a' => 'A' }
146
+ @t.trancommit
147
+ @t['pk0'].should.equal({ 'a' => 'A' })
148
+ end
149
+
150
+ it 'should store binary data \0' do
151
+ s = "toto#{0.chr}nada"
152
+ @t[s] = { s => s }
153
+ @t[s].should.equal({ s => s })
154
+ end
155
+
156
+ end
157
+
158
+
159
+ describe 'Rufus::Tokyo::Table #keys' do
160
+
161
+ before do
162
+ @n = 50
163
+ @tab = Rufus::Tokyo::Table.new('tmp/test_new.tct')
164
+ @tab.clear
165
+ @n.times { |i| @tab["person#{i}"] = { 'name' => 'whoever' } }
166
+ @n.times { |i| @tab["animal#{i}"] = { 'name' => 'whichever' } }
167
+ @tab["toto#{0.chr}5"] = { 'name' => 'toto' }
168
+ end
169
+ after do
170
+ @tab.close
171
+ end
172
+
173
+ it 'should return a Ruby Array by default' do
174
+
175
+ @tab.keys.class.should.equal(::Array)
176
+ end
177
+
178
+ it 'should return a Cabinet List when :native => true' do
179
+
180
+ l = @tab.keys(:native => true)
181
+ l.class.should.equal(Rufus::Tokyo::List)
182
+ l.size.should.equal(2 * @n + 1)
183
+ l.free
184
+ end
185
+
186
+ it 'should retrieve forward matching keys when :prefix => "prefix-"' do
187
+
188
+ @tab.keys(:prefix => 'person').size.should.equal(@n)
189
+
190
+ l = @tab.keys(:prefix => 'animal', :native => true)
191
+ l.size.should.equal(@n)
192
+ l.free
193
+ end
194
+
195
+ it 'should retrieve keys that contain \0' do
196
+
197
+ @tab.keys.include?("toto#{0.chr}5").should.be.true
198
+ end
199
+
200
+ it 'should retrieve forward matching keys when key contains \0' do
201
+
202
+ @tab.keys(:prefix => 'toto').should.equal([ "toto#{0.chr}5" ])
203
+ end
204
+
205
+ it 'should return a limited number of keys when :limit is set' do
206
+
207
+ @tab.keys(:limit => 20).size.should.equal(20)
208
+ end
209
+
210
+ it 'should delete_keys_with_prefix' do
211
+
212
+ @tab.delete_keys_with_prefix('animal')
213
+ @tab.size.should.equal(@n + 1)
214
+ @tab.keys(:prefix => 'animal').size.should.equal(0)
215
+ end
216
+ end
217
+
218
+
219
+ def prepare_table_with_data
220
+
221
+ t = Rufus::Tokyo::Table.new('tmp/test_new.tct')
222
+ t.clear
223
+ t['pk0'] = { 'name' => 'jim', 'age' => '25', 'lang' => 'ja,en' }
224
+ t['pk1'] = { 'name' => 'jeff', 'age' => '32', 'lang' => 'en,es' }
225
+ t['pk2'] = { 'name' => 'jack', 'age' => '44', 'lang' => 'en' }
226
+ t['pk3'] = { 'name' => 'jake', 'age' => '45', 'lang' => 'en,li' }
227
+ t
228
+ end
229
+
230
+ describe 'Rufus::Tokyo::Table' do
231
+
232
+ before do
233
+ @t = prepare_table_with_data
234
+ end
235
+ after do
236
+ @t.close
237
+ end
238
+
239
+ it 'should accept lexical indexes' do
240
+ @t.set_index('name', :lexical).should.equal(true)
241
+ end
242
+
243
+ it 'should accept decimal indexes' do
244
+ @t.set_index('age', :decimal).should.equal(true)
245
+ end
246
+
247
+ it 'should accept removal of indexes' do
248
+ @t.set_index('age', :decimal)
249
+ @t.set_index('age', :remove).should.equal(true)
250
+ end
251
+
252
+ it 'should accept indexes on the primary key (well...)' do
253
+ @t.set_index(:pk, :lexical).should.equal(true)
254
+ @t.set_index('', :lexical).should.equal(true)
255
+ end
256
+ end
257
+
258
+ describe 'Rufus::Tokyo::Table#lget' do
259
+
260
+ before do
261
+ @t = prepare_table_with_data
262
+ end
263
+ after do
264
+ @t.close
265
+ end
266
+
267
+ it 'should return an empty hash for missing keys' do
268
+ @t.lget(%w{ pk97 pk98 }).should.equal({})
269
+ end
270
+
271
+ it 'should return multiple records' do
272
+ @t.lget(%w{ pk0 pk1 }).should.equal({
273
+ 'pk0' => { 'name' => 'jim', 'age' => '25', 'lang' => 'ja,en' },
274
+ 'pk1' => { 'name' => 'jeff', 'age' => '32', 'lang' => 'en,es' }
275
+ })
276
+ end
277
+ end
278
+
279
+ describe 'Rufus::Tokyo::Table, like a Ruby Hash' do
280
+
281
+ before do
282
+ @t = prepare_table_with_data
283
+ end
284
+ after do
285
+ @t.close
286
+ end
287
+
288
+ it 'should respond to #keys' do
289
+
290
+ @t.keys.should.equal([ 'pk0', 'pk1', 'pk2', 'pk3' ])
291
+ end
292
+
293
+ it 'should respond to #values' do
294
+
295
+ @t.values.should.equal([
296
+ { 'name' => 'jim', 'age' => '25', 'lang' => 'ja,en' },
297
+ { 'name' => 'jeff', 'age' => '32', 'lang' => 'en,es' },
298
+ { 'name' => 'jack', 'age' => '44', 'lang' => 'en' },
299
+ { 'name' => 'jake', 'age' => '45', 'lang' => 'en,li' }])
300
+ end
301
+
302
+ it 'should benefit from Enumerable' do
303
+
304
+ @t.find { |k, v|
305
+ v['name'] == 'jeff'
306
+ }.should.equal([
307
+ 'pk1', { 'name' => 'jeff', 'age' => '32', 'lang' => 'en,es' }])
308
+ end
309
+ end
310
+
311
+ describe 'queries on Rufus::Tokyo::Table' do
312
+
313
+ before do
314
+ @t = prepare_table_with_data
315
+ end
316
+ after do
317
+ @t.close
318
+ end
319
+
320
+ it 'can be executed' do
321
+
322
+ @t.query { |q|
323
+ q.add 'lang', :includes, 'en'
324
+ }.size.should.equal(4)
325
+ end
326
+
327
+ it 'can be prepared' do
328
+
329
+ @t.prepare_query { |q|
330
+ q.add 'lang', :includes, 'en'
331
+ }.should.satisfy { |q| q.class == Rufus::Tokyo::TableQuery }
332
+ end
333
+
334
+ it 'can be counted' do
335
+
336
+ q = @t.prepare_query { |q|
337
+ q.add 'lang', :includes, 'en'
338
+ }
339
+ q.run
340
+ q.count.should.equal(4)
341
+ end
342
+
343
+ it 'can be limited' do
344
+
345
+ @t.query { |q|
346
+ q.add 'lang', :includes, 'en'
347
+ q.limit 2
348
+ }.size.should.equal(2)
349
+ end
350
+
351
+ it 'can leverage regex matches' do
352
+
353
+ @t.query { |q|
354
+ q.add 'name', :matches, '^j.+k'
355
+ }.to_a.should.equal([
356
+ {:pk => 'pk2', "name"=>"jack", "lang"=>"en", "age"=>"44"},
357
+ {:pk => 'pk3', "name"=>"jake", "lang"=>"en,li", "age"=>"45"}])
358
+ end
359
+
360
+ it 'can leverage numerical comparison (gt)' do
361
+
362
+ @t.query { |q|
363
+ q.add 'age', :gt, '40'
364
+ q.pk_only
365
+ }.to_a.should.equal([ 'pk2', 'pk3' ])
366
+ end
367
+
368
+ it 'can have negated conditions' do
369
+
370
+ @t.query { |q|
371
+ q.add 'age', :gt, '40', false
372
+ q.pk_only
373
+ }.to_a.should.equal([ 'pk0', 'pk1' ])
374
+ end
375
+
376
+ if Rufus::Tokyo::CabinetLib.respond_to?(:qry_setlimit)
377
+
378
+ it 'can be limited and have an offset' do
379
+
380
+ @t.query { |q|
381
+ q.add 'lang', :includes, 'en'
382
+ q.order_by 'name', :desc
383
+ q.limit 2, 0
384
+ }.collect { |e| e['name'] }.should.equal(%w{ jim jeff })
385
+ @t.query { |q|
386
+ q.add 'lang', :includes, 'en'
387
+ q.order_by 'name', :desc
388
+ q.limit 2, 2
389
+ }.collect { |e| e['name'] }.should.equal(%w{ jake jack })
390
+ end
391
+ end
392
+
393
+ it 'can be deleted (searchout : query#delete)' do
394
+
395
+ @t.prepare_query { |q|
396
+ q.add 'lang', :includes, 'es'
397
+ }.delete
398
+
399
+ @t.size.should.equal(3)
400
+ end
401
+
402
+ it 'can be deleted immediately (searchout table#query_delete)' do
403
+
404
+ @t.query_delete { |q|
405
+ q.add 'lang', :includes, 'es'
406
+ }
407
+
408
+ @t.size.should.equal(3)
409
+ end
410
+
411
+ end
412
+
413
+ describe 'Rufus::Tokyo::TableQuery#process' do
414
+
415
+ before do
416
+ @t = prepare_table_with_data
417
+ end
418
+ after do
419
+ @t.close
420
+ end
421
+
422
+ it 'can iterate over the matching records' do
423
+
424
+ keys, values = [], []
425
+
426
+ @t.prepare_query { |q|
427
+ q.add 'lang', :includes, 'en'
428
+ }.process { |k, v|
429
+ keys << k
430
+ values << v
431
+ }.free
432
+
433
+ keys.should.equal(%w[ pk0 pk1 pk2 pk3 ])
434
+ values.first.keys.sort.should.equal(%w[ age lang name ])
435
+ end
436
+
437
+ it 'can stop while iterating' do
438
+
439
+ seen = 0
440
+
441
+ @t.prepare_query { |q|
442
+ q.add 'lang', :includes, 'en'
443
+ }.process { |k, v|
444
+ seen = seen + 1
445
+ :stop
446
+ }.free
447
+
448
+ seen.should.equal(1)
449
+ end
450
+
451
+ it 'can delete while iterating' do
452
+
453
+ @t.prepare_query { |q|
454
+ q.add 'lang', :includes, 'en'
455
+ }.process { |k, v|
456
+ v['name'].match(/^ja/) ? :delete : nil
457
+ }.free
458
+
459
+ @t.keys.sort.should.equal(%w[ pk0 pk1 ])
460
+ end
461
+
462
+ it 'can update while iterating' do
463
+
464
+ @t.prepare_query { |q|
465
+ q.add 'lang', :includes, 'en'
466
+ }.process { |k, v|
467
+ v['name'].match(/^ja/) ? v.merge('special' => 'seen') : nil
468
+ }.free
469
+
470
+ @t.size.should.equal(4)
471
+
472
+ @t['pk2'].should.equal(
473
+ {'name'=>'jack', 'age'=>'44', 'lang'=>'en', 'special'=>'seen'})
474
+ @t['pk3'].should.equal(
475
+ {'name'=>'jake', 'age'=>'45', 'lang'=>'en,li', 'special'=>'seen'})
476
+ end
477
+
478
+ it 'can update, delete and stop' do
479
+
480
+ seen = []
481
+
482
+ @t.prepare_query { |q|
483
+ q.add 'lang', :includes, 'en'
484
+ q.order_by 'name', :desc
485
+ }.process { |k, v|
486
+ seen << v['name']
487
+ case v['name']
488
+ when 'jim' then nil
489
+ when 'jeff' then :delete
490
+ when 'jake' then [ :stop, v.merge('special' => 'nada') ]
491
+ end
492
+ }.free
493
+
494
+ seen.include?('jack').should.be.false
495
+
496
+ @t.size.should.equal(3)
497
+
498
+ @t['pk3'].should.equal(
499
+ {'name'=>'jake', 'age'=>'45', 'lang'=>'en,li', 'special'=>'nada'})
500
+ @t['pk1'].should.be.nil
501
+ end
502
+ end
503
+
504
+ describe 'results from queries on Rufus::Tokyo::Table' do
505
+
506
+ before do
507
+ @t = prepare_table_with_data
508
+ end
509
+ after do
510
+ @t.close
511
+ end
512
+
513
+ it 'can come ordered (strdesc)' do
514
+
515
+ @t.query { |q|
516
+ q.add 'lang', :includes, 'en'
517
+ q.order_by 'name', :desc
518
+ q.limit 2
519
+ }.to_a.should.equal([
520
+ {:pk => 'pk0', "name"=>"jim", "lang"=>"ja,en", "age"=>"25"},
521
+ {:pk => 'pk1', "name"=>"jeff", "lang"=>"en,es", "age"=>"32"}])
522
+ end
523
+
524
+ it 'can come ordered (strasc)' do
525
+
526
+ @t.query { |q|
527
+ q.add 'lang', :includes, 'en'
528
+ q.order_by 'name', :asc
529
+ }.to_a.should.equal([
530
+ {:pk => 'pk2', "name"=>"jack", "lang"=>"en", "age"=>"44"},
531
+ {:pk => 'pk3', "name"=>"jake", "lang"=>"en,li", "age"=>"45"},
532
+ {:pk => 'pk1', "name"=>"jeff", "lang"=>"en,es", "age"=>"32"},
533
+ {:pk => 'pk0', "name"=>"jim", "lang"=>"ja,en", "age"=>"25"}])
534
+ end
535
+
536
+ it 'can come ordered (numasc)' do
537
+
538
+ @t.query { |q|
539
+ q.add 'lang', :includes, 'en'
540
+ q.order_by 'age', :numasc
541
+ }.to_a.should.equal([
542
+ {:pk => 'pk0', "name"=>"jim", "lang"=>"ja,en", "age"=>"25"},
543
+ {:pk => 'pk1', "name"=>"jeff", "lang"=>"en,es", "age"=>"32"},
544
+ {:pk => 'pk2', "name"=>"jack", "lang"=>"en", "age"=>"44"},
545
+ {:pk => 'pk3', "name"=>"jake", "lang"=>"en,li", "age"=>"45"}])
546
+ end
547
+
548
+ it 'can come without the primary keys (no_pk)' do
549
+
550
+ @t.query { |q|
551
+ q.add 'name', :matches, '^j.+k'
552
+ q.no_pk
553
+ }.to_a.should.equal([
554
+ {"name"=>"jack", "lang"=>"en", "age"=>"44"},
555
+ {"name"=>"jake", "lang"=>"en,li", "age"=>"45"}])
556
+ end
557
+
558
+ it 'can consist only of the primary keys (pk_only)' do
559
+
560
+ @t.query { |q|
561
+ q.add 'name', :matches, '^j.+k'
562
+ q.pk_only
563
+ }.to_a.should.equal(["pk2", "pk3"])
564
+ end
565
+
566
+ end
567
+