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,309 @@
1
+
2
+ #
3
+ # Specifying rufus-tokyo
4
+ #
5
+ # Sun Feb 8 13:13:41 JST 2009
6
+ #
7
+
8
+ require File.dirname(__FILE__) + '/spec_base'
9
+
10
+ require 'rufus/tokyo/tyrant'
11
+
12
+
13
+ describe 'a missing Tokyo Rufus::Tokyo::Tyrant' do
14
+
15
+ it 'should raise an error' do
16
+
17
+ should.raise(RuntimeError) {
18
+ Rufus::Tokyo::Tyrant.new('tyrant.example.com', 45000)
19
+ }
20
+ end
21
+ end
22
+
23
+ describe 'a Tokyo Rufus::Tokyo::Tyrant' do
24
+
25
+ it 'should open and close' do
26
+
27
+ should.not.raise {
28
+ t = Rufus::Tokyo::Tyrant.new('127.0.0.1', 45000)
29
+ t.close
30
+ }
31
+ end
32
+
33
+ it 'should refuse to connect to a TyrantTable' do
34
+
35
+ lambda {
36
+ t = Rufus::Tokyo::Tyrant.new('127.0.0.1', 45001)
37
+ }.should.raise(ArgumentError)
38
+ end
39
+ end
40
+
41
+ describe 'a Tokyo Rufus::Tokyo::Tyrant' do
42
+
43
+ before do
44
+ @db = Rufus::Tokyo::Tyrant.new('127.0.0.1', 45000)
45
+ @db.clear
46
+ end
47
+ after do
48
+ @db.close
49
+ end
50
+
51
+ it 'should respond to stat' do
52
+
53
+ stat = @db.stat
54
+ stat['type'].should.equal('hash')
55
+ end
56
+
57
+ it 'should get put value' do
58
+
59
+ @db['alpha'] = 'bravo'
60
+ @db['alpha'].should.equal('bravo')
61
+ end
62
+
63
+ it 'should count entries' do
64
+
65
+ @db.size.should.equal(0)
66
+ 3.times { |i| @db[i.to_s] = i.to_s }
67
+ @db.size.should.equal(3)
68
+ end
69
+
70
+ it 'should delete entries' do
71
+
72
+ @db['alpha'] = 'bravo'
73
+ @db.delete('alpha').should.equal('bravo')
74
+ @db.size.should.equal(0)
75
+ end
76
+
77
+ it 'should iterate entries' do
78
+
79
+ 3.times { |i| @db[i.to_s] = i.to_s }
80
+ @db.values.should.equal(%w{ 0 1 2 })
81
+ end
82
+
83
+ it 'should accept and restitute \0 strings' do
84
+ s = "toto#{0.chr}nada"
85
+ @db[s] = s
86
+ @db[s].should.equal(s)
87
+ end
88
+
89
+ it 'should reply to #keys when there are keys containing \0' do
90
+
91
+ s = "toto#{0.chr}nada"
92
+ @db[s] = s
93
+ @db.keys.should.equal([ s ])
94
+ end
95
+
96
+ it 'should not respond to defrag' do
97
+
98
+ lambda() { @db.defrag }.should.raise(NoMethodError)
99
+ end
100
+ end
101
+
102
+
103
+ describe 'Rufus::Tokyo::Tyrant #keys' do
104
+
105
+ before do
106
+ @n = 50
107
+ @db = Rufus::Tokyo::Tyrant.new('127.0.0.1', 45000)
108
+ @db.clear
109
+ @n.times { |i| @db["person#{i}"] = 'whoever' }
110
+ @n.times { |i| @db["animal#{i}"] = 'whichever' }
111
+ @db["toto#{0.chr}5"] = 'toto'
112
+ end
113
+
114
+ after do
115
+ @db.close
116
+ end
117
+
118
+ it 'should return a Ruby Array by default' do
119
+
120
+ @db.keys.class.should.equal(::Array)
121
+ end
122
+
123
+ it 'should return a Cabinet List when :native => true' do
124
+
125
+ l = @db.keys(:native => true)
126
+ l.class.should.equal(Rufus::Tokyo::List)
127
+ l.size.should.equal(2 * @n + 1)
128
+ l.free
129
+ end
130
+
131
+ it 'should retrieve forward matching keys when :prefix => "prefix-"' do
132
+
133
+ @db.keys(:prefix => 'person').size.should.equal(@n)
134
+
135
+ l = @db.keys(:prefix => 'animal', :native => true)
136
+ l.size.should.equal(@n)
137
+ l.free
138
+ end
139
+
140
+ it 'should retrieve keys that contain \0' do
141
+
142
+ @db.keys.include?("toto#{0.chr}5").should.be.true
143
+ end
144
+
145
+ it 'should retrieve forward matching keys when key contains \0' do
146
+
147
+ @db.keys(:prefix => 'toto').should.equal([ "toto#{0.chr}5" ])
148
+ end
149
+
150
+ it 'should return a limited number of keys when :limit is set' do
151
+
152
+ @db.keys(:limit => 20).size.should.equal(20)
153
+ end
154
+
155
+ it 'should delete_keys_with_prefix' do
156
+
157
+ @db.delete_keys_with_prefix('animal')
158
+ @db.size.should.equal(@n + 1)
159
+ @db.keys(:prefix => 'animal').size.should.equal(0)
160
+ end
161
+ end
162
+
163
+ describe 'Rufus::Tokyo::Tyrant lget/lput/ldelete' do
164
+
165
+ before do
166
+ @db = Rufus::Tokyo::Tyrant.new('127.0.0.1', 45000)
167
+ @db.clear
168
+ 3.times { |i| @db[i.to_s] = "val#{i}" }
169
+ end
170
+ after do
171
+ @db.close
172
+ end
173
+
174
+ it 'should get multiple values' do
175
+
176
+ @db.lget(%w{ 0 1 2 }).should.equal({"0"=>"val0", "1"=>"val1", "2"=>"val2"})
177
+ end
178
+
179
+ it 'should put multiple values' do
180
+
181
+ @db.lput('3' => 'val3', '4' => 'val4')
182
+ @db.lget(%w{ 2 3 }).should.equal({"2"=>"val2", "3"=>"val3"})
183
+ end
184
+
185
+ it 'should delete multiple values' do
186
+
187
+ @db.ldelete(%w{ 2 3 })
188
+ @db.lget(%w{ 0 1 2 }).should.equal({"0"=>"val0", "1"=>"val1"})
189
+ end
190
+ end
191
+
192
+ describe 'Rufus::Tokyo::Tyrant#add{int|double}' do
193
+
194
+ before do
195
+ @db = Rufus::Tokyo::Tyrant.new('127.0.0.1', 45000)
196
+ @db.clear
197
+ end
198
+ after do
199
+ @db.close
200
+ end
201
+
202
+ it 'should increment (int)' do
203
+
204
+ @db.addint('counter', 1).should.equal(1)
205
+ @db.incr('counter', 1).should.equal(2)
206
+ @db.addint('counter', 2).should.equal(4)
207
+ @db.incr('counter').should.equal(5)
208
+ end
209
+
210
+ it 'should fail gracefully if counter has already a [string] value (int)' do
211
+
212
+ @db['counter'] = 'a'
213
+ lambda { @db.addint('counter', 1) }.should.raise(Rufus::Tokyo::TokyoError)
214
+ @db['counter'].should.equal('a')
215
+ end
216
+
217
+ it 'should increment (double)' do
218
+
219
+ @db.adddouble('counter', 1.0).should.equal(1.0)
220
+ @db.incr('counter', 1.5).should.equal(2.5)
221
+ @db.adddouble('counter', 2.2).should.equal(4.7)
222
+ end
223
+
224
+ it 'should fail gracefully if counter has already a [string] value (double)' do
225
+
226
+ @db['counter'] = 'a'
227
+ lambda {
228
+ @db.adddouble('counter', 1.0)
229
+ }.should.raise(Rufus::Tokyo::TokyoError)
230
+ @db['counter'].should.equal('a')
231
+ end
232
+ end
233
+
234
+ describe 'Rufus::Tokyo::Tyrant (lua extensions)' do
235
+
236
+ before do
237
+ @db = Rufus::Tokyo::Tyrant.new('127.0.0.1', 45000)
238
+ @db.clear
239
+ end
240
+ after do
241
+ @db.close
242
+ end
243
+
244
+ it 'should call lua extensions' do
245
+
246
+ @db['toto'] = '0'
247
+ 3.times { @db.ext(:incr, 'toto', '1') }
248
+ @db.ext('incr', 'toto', 2) # lax
249
+
250
+ @db['toto'].should.equal('5')
251
+ end
252
+
253
+ it 'should return nil when function is missing' do
254
+
255
+ @db.ext(:missing, 'nada', 'forever').should.equal(nil)
256
+ end
257
+ end
258
+
259
+ describe 'Rufus::Tokyo::Tyrant#putkeep' do
260
+
261
+ before do
262
+ @db = Rufus::Tokyo::Tyrant.new('127.0.0.1', 45000)
263
+ @db.clear
264
+ end
265
+ after do
266
+ @db.close
267
+ end
268
+
269
+ it 'should accept values' do
270
+
271
+ @db.putkeep('pillow', 'Shonagon')
272
+ @db.size.should.equal(1)
273
+ end
274
+
275
+ it 'should restitute values' do
276
+
277
+ @db.putkeep('pillow', 'Shonagon')
278
+ @db['pillow'].should.equal('Shonagon')
279
+ end
280
+
281
+ it 'should not overwrite values if already set' do
282
+
283
+ @db['pillow'] = 'Shonagon'
284
+ @db['pillow'].should.equal('Shonagon')
285
+
286
+ @db.putkeep('pillow', 'Ruby')
287
+ @db['pillow'].should.equal('Shonagon')
288
+ end
289
+
290
+ it 'should return true if not yet set' do
291
+
292
+ @db.putkeep('pillow', 'Shonagon').should.equal(true)
293
+ end
294
+
295
+ it 'should return false if already set' do
296
+
297
+ @db['pillow'] = 'Shonagon'
298
+ @db.putkeep('pillow', 'Ruby').should.equal(false)
299
+ end
300
+
301
+ it 'should accept binary data \0' do
302
+
303
+ s = "Sei#{0.chr}Shonagon"
304
+
305
+ @db.putkeep(s, s).should.be.true
306
+ @db[s].should.equal(s)
307
+ end
308
+ end
309
+
@@ -0,0 +1,479 @@
1
+
2
+ #
3
+ # Specifying rufus-tokyo
4
+ #
5
+ # Sun Feb 8 22:55:11 JST 2009
6
+ #
7
+
8
+ require File.dirname(__FILE__) + '/spec_base'
9
+
10
+ require 'rufus/tokyo/tyrant'
11
+
12
+
13
+ describe 'Rufus::Tokyo::TyrantTable' do
14
+
15
+ it 'should refuse to connect to a plain Tyrant' do
16
+
17
+ lambda {
18
+ t = Rufus::Tokyo::TyrantTable.new('127.0.0.1', 45000)
19
+ }.should.raise(ArgumentError)
20
+ end
21
+ end
22
+
23
+
24
+ describe 'Rufus::Tokyo::TyrantTable' do
25
+
26
+ before do
27
+ @t = Rufus::Tokyo::TyrantTable.new('127.0.0.1', 45001)
28
+ #puts @t.stat.inject('') { |s, (k, v)| s << "#{k} => #{v}\n" }
29
+ @t.clear
30
+ end
31
+
32
+ after do
33
+ @t.close
34
+ end
35
+
36
+ it 'should respond to stat' do
37
+
38
+ @t.stat['type'].should.equal('table')
39
+ end
40
+
41
+ it 'should generate unique ids' do
42
+
43
+ @t.genuid.should.satisfy { |i| i > 0 }
44
+ end
45
+
46
+ it 'should clear db' do
47
+
48
+ @t.clear
49
+ @t.size.should.be.zero
50
+ end
51
+
52
+ it 'should return nil for missing keys' do
53
+
54
+ @t['missing'].should.be.nil
55
+ end
56
+
57
+ it 'should accept map input' do
58
+
59
+ @t['pk0'] = value = { 'name' => 'fred', 'age' => '22' }
60
+ @t['pk0'].should.equal(value)
61
+ end
62
+
63
+ it 'should raise an ArgumentError on non map or hash input' do
64
+
65
+ lambda {
66
+ @t['pk0'] = 'bad thing here'
67
+ }.should.raise(ArgumentError)
68
+ end
69
+
70
+ unless defined?(JRUBY_VERSION)
71
+ it 'should raise an ArgumentError on non-string column name' do
72
+
73
+ lambda {
74
+ @t['pk0'] = [ 1, 2 ]
75
+ }.should.raise(ArgumentError)
76
+ lambda {
77
+ @t['pk0'] = { 1 => 2 }
78
+ }.should.raise(ArgumentError)
79
+ end
80
+
81
+ it 'should raise an ArgumentError on non-string column value' do
82
+
83
+ lambda {
84
+ @t['pk0'] = { 'a' => 2 }
85
+ }.should.raise(ArgumentError)
86
+ end
87
+ end
88
+
89
+ it 'should return map values' do
90
+
91
+ @t['pk0'] = { 'name' => 'toto', 'age' => '30' }
92
+ @t['pk0'].should.equal({ 'name' => 'toto', 'age' => '30' })
93
+ end
94
+
95
+ it 'should delete records' do
96
+
97
+ @t['pk0'] = { 'name' => 'toto', 'age' => '30' }
98
+ @t.delete('pk0')
99
+ @t['pk0'].should.be.nil
100
+ end
101
+
102
+ it 'should return deleted value' do
103
+
104
+ @t['pk0'] = old = { 'name' => 'toto', 'age' => '30' }
105
+ @t.delete('pk0').should.equal(old)
106
+ end
107
+
108
+ it 'should change store size after deleting' do
109
+
110
+ @t['pk0'] = { 'name' => 'toto', 'age' => '30' }
111
+ @t.delete('pk0')
112
+ @t.size.should.be.zero
113
+ end
114
+
115
+ it 'should not support transactions' do
116
+ lambda {
117
+ @t.transaction {}
118
+ }.should.raise(NoMethodError)
119
+ lambda {
120
+ @t.abort
121
+ }.should.raise(NoMethodError)
122
+ end
123
+
124
+ it 'should store binary data \0' do
125
+ s = "toto#{0.chr}nada"
126
+ @t[s] = { s => s }
127
+ @t[s].should.equal({ s => s })
128
+ end
129
+
130
+ end
131
+
132
+
133
+ describe 'Rufus::Tokyo::Table #keys' do
134
+
135
+ before do
136
+ @n = 50
137
+ @tab = Rufus::Tokyo::TyrantTable.new('127.0.0.1', 45001)
138
+ @tab.clear
139
+ @n.times { |i| @tab["person#{i}"] = { 'name' => 'whoever' } }
140
+ @n.times { |i| @tab["animal#{i}"] = { 'name' => 'whichever' } }
141
+ @tab["toto#{0.chr}5"] = { 'name' => 'toto' }
142
+ end
143
+
144
+ after do
145
+ @tab.close
146
+ end
147
+
148
+ it 'should return a Ruby Array by default' do
149
+
150
+ @tab.keys.class.should.equal(::Array)
151
+ end
152
+
153
+ it 'should return a Cabinet List when :native => true' do
154
+
155
+ l = @tab.keys(:native => true)
156
+ l.class.should.equal(Rufus::Tokyo::List)
157
+ l.size.should.equal(2 * @n + 1)
158
+ l.free
159
+ end
160
+
161
+ it 'should retrieve forward matching keys when :prefix => "prefix-"' do
162
+
163
+ @tab.keys(:prefix => 'person').size.should.equal(@n)
164
+
165
+ l = @tab.keys(:prefix => 'animal', :native => true)
166
+ l.size.should.equal(@n)
167
+ l.free
168
+ end
169
+
170
+ it 'should retrieve keys that contain \0' do
171
+
172
+ @tab.keys.include?("toto#{0.chr}5").should.be.true
173
+ end
174
+
175
+ it 'should retrieve forward matching keys when key contains \0' do
176
+
177
+ @tab.keys(:prefix => 'toto').should.equal([ "toto#{0.chr}5" ])
178
+ end
179
+
180
+ it 'should return a limited number of keys when :limit is set' do
181
+
182
+ @tab.keys(:limit => 20).size.should.equal(20)
183
+ end
184
+
185
+ it 'should delete_keys_with_prefix' do
186
+
187
+ @tab.delete_keys_with_prefix('animal')
188
+ @tab.size.should.equal(@n + 1)
189
+ @tab.keys(:prefix => 'animal').size.should.equal(0)
190
+ end
191
+ end
192
+
193
+
194
+ def prepare_table_with_data (port)
195
+ t = Rufus::Tokyo::TyrantTable.new('127.0.0.1', port)
196
+ t.clear
197
+ t['pk0'] = { 'name' => 'jim', 'age' => '25', 'lang' => 'ja,en' }
198
+ t['pk1'] = { 'name' => 'jeff', 'age' => '32', 'lang' => 'en,es' }
199
+ t['pk2'] = { 'name' => 'jack', 'age' => '44', 'lang' => 'en' }
200
+ t['pk3'] = { 'name' => 'jake', 'age' => '45', 'lang' => 'en,li' }
201
+ t
202
+ end
203
+
204
+ describe 'a Tokyo Tyrant table' do
205
+
206
+ before do
207
+ @t = prepare_table_with_data(45001)
208
+ end
209
+ after do
210
+ @t.close
211
+ # TODO : well there are trailing indexes now... :(
212
+ end
213
+
214
+ it 'should accept lexical indexes' do
215
+ @t.set_index('name', :lexical).should.equal(true)
216
+ end
217
+
218
+ it 'should accept decimal indexes' do
219
+ @t.set_index('age', :decimal).should.equal(true)
220
+ end
221
+
222
+ it 'should accept removal of indexes' do
223
+ @t.set_index('age', :decimal)
224
+ @t.set_index('age', :remove).should.equal(true)
225
+ end
226
+
227
+ it 'should accept indexes on the primary key (well...)' do
228
+ @t.set_index(:pk, :lexical).should.equal(true)
229
+ @t.set_index('', :lexical).should.equal(true)
230
+ end
231
+ end
232
+
233
+
234
+ describe 'Rufus::Tokyo::TyrantTable#lget' do
235
+
236
+ before do
237
+ @t = prepare_table_with_data(45001)
238
+ end
239
+ after do
240
+ @t.close
241
+ end
242
+
243
+ it 'should return an empty hash for missing keys' do
244
+ @t.lget(%w{ pk97 pk98 }).should.equal({})
245
+ end
246
+
247
+ it 'should return multiple records' do
248
+ @t.lget(%w{ pk0 pk1 }).should.equal({
249
+ 'pk0' => { 'name' => 'jim', 'age' => '25', 'lang' => 'ja,en' },
250
+ 'pk1' => { 'name' => 'jeff', 'age' => '32', 'lang' => 'en,es' }
251
+ })
252
+ end
253
+ end
254
+
255
+
256
+ describe 'a Tokyo Tyrant table, like a Ruby Hash,' do
257
+
258
+ before do
259
+ @t = prepare_table_with_data(45001)
260
+ end
261
+ after do
262
+ @t.close
263
+ end
264
+
265
+ it 'should respond to #keys' do
266
+
267
+ @t.keys.should.equal([ 'pk0', 'pk1', 'pk2', 'pk3' ])
268
+ end
269
+
270
+ it 'should respond to #values' do
271
+
272
+ @t.values.should.equal([
273
+ { 'name' => 'jim', 'age' => '25', 'lang' => 'ja,en' },
274
+ { 'name' => 'jeff', 'age' => '32', 'lang' => 'en,es' },
275
+ { 'name' => 'jack', 'age' => '44', 'lang' => 'en' },
276
+ { 'name' => 'jake', 'age' => '45', 'lang' => 'en,li' }])
277
+ end
278
+
279
+ it 'should benefit from Enumerable' do
280
+
281
+ @t.find { |k, v|
282
+ v['name'] == 'jeff'
283
+ }.should.equal([
284
+ 'pk1', { 'name' => 'jeff', 'age' => '32', 'lang' => 'en,es' }])
285
+ end
286
+ end
287
+
288
+
289
+ describe 'queries on Tokyo Tyrant tables' do
290
+
291
+ before do
292
+ @t = prepare_table_with_data(45001)
293
+ end
294
+ after do
295
+ @t.close
296
+ end
297
+
298
+ it 'can be executed' do
299
+
300
+ @t.query { |q|
301
+ q.add 'lang', :includes, 'en'
302
+ }.size.should.equal(4)
303
+ end
304
+
305
+ it 'can be prepared' do
306
+
307
+ @t.prepare_query { |q|
308
+ q.add 'lang', :includes, 'en'
309
+ }.should.satisfy { |q| q.class == Rufus::Tokyo::TableQuery }
310
+ end
311
+
312
+ it 'can be counted' do
313
+
314
+ #@t.prepare_query { |q|
315
+ # q.add 'lang', :includes, 'en'
316
+ #}.count.should.equal(4)
317
+
318
+ q = @t.prepare_query { |q|
319
+ q.add 'lang', :includes, 'en'
320
+ }
321
+ q.run
322
+ q.count.should.equal(4)
323
+ end
324
+
325
+ it 'can be limited' do
326
+
327
+ @t.query { |q|
328
+ q.add 'lang', :includes, 'en'
329
+ q.limit 2
330
+ }.size.should.equal(2)
331
+ end
332
+
333
+ it 'can leverage regex matches' do
334
+
335
+ @t.query { |q|
336
+ q.add 'name', :matches, '^j.+k'
337
+ }.to_a.should.equal([
338
+ {:pk => 'pk2', "name"=>"jack", "lang"=>"en", "age"=>"44"},
339
+ {:pk => 'pk3', "name"=>"jake", "lang"=>"en,li", "age"=>"45"}])
340
+ end
341
+
342
+ it 'can leverage numerical comparison (gt)' do
343
+
344
+ @t.query { |q|
345
+ q.add 'age', :gt, '40'
346
+ q.pk_only
347
+ }.to_a.should.equal([ 'pk2', 'pk3' ])
348
+ end
349
+
350
+ it 'can have negated conditions' do
351
+
352
+ @t.query { |q|
353
+ q.add 'age', :gt, '40', false
354
+ q.pk_only
355
+ }.to_a.should.equal([ 'pk0', 'pk1' ])
356
+ end
357
+
358
+
359
+ if Rufus::Tokyo::TyrantLib.respond_to?(:qry_setlimit)
360
+
361
+ it 'can be limited and have an offset' do
362
+
363
+ @t.query { |q|
364
+ q.add 'lang', :includes, 'en'
365
+ q.order_by 'name', :desc
366
+ q.limit 2, 0
367
+ }.collect { |e| e['name'] }.should.equal(%w{ jim jeff })
368
+ @t.query { |q|
369
+ q.add 'lang', :includes, 'en'
370
+ q.order_by 'name', :desc
371
+ q.limit 2, 2
372
+ }.collect { |e| e['name'] }.should.equal(%w{ jake jack })
373
+ end
374
+ end
375
+
376
+ it 'can be deleted (searchout : query#delete)' do
377
+
378
+ @t.prepare_query { |q|
379
+ q.add 'lang', :includes, 'es'
380
+ }.delete
381
+
382
+ @t.size.should.equal(3)
383
+ end
384
+
385
+ it 'can be deleted immediately (searchout table#query_delete)' do
386
+
387
+ @t.query_delete { |q|
388
+ q.add 'lang', :includes, 'es'
389
+ }
390
+
391
+ @t.size.should.equal(3)
392
+ end
393
+ end
394
+
395
+ describe 'Tokyo Tyrant and TableQuery#process' do
396
+
397
+ before do
398
+ @t = prepare_table_with_data(45001)
399
+ end
400
+ after do
401
+ @t.close
402
+ end
403
+
404
+ it 'should not work' do
405
+
406
+ lambda {
407
+ @t.prepare_query { |q|
408
+ q.add 'lang', :includes, 'en'
409
+ }.process { |k, v|
410
+ }.free
411
+ }.should.raise(NoMethodError)
412
+ end
413
+ end
414
+
415
+ describe 'results from Tokyo Tyrant table queries' do
416
+
417
+ before do
418
+ @t = prepare_table_with_data(45001)
419
+ end
420
+
421
+ after do
422
+ @t.close
423
+ end
424
+
425
+ it 'can come ordered (strdesc)' do
426
+
427
+ @t.query { |q|
428
+ q.add 'lang', :includes, 'en'
429
+ q.order_by 'name', :desc
430
+ q.limit 2
431
+ }.to_a.should.equal([
432
+ {:pk => 'pk0', "name"=>"jim", "lang"=>"ja,en", "age"=>"25"},
433
+ {:pk => 'pk1', "name"=>"jeff", "lang"=>"en,es", "age"=>"32"}])
434
+ end
435
+
436
+ it 'can come ordered (strasc)' do
437
+
438
+ @t.query { |q|
439
+ q.add 'lang', :includes, 'en'
440
+ q.order_by 'name', :asc
441
+ }.to_a.should.equal([
442
+ {:pk => 'pk2', "name"=>"jack", "lang"=>"en", "age"=>"44"},
443
+ {:pk => 'pk3', "name"=>"jake", "lang"=>"en,li", "age"=>"45"},
444
+ {:pk => 'pk1', "name"=>"jeff", "lang"=>"en,es", "age"=>"32"},
445
+ {:pk => 'pk0', "name"=>"jim", "lang"=>"ja,en", "age"=>"25"}])
446
+ end
447
+
448
+ it 'can come ordered (numasc)' do
449
+
450
+ @t.query { |q|
451
+ q.add 'lang', :includes, 'en'
452
+ q.order_by 'age', :numasc
453
+ }.to_a.should.equal([
454
+ {:pk => 'pk0', "name"=>"jim", "lang"=>"ja,en", "age"=>"25"},
455
+ {:pk => 'pk1', "name"=>"jeff", "lang"=>"en,es", "age"=>"32"},
456
+ {:pk => 'pk2', "name"=>"jack", "lang"=>"en", "age"=>"44"},
457
+ {:pk => 'pk3', "name"=>"jake", "lang"=>"en,li", "age"=>"45"}])
458
+ end
459
+
460
+ it 'can come without the primary keys (no_pk)' do
461
+
462
+ @t.query { |q|
463
+ q.add 'name', :matches, '^j.+k'
464
+ q.no_pk
465
+ }.to_a.should.equal([
466
+ {"name"=>"jack", "lang"=>"en", "age"=>"44"},
467
+ {"name"=>"jake", "lang"=>"en,li", "age"=>"45"}])
468
+ end
469
+
470
+ it 'can consist only of the primary keys (pk_only)' do
471
+
472
+ @t.query { |q|
473
+ q.add 'name', :matches, '^j.+k'
474
+ q.pk_only
475
+ }.to_a.should.equal(["pk2", "pk3"])
476
+ end
477
+
478
+ end
479
+