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,59 @@
1
+ #--
2
+ # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #
22
+ # Made in Japan.
23
+ #++
24
+
25
+
26
+ module Rufus
27
+ module Tokyo
28
+
29
+ #
30
+ # #stat and #compte_ext_opts, that's all.
31
+ #
32
+ module TyrantCommons
33
+
34
+ # Returns a hash of information about the Tokyo Tyrant database (or table)
35
+ # at the other end of the connection.
36
+ #
37
+ def stat
38
+
39
+ do_stat.split("\n").inject({}) { |r, l|
40
+ kv = l.split("\t")
41
+ r[kv.first] = kv.last
42
+ r
43
+ }
44
+ end
45
+
46
+ # Computes the :int option for the "ext" function (triggering
47
+ # tyrant embedded lua functions)
48
+ #
49
+ def compute_ext_opts (opts)
50
+
51
+ r = 0
52
+ r = r | 1 if opts[:record_locking]
53
+ r = r | 2 if opts[:global_locking]
54
+ r
55
+ end
56
+ end
57
+ end
58
+ end
59
+
@@ -0,0 +1,35 @@
1
+ #--
2
+ # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #
22
+ # Made in Japan.
23
+ #++
24
+
25
+
26
+ require 'rufus/tokyo'
27
+
28
+
29
+ module Rufus::Tokyo
30
+ end
31
+
32
+ require 'rufus/tokyo/tyrant/lib'
33
+ require 'rufus/tokyo/tyrant/abstract'
34
+ require 'rufus/tokyo/tyrant/table'
35
+
@@ -0,0 +1,146 @@
1
+ #--
2
+ # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #
22
+ # Made in Japan.
23
+ #++
24
+
25
+
26
+ require 'rufus/tokyo/ttcommons'
27
+
28
+
29
+ module Rufus::Tokyo
30
+
31
+ #
32
+ # Connecting to a 'classic' tyrant server remotely
33
+ #
34
+ # require 'rufus/tokyo/tyrant'
35
+ # t = Rufus::Tokyo::Tyrant.new('127.0.0.1', 44001)
36
+ # t['toto'] = 'blah blah'
37
+ # t['toto'] # => 'blah blah'
38
+ #
39
+ class Tyrant < Cabinet
40
+
41
+ include TyrantCommons
42
+
43
+ attr_reader :host, :port
44
+
45
+ # Connects to a given Tokyo Tyrant server.
46
+ #
47
+ # Note that if the port is not specified, the host parameter is expected
48
+ # to hold the path to a unix socket (not a TCP socket).
49
+ #
50
+ # (You can start a unix socket listening Tyrant with :
51
+ #
52
+ # ttserver -host /tmp/tyrant_socket -port 0 data.tch
53
+ #
54
+ # and then connect to it with rufus-tokyo via :
55
+ #
56
+ # require 'rufus/tokyo/tyrant'
57
+ # db = Rufus::Tokyo::Tyrant.new('/tmp/tyrant_socket')
58
+ # db['a'] = 'alpha'
59
+ # db.close
60
+ # )
61
+ #
62
+ # To connect to a classic TCP bound Tyrant (port 44001) :
63
+ #
64
+ # t = Rufus::Tokyo::Tyrant.new('127.0.0.1', 44001)
65
+ #
66
+ def initialize (host, port=0)
67
+
68
+ @db = lib.tcrdbnew
69
+
70
+ @host = host
71
+ @port = port
72
+
73
+ (lib.tcrdbopen(@db, host, port) == 1) ||
74
+ raise("couldn't connect to tyrant at #{host}:#{port}")
75
+
76
+ if self.stat['type'] == 'table'
77
+
78
+ self.close
79
+
80
+ raise ArgumentError.new(
81
+ "tyrant at #{host}:#{port} is a table, " +
82
+ "use Rufus::Tokyo::TyrantTable instead to access it.")
83
+ end
84
+ end
85
+
86
+ # Using the tyrant lib
87
+ #
88
+ def lib
89
+
90
+ TyrantLib
91
+ end
92
+
93
+ # isn't that a bit dangerous ? it creates a file on the server...
94
+ #
95
+ # DISABLED.
96
+ #
97
+ def copy (target_path)
98
+
99
+ #@db.copy(target_path)
100
+ raise 'not allowed to create files on the server'
101
+ end
102
+
103
+ # Calls a lua embedded function
104
+ # (http://tokyocabinet.sourceforge.net/tyrantdoc/#luaext)
105
+ #
106
+ # Options are :global_locking and :record_locking
107
+ #
108
+ # Returns the return value of the called function.
109
+ #
110
+ # Nil is returned in case of failure.
111
+ #
112
+ def ext (func_name, key, value, opts={})
113
+
114
+ k = key.to_s
115
+ v = value.to_s
116
+
117
+ outlen_op(
118
+ :tcrdbext,
119
+ func_name.to_s,
120
+ compute_ext_opts(opts),
121
+ k, Rufus::Tokyo.blen(k),
122
+ v, Rufus::Tokyo.blen(v))
123
+ end
124
+
125
+ # Tyrant databases DO NOT support the 'defrag' call. Calling this method
126
+ # will raise an exception.
127
+ #
128
+ undef_method(:defrag)
129
+
130
+ protected
131
+
132
+ def do_call_misc (function, list_pointer)
133
+
134
+ lib.tcrdbmisc(@db, function, 0, list_pointer)
135
+ # opts always to 0 for now
136
+ end
137
+
138
+ # Returns the raw stat string from the Tyrant server.
139
+ #
140
+ def do_stat
141
+
142
+ lib.tcrdbstat(@db)
143
+ end
144
+ end
145
+ end
146
+
@@ -0,0 +1,153 @@
1
+ #--
2
+ # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #
22
+ # Made in Japan.
23
+ #++
24
+
25
+
26
+ module Rufus::Tokyo
27
+
28
+ #
29
+ # The libtokyocabinet.so methods get bound to this module
30
+ #
31
+ module TyrantLib #:nodoc#
32
+
33
+ extend FFI::Library
34
+
35
+ #
36
+ # find Tokyo Tyrant lib
37
+
38
+ paths = Array(ENV['TOKYO_TYRANT_LIB'] || %w{
39
+ /usr/lib/libtokyotyrant.so
40
+ /opt/local/lib/libtokyotyrant.dylib
41
+ /opt/local/lib/libtokyotyrant.so
42
+ /usr/local/lib/libtokyotyrant.dylib
43
+ /usr/local/lib/libtokyotyrant.so
44
+ })
45
+
46
+ begin
47
+
48
+ ffi_lib(*paths)
49
+
50
+ rescue LoadError => le
51
+ raise(
52
+ "didn't find Tokyo Tyrant libs on your system. " +
53
+ "Please install Tokyo Tyrant (http://tokyocabinet.sf.net) " +
54
+ "(see also http://openwferu.rubyforge.org/tokyo.html)"
55
+ )
56
+ end
57
+
58
+
59
+ class << self
60
+ alias :attfunc :attach_function
61
+ end
62
+
63
+ #
64
+ # tcrdb functions
65
+
66
+ attfunc :tcrdbnew, [], :pointer
67
+
68
+ attfunc :tcrdbstat, [ :pointer ], :string
69
+
70
+ attfunc :tcrdbopen, [ :pointer, :string, :int ], :int
71
+ attfunc :abs_close, :tcrdbclose, [ :pointer ], :int
72
+
73
+ attfunc :abs_del, :tcrdbdel, [ :pointer ], :void
74
+
75
+ attfunc :abs_rnum, :tcrdbrnum, [ :pointer ], :uint64
76
+ attfunc :abs_size, :tcrdbsize, [ :pointer ], :uint64
77
+
78
+ attfunc :abs_get, :tcrdbget, [ :pointer, :pointer, :int, :pointer ], :pointer
79
+ attfunc :abs_put, :tcrdbput, [ :pointer, :pointer, :int, :pointer, :int ], :int
80
+
81
+ attfunc :abs_out, :tcrdbout, [ :pointer, :pointer, :int ], :int
82
+
83
+ attfunc :abs_putkeep, :tcrdbputkeep, [ :pointer, :pointer, :int, :pointer, :int ], :int
84
+
85
+ attfunc :abs_iterinit, :tcrdbiterinit, [ :pointer ], :int
86
+ attfunc :abs_iternext, :tcrdbiternext, [ :pointer, :pointer ], :pointer
87
+
88
+ attfunc :abs_vanish, :tcrdbvanish, [ :pointer ], :int
89
+
90
+ attfunc :abs_sync, :tcrdbsync, [ :pointer ], :int
91
+ attfunc :abs_copy, :tcrdbcopy, [ :pointer, :string ], :int
92
+
93
+ attfunc :abs_fwmkeys, :tcrdbfwmkeys, [ :pointer, :pointer, :int, :int ], :pointer
94
+ attfunc :tcrdbmisc, [ :pointer, :string, :int, :pointer ], :pointer
95
+
96
+ attfunc :tcrdbext, [ :pointer, :string, :int, :pointer, :int, :pointer, :int, :pointer ], :pointer
97
+
98
+ attfunc :addint, :tcrdbaddint, [ :pointer, :string, :int, :int ], :int
99
+ attfunc :adddouble, :tcrdbadddouble, [ :pointer, :string, :int, :double ], :double
100
+
101
+ #
102
+ # table functions
103
+
104
+ attfunc :tab_close, :tcrdbclose, [ :pointer ], :int
105
+
106
+ attfunc :tab_genuid, :tcrdbtblgenuid, [ :pointer ], :int64
107
+
108
+ attfunc :tab_get, :tcrdbtblget, [ :pointer, :pointer, :int ], :pointer
109
+
110
+ attfunc :tab_iterinit, :tcrdbiterinit, [ :pointer ], :int
111
+ attfunc :tab_iternext, :tcrdbiternext, [ :pointer, :pointer ], :pointer
112
+
113
+ attfunc :tab_put, :tcrdbtblput, [ :pointer, :pointer, :int, :pointer ], :int
114
+
115
+ attfunc :tab_out, :tcrdbtblout, [ :pointer, :string, :int ], :int
116
+
117
+ attfunc :tab_ecode, :tcrdbecode, [ :pointer ], :int
118
+ attfunc :tab_errmsg, :tcrdberrmsg, [ :int ], :string
119
+
120
+ attfunc :tab_del, :tcrdbdel, [ :pointer ], :void
121
+
122
+ attfunc :tab_rnum, :tcrdbrnum, [ :pointer ], :uint64
123
+
124
+ attfunc :tab_vanish, :tcrdbvanish, [ :pointer ], :int
125
+
126
+ attfunc :tab_setindex, :tcrdbtblsetindex, [ :pointer, :string, :int ], :int
127
+
128
+ attfunc :tab_fwmkeys, :tcrdbfwmkeys, [ :pointer, :pointer, :int, :int ], :pointer
129
+
130
+ #
131
+ # qry functions
132
+
133
+ attfunc :qry_new, :tcrdbqrynew, [ :pointer ], :pointer
134
+ attfunc :qry_del, :tcrdbqrydel, [ :pointer ], :void
135
+
136
+ attfunc :qry_addcond, :tcrdbqryaddcond, [ :pointer, :string, :int, :string ], :void
137
+ attfunc :qry_setorder, :tcrdbqrysetorder, [ :pointer, :string, :int ], :void
138
+
139
+ begin
140
+ attfunc :qry_setmax, :tcrdbqrysetmax, [ :pointer, :int ], :void
141
+ rescue FFI::NotFoundError => nfe
142
+ attfunc :qry_setlimit, :tcrdbqrysetlimit, [ :pointer, :int, :int ], :void
143
+ end
144
+
145
+ attfunc :qry_search, :tcrdbqrysearch, [ :pointer ], :pointer
146
+ attfunc :qry_searchout, :tcrdbqrysearchout, [ :pointer ], :int
147
+
148
+ begin # since TC 1.4.21
149
+ attfunc :qry_count, :tcrdbqrysearchcount, [ :pointer ], :int
150
+ rescue FFI::NotFoundError => nfe
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,162 @@
1
+ #--
2
+ # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #
22
+ # Made in Japan.
23
+ #++
24
+
25
+
26
+ require 'rufus/tokyo/ttcommons'
27
+
28
+
29
+ module Rufus::Tokyo
30
+
31
+ #
32
+ # A Tokyo Cabinet table, but remote...
33
+ #
34
+ # require 'rufus/tokyo/tyrant'
35
+ # t = Rufus::Tokyo::Tyrant.new('127.0.0.1', 44001)
36
+ # t['toto'] = { 'name' => 'toto the first', 'age' => '34' }
37
+ # t['toto']
38
+ # # => { 'name' => 'toto the first', 'age' => '34' }
39
+ #
40
+ # Most of the methods of this TyrantTable class are defined in the parent
41
+ # class Rufus::Tokyo::Table.
42
+ #
43
+ class TyrantTable < Table
44
+
45
+ include TyrantCommons
46
+
47
+
48
+ attr_reader :host, :port
49
+
50
+ # Connects to the Tyrant table listening at the given host and port.
51
+ #
52
+ # You start such a Tyrant with :
53
+ #
54
+ # ttserver -port 44502 data.tct
55
+ #
56
+ # and then :
57
+ #
58
+ # require 'rufus/tokyo/tyrant'
59
+ # t = Rufus::Tokyo::TyrantTable.new('127.0.0.1', 44502)
60
+ # t['client0'] = { 'name' => 'Heike no Kyomori', 'country' => 'jp' }
61
+ # t.close
62
+ #
63
+ #
64
+ # You can start a Tokyo Tyrant and make it listen to a unix socket (not TCP)
65
+ # with :
66
+ #
67
+ # ttserver -host /tmp/table_socket -port 0 data.tct
68
+ #
69
+ # then :
70
+ #
71
+ # require 'rufus/tokyo/tyrant'
72
+ # t = Rufus::Tokyo::TyrantTable.new('/tmp/table_socket')
73
+ # t['client0'] = { 'name' => 'Theodore Roosevelt', 'country' => 'usa' }
74
+ # t.close
75
+ #
76
+ def initialize (host, port=0)
77
+
78
+ @db = lib.tcrdbnew
79
+
80
+ @host = host
81
+ @port = port
82
+
83
+ (lib.tcrdbopen(@db, host, port) == 1) ||
84
+ raise("couldn't connect to tyrant at #{host}:#{port}")
85
+
86
+ if self.stat['type'] != 'table'
87
+
88
+ self.close
89
+
90
+ raise ArgumentError.new(
91
+ "tyrant at #{host}:#{port} is a not table, " +
92
+ "use Rufus::Tokyo::Tyrant instead to access it.")
93
+ end
94
+ end
95
+
96
+ #
97
+ # using the cabinet lib
98
+ #
99
+ def lib
100
+ TyrantLib
101
+ end
102
+
103
+ def transaction #:nodoc#
104
+ raise_transaction_nme('transaction')
105
+ end
106
+ def abort #:nodoc#
107
+ raise_transaction_nme('abort')
108
+ end
109
+ def tranbegin #:nodoc#
110
+ raise_transaction_nme('tranbegin')
111
+ end
112
+ def trancommit #:nodoc#
113
+ raise_transaction_nme('trancommit')
114
+ end
115
+ def tranabort #:nodoc#
116
+ raise_transaction_nme('tranabort')
117
+ end
118
+
119
+ #--
120
+ # Doesn't work properly, tcrdbmisc doesn't return something leveragable :(
121
+ #
122
+ #def lget (keys)
123
+ # call_misc('getlist', Rufus::Tokyo::List.new(keys))
124
+ #end
125
+ #++
126
+
127
+ protected
128
+
129
+ def raise_transaction_nme (method_name)
130
+
131
+ raise NoMethodError.new(
132
+ "Tyrant tables don't support transactions", method_name)
133
+ end
134
+
135
+ # Returns the raw stat string from the Tyrant server.
136
+ #
137
+ def do_stat
138
+
139
+ lib.tcrdbstat(@db) # note : this is using tcrdbstat
140
+ end
141
+
142
+ #--
143
+ # (see #lget's comment)
144
+ #
145
+ # wrapping tcadbmisc or tcrdbmisc
146
+ # (and taking care of freeing the list_pointer)
147
+ #
148
+ #def call_misc (function, list_pointer)
149
+ # list_pointer = list_pointer.pointer \
150
+ # if list_pointer.is_a?(Rufus::Tokyo::List)
151
+ # begin
152
+ # l = lib.tcrdbmisc(@db, function, 0, list_pointer)
153
+ # # opts always to 0 for now
154
+ # raise "function '#{function}' failed" unless l
155
+ # Rufus::Tokyo::List.new(l).release
156
+ # ensure
157
+ # Rufus::Tokyo::List.free(list_pointer)
158
+ # end
159
+ #end
160
+ #++
161
+ end
162
+ end