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