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,560 @@
1
+
2
+ #
3
+ # Specifying rufus-tokyo
4
+ #
5
+ # Mon Feb 23 11:11:10 JST 2009
6
+ #
7
+
8
+ require File.dirname(__FILE__) + '/spec_base'
9
+
10
+ begin
11
+ require 'rufus/edo'
12
+ rescue LoadError
13
+ end
14
+
15
+ if defined?(TokyoCabinet)
16
+
17
+ FileUtils.mkdir('tmp') rescue nil
18
+
19
+
20
+ describe 'Rufus::Edo::Table' do
21
+
22
+ it 'should open in write/create mode by default' do
23
+
24
+ t = Rufus::Edo::Table.new('tmp/default.tct')
25
+ t.close
26
+ File.exist?('tmp/default.tct').should.equal(true)
27
+ FileUtils.rm('tmp/default.tct')
28
+ end
29
+
30
+ it 'should raise an error when file is missing' do
31
+
32
+ lambda {
33
+ Rufus::Edo::Table.new('tmp/missing.tct', :mode => 'r')
34
+ }.should.raise(
35
+ Rufus::Edo::EdoError).message.should.equal('(err 3) file not found')
36
+ end
37
+ end
38
+
39
+ describe 'Rufus::Edo::Table' do
40
+
41
+ before do
42
+ @t = Rufus::Edo::Table.new('tmp/table.tct')
43
+ @t.clear
44
+ end
45
+ after do
46
+ @t.close
47
+ end
48
+
49
+ it 'should return its path' do
50
+
51
+ @t.path.should.equal('tmp/table.tct')
52
+ end
53
+
54
+ it 'should generate unique ids' do
55
+
56
+ @t.genuid.should.satisfy { |i| i > 0 }
57
+ end
58
+
59
+ it 'should return nil for missing keys' do
60
+
61
+ @t['missing'].should.be.nil
62
+ end
63
+
64
+ it 'should accept Array and Hash input' do
65
+
66
+ @t.size.should.equal(0)
67
+
68
+ @t['pk0'] = [ 'name', 'toto', 'age', '30' ]
69
+ @t['pk1'] = { 'name' => 'fred', 'age' => '22' }
70
+
71
+ @t.size.should.equal(2)
72
+ @t['pk0'].should.equal({ 'name' => 'toto', 'age' => '30' })
73
+ end
74
+
75
+ it 'should return nil when deleting inexistent entries' do
76
+
77
+ @t.delete('I_do_not_exist').should.equal(nil)
78
+ end
79
+
80
+ it 'should delete the entry and return the value' do
81
+
82
+ @t['pk0'] = [ 'name', 'toto', 'age', '30' ]
83
+ @t.delete('pk0').should.equal({ 'name' => 'toto', 'age' => '30' })
84
+ @t.size.should.equal(0)
85
+ end
86
+
87
+ it 'should raise an ArgumentError on non map or hash input' do
88
+
89
+ lambda {
90
+ @t['pk0'] = 'bad thing here'
91
+ }.should.raise(ArgumentError)
92
+ end
93
+
94
+ it 'should raise an ArgumentError on non-string column name' do
95
+
96
+ lambda {
97
+ @t['pk0'] = [ 1, 2 ]
98
+ }.should.raise(ArgumentError)
99
+ lambda {
100
+ @t['pk0'] = { 1 => 2 }
101
+ }.should.raise(ArgumentError)
102
+ end
103
+
104
+ it 'should raise an ArgumentError on non-string column value' do
105
+
106
+ lambda {
107
+ @t['pk0'] = { 'a' => 2 }
108
+ }.should.raise(ArgumentError)
109
+ end
110
+
111
+ it 'should correctly abort transactions' do
112
+
113
+ @t.transaction {
114
+ @t['pk0'] = { 'a' => 'A' }
115
+ @t.abort
116
+ }
117
+ @t.size.should.be.zero
118
+ end
119
+
120
+ it 'should rollback transactions with errors' do
121
+
122
+ @t.transaction {
123
+ @t['pk0'] = { 'a' => 'A' }
124
+ raise "something goes wrong"
125
+ }
126
+ @t.size.should.be.zero
127
+ end
128
+
129
+ it 'should commit successful transactions' do
130
+
131
+ @t.transaction do
132
+ @t['pk0'] = { 'a' => 'A' }
133
+ end
134
+ @t['pk0'].should.equal({ 'a' => 'A' })
135
+ end
136
+
137
+ it 'should abort low level transactions' do
138
+
139
+ @t.tranbegin
140
+ @t['pk0'] = { 'a' => 'A' }
141
+ @t.tranabort
142
+ @t.size.should.be.zero
143
+ end
144
+
145
+ it 'should commit low level transactions' do
146
+
147
+ @t.tranbegin
148
+ @t['pk0'] = { 'a' => 'A' }
149
+ @t.trancommit
150
+ @t['pk0'].should.equal({ 'a' => 'A' })
151
+ end
152
+
153
+ it 'should store binary data \0' do
154
+ s = "toto#{0.chr}nada"
155
+ @t[s] = { s => s }
156
+ @t[s].should.equal({ s => s })
157
+ end
158
+
159
+ end
160
+
161
+
162
+ describe 'Rufus::Edo::Table #keys' do
163
+
164
+ before do
165
+ @n = 50
166
+ @tab = Rufus::Edo::Table.new('tmp/test_new.tct')
167
+ @tab.clear
168
+ @n.times { |i| @tab["person#{i}"] = { 'name' => 'whoever' } }
169
+ @n.times { |i| @tab["animal#{i}"] = { 'name' => 'whichever' } }
170
+ @tab["toto#{0.chr}5"] = { 'name' => 'toto' }
171
+ end
172
+ after do
173
+ @tab.close
174
+ end
175
+
176
+ it 'should return a Ruby Array by default' do
177
+
178
+ @tab.keys.class.should.equal(::Array)
179
+ end
180
+
181
+ it 'should retrieve forward matching keys when :prefix => "prefix-"' do
182
+
183
+ @tab.keys(:prefix => 'person').size.should.equal(@n)
184
+ end
185
+
186
+ it 'should retrieve keys that contain \0' do
187
+
188
+ @tab.keys.include?("toto#{0.chr}5").should.be.true
189
+ end
190
+
191
+ it 'should retrieve forward matching keys when key contains \0' do
192
+
193
+ @tab.keys(:prefix => 'toto').should.equal([ "toto#{0.chr}5" ])
194
+ end
195
+
196
+ it 'should return a limited number of keys when :limit is set' do
197
+
198
+ @tab.keys(:limit => 20).size.should.equal(20)
199
+ end
200
+
201
+ it 'should delete_keys_with_prefix' do
202
+
203
+ @tab.delete_keys_with_prefix('animal')
204
+ @tab.size.should.equal(@n + 1)
205
+ @tab.keys(:prefix => 'animal').size.should.equal(0)
206
+ end
207
+ end
208
+
209
+
210
+ def prepare_table_with_data
211
+
212
+ t = Rufus::Edo::Table.new('tmp/test_new.tct')
213
+ t.clear
214
+ t['pk0'] = { 'name' => 'jim', 'age' => '25', 'lang' => 'ja,en' }
215
+ t['pk1'] = { 'name' => 'jeff', 'age' => '32', 'lang' => 'en,es' }
216
+ t['pk2'] = { 'name' => 'jack', 'age' => '44', 'lang' => 'en' }
217
+ t['pk3'] = { 'name' => 'jake', 'age' => '45', 'lang' => 'en,li' }
218
+ t
219
+ end
220
+
221
+ describe 'Rufus::Edo::Table' do
222
+
223
+ before do
224
+ @t = prepare_table_with_data
225
+ end
226
+ after do
227
+ @t.close
228
+ end
229
+
230
+ it 'should accept lexical indexes' do
231
+ @t.set_index('name', :lexical).should.equal(true)
232
+ end
233
+
234
+ it 'should accept decimal indexes' do
235
+ @t.set_index('age', :decimal).should.equal(true)
236
+ end
237
+
238
+ it 'should accept removal of indexes' do
239
+ @t.set_index('age', :decimal)
240
+ @t.set_index('age', :remove).should.equal(true)
241
+ end
242
+
243
+ it 'should accept indexes on the primary key (well...)' do
244
+ @t.set_index(:pk, :lexical).should.equal(true)
245
+ @t.set_index('', :lexical).should.equal(true)
246
+ end
247
+ end
248
+
249
+ describe 'Rufus::Edo::Table#lget' do
250
+
251
+ before do
252
+ @t = prepare_table_with_data
253
+ end
254
+ after do
255
+ @t.close
256
+ end
257
+
258
+ it 'should return an empty hash for missing keys' do
259
+ @t.lget(%w{ pk97 pk98 }).should.equal({})
260
+ end
261
+
262
+ it 'should return multiple records' do
263
+ @t.lget(%w{ pk0 pk1 }).should.equal({
264
+ 'pk0' => { 'name' => 'jim', 'age' => '25', 'lang' => 'ja,en' },
265
+ 'pk1' => { 'name' => 'jeff', 'age' => '32', 'lang' => 'en,es' }
266
+ })
267
+ end
268
+ end
269
+
270
+ describe 'Rufus::Edo::Table, like a Ruby Hash,' do
271
+
272
+ before do
273
+ @t = prepare_table_with_data
274
+ end
275
+ after do
276
+ @t.close
277
+ end
278
+
279
+ it 'should respond to #keys' do
280
+
281
+ @t.keys.should.equal([ 'pk0', 'pk1', 'pk2', 'pk3' ])
282
+ end
283
+
284
+ it 'should respond to #values' do
285
+
286
+ @t.values.should.equal([
287
+ { 'name' => 'jim', 'age' => '25', 'lang' => 'ja,en' },
288
+ { 'name' => 'jeff', 'age' => '32', 'lang' => 'en,es' },
289
+ { 'name' => 'jack', 'age' => '44', 'lang' => 'en' },
290
+ { 'name' => 'jake', 'age' => '45', 'lang' => 'en,li' }])
291
+ end
292
+
293
+ it 'should benefit from Enumerable' do
294
+
295
+ @t.find { |k, v|
296
+ v['name'] == 'jeff'
297
+ }.should.equal([
298
+ 'pk1', { 'name' => 'jeff', 'age' => '32', 'lang' => 'en,es' }])
299
+ end
300
+ end
301
+
302
+ describe 'queries on Rufus::Edo::Table' do
303
+
304
+ before do
305
+ @t = prepare_table_with_data
306
+ end
307
+ after do
308
+ @t.close
309
+ end
310
+
311
+ it 'can be executed' do
312
+
313
+ @t.query { |q|
314
+ q.add 'lang', :includes, 'en'
315
+ }.size.should.equal(4)
316
+ end
317
+
318
+ it 'can be prepared' do
319
+
320
+ @t.prepare_query { |q|
321
+ q.add 'lang', :includes, 'en'
322
+ }.should.satisfy { |q| q.class == Rufus::Edo::TableQuery }
323
+ end
324
+
325
+ it 'can be counted' do
326
+ # testing the mimicking the count function of TC 1.4.21
327
+
328
+ q = @t.prepare_query { |q|
329
+ q.add 'lang', :includes, 'en'
330
+ }
331
+ q.run
332
+ q.count.should.equal(4)
333
+ end
334
+
335
+ it 'can be limited' do
336
+
337
+ @t.query { |q|
338
+ q.add 'lang', :includes, 'en'
339
+ q.limit 2
340
+ }.size.should.equal(2)
341
+ end
342
+
343
+ it 'can leverage regex matches' do
344
+
345
+ @t.query { |q|
346
+ q.add 'name', :matches, '^j.+k'
347
+ }.to_a.should.equal([
348
+ {:pk => 'pk2', "name"=>"jack", "lang"=>"en", "age"=>"44"},
349
+ {:pk => 'pk3', "name"=>"jake", "lang"=>"en,li", "age"=>"45"}])
350
+ end
351
+
352
+ it 'can leverage numerical comparison (gt)' do
353
+
354
+ @t.query { |q|
355
+ q.add 'age', :gt, '40'
356
+ q.pk_only
357
+ }.to_a.should.equal([ 'pk2', 'pk3' ])
358
+ end
359
+
360
+ it 'can have negated conditions' do
361
+
362
+ @t.query { |q|
363
+ q.add 'age', :gt, '40', false
364
+ q.pk_only
365
+ }.to_a.should.equal([ 'pk0', 'pk1' ])
366
+ end
367
+
368
+ if TokyoCabinet::TDBQRY.public_instance_methods.collect { |e|
369
+ e.to_s }.include?('setlimit')
370
+
371
+ it 'can be limited and have an offset' do
372
+
373
+ @t.query { |q|
374
+ q.add 'lang', :includes, 'en'
375
+ q.order_by 'name', :desc
376
+ q.limit 2, 0
377
+ }.collect { |e| e['name'] }.should.equal(%w{ jim jeff })
378
+ @t.query { |q|
379
+ q.add 'lang', :includes, 'en'
380
+ q.order_by 'name', :desc
381
+ q.limit 2, 2
382
+ }.collect { |e| e['name'] }.should.equal(%w{ jake jack })
383
+ end
384
+ end
385
+
386
+ it 'can be deleted (searchout : query#delete)' do
387
+
388
+ @t.prepare_query { |q|
389
+ q.add 'lang', :includes, 'es'
390
+ }.delete
391
+
392
+ @t.size.should.equal(3)
393
+ end
394
+
395
+ it 'can be deleted immediately (searchout table#query_delete)' do
396
+
397
+ @t.query_delete { |q|
398
+ q.add 'lang', :includes, 'es'
399
+ }
400
+
401
+ @t.size.should.equal(3)
402
+ end
403
+
404
+ end
405
+
406
+ describe 'Rufus::Tokyo::TableQuery#process' do
407
+
408
+ before do
409
+ @t = prepare_table_with_data
410
+ end
411
+ after do
412
+ @t.close
413
+ end
414
+
415
+ it 'can iterate over the matching records' do
416
+
417
+ keys, values = [], []
418
+
419
+ @t.prepare_query { |q|
420
+ q.add 'lang', :includes, 'en'
421
+ }.process { |k, v|
422
+ keys << k
423
+ values << v
424
+ }.free
425
+
426
+ keys.should.equal(%w[ pk0 pk1 pk2 pk3 ])
427
+ values.first.keys.sort.should.equal(%w[ age lang name ])
428
+ end
429
+
430
+ it 'can stop while iterating' do
431
+
432
+ seen = 0
433
+
434
+ @t.prepare_query { |q|
435
+ q.add 'lang', :includes, 'en'
436
+ }.process { |k, v|
437
+ seen = seen + 1
438
+ :stop
439
+ }.free
440
+
441
+ seen.should.equal(1)
442
+ end
443
+
444
+ it 'can delete while iterating' do
445
+
446
+ @t.prepare_query { |q|
447
+ q.add 'lang', :includes, 'en'
448
+ }.process { |k, v|
449
+ v['name'].match(/^ja/) ? :delete : nil
450
+ }.free
451
+
452
+ @t.keys.sort.should.equal(%w[ pk0 pk1 ])
453
+ end
454
+
455
+ it 'can update while iterating' do
456
+
457
+ @t.prepare_query { |q|
458
+ q.add 'lang', :includes, 'en'
459
+ }.process { |k, v|
460
+ v['name'].match(/^ja/) ? v.merge('special' => 'seen') : nil
461
+ }.free
462
+
463
+ @t.size.should.equal(4)
464
+
465
+ @t['pk2'].should.equal(
466
+ {'name'=>'jack', 'age'=>'44', 'lang'=>'en', 'special'=>'seen'})
467
+ @t['pk3'].should.equal(
468
+ {'name'=>'jake', 'age'=>'45', 'lang'=>'en,li', 'special'=>'seen'})
469
+ end
470
+
471
+ it 'can update, delete and stop' do
472
+
473
+ seen = []
474
+
475
+ @t.prepare_query { |q|
476
+ q.add 'lang', :includes, 'en'
477
+ q.order_by 'name', :desc
478
+ }.process { |k, v|
479
+ seen << v['name']
480
+ case v['name']
481
+ when 'jim' then nil
482
+ when 'jeff' then :delete
483
+ when 'jake' then [ :stop, v.merge('special' => 'nada') ]
484
+ end
485
+ }.free
486
+
487
+ seen.include?('jack').should.be.false
488
+
489
+ @t.size.should.equal(3)
490
+
491
+ @t['pk3'].should.equal(
492
+ {'name'=>'jake', 'age'=>'45', 'lang'=>'en,li', 'special'=>'nada'})
493
+ @t['pk1'].should.be.nil
494
+ end
495
+ end
496
+
497
+ describe 'results from Rufus::Edo::Table queries' do
498
+
499
+ before do
500
+ @t = prepare_table_with_data
501
+ end
502
+ after do
503
+ @t.close
504
+ end
505
+
506
+ it 'can come ordered (strdesc)' do
507
+
508
+ @t.query { |q|
509
+ q.add 'lang', :includes, 'en'
510
+ q.order_by 'name', :desc
511
+ q.limit 2
512
+ }.to_a.should.equal([
513
+ {:pk => 'pk0', "name"=>"jim", "lang"=>"ja,en", "age"=>"25"},
514
+ {:pk => 'pk1', "name"=>"jeff", "lang"=>"en,es", "age"=>"32"}])
515
+ end
516
+
517
+ it 'can come ordered (strasc)' do
518
+
519
+ @t.query { |q|
520
+ q.add 'lang', :includes, 'en'
521
+ q.order_by 'name', :asc
522
+ }.to_a.should.equal([
523
+ {:pk => 'pk2', "name"=>"jack", "lang"=>"en", "age"=>"44"},
524
+ {:pk => 'pk3', "name"=>"jake", "lang"=>"en,li", "age"=>"45"},
525
+ {:pk => 'pk1', "name"=>"jeff", "lang"=>"en,es", "age"=>"32"},
526
+ {:pk => 'pk0', "name"=>"jim", "lang"=>"ja,en", "age"=>"25"}])
527
+ end
528
+
529
+ it 'can come ordered (numasc)' do
530
+
531
+ @t.query { |q|
532
+ q.add 'lang', :includes, 'en'
533
+ q.order_by 'age', :numasc
534
+ }.to_a.should.equal([
535
+ {:pk => 'pk0', "name"=>"jim", "lang"=>"ja,en", "age"=>"25"},
536
+ {:pk => 'pk1', "name"=>"jeff", "lang"=>"en,es", "age"=>"32"},
537
+ {:pk => 'pk2', "name"=>"jack", "lang"=>"en", "age"=>"44"},
538
+ {:pk => 'pk3', "name"=>"jake", "lang"=>"en,li", "age"=>"45"}])
539
+ end
540
+
541
+ it 'can come without the primary keys (no_pk)' do
542
+
543
+ @t.query { |q|
544
+ q.add 'name', :matches, '^j.+k'
545
+ q.no_pk
546
+ }.to_a.should.equal([
547
+ {"name"=>"jack", "lang"=>"en", "age"=>"44"},
548
+ {"name"=>"jake", "lang"=>"en,li", "age"=>"45"}])
549
+ end
550
+
551
+ it 'can consist only of the primary keys (pk_only)' do
552
+
553
+ @t.query { |q|
554
+ q.add 'name', :matches, '^j.+k'
555
+ q.pk_only
556
+ }.to_a.should.equal(["pk2", "pk3"])
557
+ end
558
+ end
559
+ end
560
+