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,219 @@
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 'tokyocabinet' # gem install careo-tokyocabinet
27
+
28
+ require 'rufus/edo/cabcore'
29
+ require 'rufus/tokyo/config'
30
+
31
+
32
+ module Rufus::Edo
33
+
34
+ #
35
+ # A cabinet wired 'natively' to the libtokyocabinet.dynlib (approximatevely
36
+ # 2 times faster than the wiring over FFI).
37
+ #
38
+ # This class has the exact same methods as Rufus::Tokyo::Cabinet. It's faster
39
+ # though. The advantage of Rufus::Tokyo::Cabinet lies in that in runs on
40
+ # Ruby 1.8, 1.9 and JRuby.
41
+ #
42
+ # You need to have Hirabayashi-san's binding installed to use this
43
+ # Rufus::Edo::Cabinet :
44
+ #
45
+ # http://github.com/jmettraux/rufus-tokyo/tree/master/lib/rufus/edo
46
+ #
47
+ # You can then write code like :
48
+ #
49
+ # require 'rubygems'
50
+ # require 'rufus/edo' # sudo gem install rufus-tokyo
51
+ #
52
+ # db = Rufus::Edo::Cabinet.new('data.tch')
53
+ #
54
+ # db['hello'] = 'world'
55
+ #
56
+ # puts db['hello']
57
+ # # -> 'world'
58
+ #
59
+ # db.close
60
+ #
61
+ # This cabinet wraps hashes, b+ trees and fixed length databases. For tables,
62
+ # see Rufus::Edo::Table
63
+ #
64
+ class Cabinet
65
+
66
+ include Rufus::Edo::CabinetCore
67
+ include Rufus::Tokyo::CabinetConfig
68
+
69
+ # Initializes and open a cabinet (hash, b+ tree or fixed-size)
70
+ #
71
+ # db = Rufus::Edo::Cabinet.new('data.tch')
72
+ # # or
73
+ # db = Rufus::Edo::Cabinet.new('data', :type => :hash)
74
+ #
75
+ # 3 types are recognized :hash (.tch), :btree (.tcb) and :fixed (.tcf). For
76
+ # tables, see Rufus::Edo::Table
77
+ #
78
+ # == parameters
79
+ #
80
+ # There are two ways to pass parameters at the opening of a db :
81
+ #
82
+ # db = Rufus::Edo::Cabinet.new('data.tch#opts=ld#mode=w') # or
83
+ # db = Rufus::Edo::Cabinet.new('data.tch', :opts => 'ld', :mode => 'w')
84
+ #
85
+ # most verbose :
86
+ #
87
+ # db = Rufus::Edo::Cabinet.new(
88
+ # 'data', :type => :hash, :opts => 'ld', :mode => 'w')
89
+ #
90
+ # === mode
91
+ #
92
+ # * :mode a set of chars ('r'ead, 'w'rite, 'c'reate, 't'runcate,
93
+ # 'e' non locking, 'f' non blocking lock), default is 'wc'
94
+ #
95
+ # === other parameters
96
+ #
97
+ # 'On-memory hash database supports "bnum", "capnum", and "capsiz".
98
+ # On-memory tree database supports "capnum" and "capsiz".
99
+ # Hash database supports "mode", "bnum", "apow", "fpow", "opts",
100
+ # "rcnum", and "xmsiz".
101
+ # B+ tree database supports "mode", "lmemb", "nmemb", "bnum", "apow",
102
+ # "fpow", "opts", "lcnum", "ncnum", and "xmsiz".
103
+ # Fixed-length database supports "mode", "width", and "limsiz"'
104
+ #
105
+ # * :opts a set of chars ('l'arge, 'd'eflate, 'b'zip2, 't'cbs)
106
+ # (usually empty or something like 'ld' or 'lb')
107
+ #
108
+ # * :bnum number of elements of the bucket array
109
+ # * :apow size of record alignment by power of 2 (defaults to 4)
110
+ # * :fpow maximum number of elements of the free block pool by
111
+ # power of 2 (defaults to 10)
112
+ # * :mutex when set to true, makes sure only 1 thread at a time
113
+ # accesses the table (well, Ruby, global thread lock, ...)
114
+ #
115
+ # * :rcnum specifies the maximum number of records to be cached.
116
+ # If it is not more than 0, the record cache is disabled.
117
+ # It is disabled by default.
118
+ # * :lcnum specifies the maximum number of leaf nodes to be cached.
119
+ # If it is not more than 0, the default value is specified.
120
+ # The default value is 2048.
121
+ # * :ncnum specifies the maximum number of non-leaf nodes to be
122
+ # cached. If it is not more than 0, the default value is
123
+ # specified. The default value is 512.
124
+ #
125
+ # * :lmemb number of members in each leaf page (defaults to 128) (btree)
126
+ # * :nmemb number of members in each non-leaf page (default 256) (btree)
127
+ #
128
+ # * :width width of the value of each record (default 255) (fixed)
129
+ # * :limsiz limit size of the database file (default 268_435_456) (fixed)
130
+ #
131
+ # * :xmsiz specifies the size of the extra mapped memory. If it is
132
+ # not more than 0, the extra mapped memory is disabled.
133
+ # The default size is 67108864.
134
+ #
135
+ # * :capnum specifies the capacity number of records.
136
+ # * :capsiz specifies the capacity size of using memory.
137
+ #
138
+ # * :dfunit unit step number. If it is not more than 0,
139
+ # the auto defragmentation is disabled. (Since TC 1.4.21)
140
+ #
141
+ #
142
+ # = NOTE :
143
+ #
144
+ # On reopening a file, Cabinet will tend to stick to the parameters as
145
+ # set when the file was opened. To change that, have a look at the
146
+ # man pages of the various command line tools coming with Tokyo Cabinet.
147
+ #
148
+ def initialize (path, params={})
149
+
150
+ conf = determine_conf(path, params)
151
+
152
+ klass = {
153
+ :abstract => defined?(TokyoCabinet::ADB) ?
154
+ TokyoCabinet::ADB : TokyoCabinet::HDB,
155
+ :hash => TokyoCabinet::HDB,
156
+ :btree => TokyoCabinet::BDB,
157
+ :fixed => TokyoCabinet::FDB
158
+ }[conf[:type]]
159
+
160
+ @db = klass.new
161
+
162
+ #
163
+ # tune
164
+
165
+ tuning_parameters = case conf[:type]
166
+ when :abstract then nil
167
+ when :hash then [ :bnum, :apow, :fpow, :opts ]
168
+ when :btree then [ :lmemb, :nmemb, :bnum, :apow, :fpow, :opts ]
169
+ when :fixed then [ :bnum, :width, :limsiz ]
170
+ end
171
+
172
+ @db.tune(*tuning_parameters.collect { |o| conf[o] }) \
173
+ if tuning_parameters
174
+
175
+ #
176
+ # set cache
177
+
178
+ cache_values = case conf[:type]
179
+ when :abstract then nil
180
+ when :hash then [ :rcnum ]
181
+ when :btree then [ :lcnum, :ncnum ]
182
+ when :fixed then nil
183
+ end
184
+
185
+ @db.setcache(*cache_values.collect { |o| conf[o] }) \
186
+ if cache_values
187
+
188
+ #
189
+ # set xmsiz
190
+
191
+ @db.setxmsiz(conf[:xmsiz]) \
192
+ unless [ :abstract, :fixed ].include?(conf[:type])
193
+
194
+ #
195
+ # set dfunit (TC > 1.4.21)
196
+
197
+ @db.setdfunit(conf[:dfunit]) \
198
+ if @db.respond_to?(:setdfunit)
199
+
200
+ #
201
+ # open
202
+
203
+ @path = conf[:path]
204
+
205
+ if @db.class.name == 'TokyoCabinet::ADB'
206
+ @db.open(@path) || raise_error
207
+ else
208
+ @db.open(@path, conf[:mode]) || raise_error
209
+ end
210
+
211
+ #
212
+ # default
213
+
214
+ self.default = params[:default]
215
+ @default_proc ||= params[:default_proc]
216
+ end
217
+ end
218
+ end
219
+
@@ -0,0 +1,159 @@
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 'tokyocabinet'
27
+
28
+ require 'rufus/edo/error'
29
+ require 'rufus/edo/tabcore'
30
+ require 'rufus/tokyo/config'
31
+
32
+
33
+ module Rufus::Edo
34
+
35
+ #
36
+ # Rufus::Edo::Table wraps Hirabayashi-san's Ruby bindings for Tokyo Cabinet
37
+ # tables.
38
+ #
39
+ # This class has the exact same methods as Rufus::Tokyo::Table. It's faster
40
+ # though. The advantage of Rufus::Tokyo::Table lies in that in runs on
41
+ # Ruby 1.8, 1.9 and JRuby.
42
+ #
43
+ # You need to have Hirabayashi-san's binding installed to use this
44
+ # Rufus::Edo::Table :
45
+ #
46
+ # http://github.com/jmettraux/rufus-tokyo/tree/master/lib/rufus/edo
47
+ #
48
+ # Example usage :
49
+ #
50
+ # require 'rufus/edo'
51
+ # db = Rufus::Edo::Table.new('data.tct')
52
+ # db['customer1'] = { 'name' => 'Taira no Kyomori', 'age' => '55' }
53
+ # # ...
54
+ # db.close
55
+ #
56
+ class Table
57
+
58
+ include Rufus::Tokyo::CabinetConfig
59
+ include Rufus::Edo::TableCore
60
+
61
+ # Initializes and open a table.
62
+ #
63
+ # db = Rufus::Edo::Table.new('data.tct')
64
+ # # or
65
+ # db = Rufus::Edo::Table.new('data', :type => :table)
66
+ # # or
67
+ # db = Rufus::Edo::Table.new('data')
68
+ #
69
+ # == parameters
70
+ #
71
+ # There are two ways to pass parameters at the opening of a db :
72
+ #
73
+ # db = Rufus::Edo::Table.new('data.tct#opts=ld#mode=w') # or
74
+ # db = Rufus::Edo::Table.new('data.tct', :opts => 'ld', :mode => 'w')
75
+ #
76
+ # === mode
77
+ #
78
+ # * :mode a set of chars ('r'ead, 'w'rite, 'c'reate, 't'runcate,
79
+ # 'e' non locking, 'f' non blocking lock), default is 'wc'
80
+ #
81
+ # === other parameters
82
+ #
83
+ # * :opts a set of chars ('l'arge, 'd'eflate, 'b'zip2, 't'cbs)
84
+ # (usually empty or something like 'ld' or 'lb')
85
+ #
86
+ # * :bnum number of elements of the bucket array
87
+ # * :apow size of record alignment by power of 2 (defaults to 4)
88
+ # * :fpow maximum number of elements of the free block pool by
89
+ # power of 2 (defaults to 10)
90
+ #
91
+ # * :rcnum specifies the maximum number of records to be cached.
92
+ # If it is not more than 0, the record cache is disabled.
93
+ # It is disabled by default.
94
+ # * :lcnum specifies the maximum number of leaf nodes to be cached.
95
+ # If it is not more than 0, the default value is specified.
96
+ # The default value is 2048.
97
+ # * :ncnum specifies the maximum number of non-leaf nodes to be
98
+ # cached. If it is not more than 0, the default value is
99
+ # specified. The default value is 512.
100
+ #
101
+ # * :dfunit unit step number. If it is not more than 0,
102
+ # the auto defragmentation is disabled. (Since TC 1.4.21)
103
+ #
104
+ # = NOTE :
105
+ #
106
+ # On reopening a file, Cabinet will tend to stick to the parameters as
107
+ # set when the file was opened. To change that, have a look at the
108
+ # man pages of the various command line tools coming with Tokyo Cabinet.
109
+ #
110
+ def initialize (path, params={})
111
+
112
+ conf = determine_conf(path, params, :table)
113
+
114
+ @db = TokyoCabinet::TDB.new
115
+
116
+ #
117
+ # tune
118
+
119
+ @db.tune(conf[:bnum], conf[:apow], conf[:fpow], conf[:opts])
120
+
121
+ #
122
+ # set cache
123
+
124
+ @db.setcache(conf[:rcnum], conf[:lcnum], conf[:ncnum])
125
+
126
+ #
127
+ # set xmsiz
128
+
129
+ @db.setxmsiz(conf[:xmsiz])
130
+
131
+ #
132
+ # set dfunit (TC > 1.4.21)
133
+
134
+ @db.setdfunit(conf[:dfunit]) if @db.respond_to?(:setdfunit)
135
+
136
+ #
137
+ # open
138
+
139
+ @path = conf[:path]
140
+
141
+ @db.open(@path, conf[:mode]) || raise_error
142
+ end
143
+
144
+ # Returns the path to this table.
145
+ #
146
+ def path
147
+
148
+ @path
149
+ end
150
+
151
+ protected
152
+
153
+ def table_query_class #:nodoc#
154
+
155
+ TokyoCabinet::TDBQRY
156
+ end
157
+ end
158
+ end
159
+
@@ -0,0 +1,36 @@
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 Edo
28
+
29
+ #
30
+ # A common error class
31
+ #
32
+ class EdoError < RuntimeError; end
33
+
34
+ end
35
+ end
36
+
@@ -0,0 +1,4 @@
1
+
2
+ require 'rufus/edo/ntyrant/abstract'
3
+ require 'rufus/edo/ntyrant/table'
4
+
@@ -0,0 +1,137 @@
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 'tokyotyrant' # gem install careo-tokyotyrant
27
+
28
+ require 'rufus/edo/error'
29
+ require 'rufus/edo/cabcore'
30
+ require 'rufus/tokyo/ttcommons'
31
+
32
+
33
+ module Rufus::Edo
34
+
35
+ #
36
+ # Connecting to a 'classic' Tokyo Tyrant server remotely
37
+ #
38
+ # require 'rufus/edo/ntyrant'
39
+ # t = Rufus::Edo::NetTyrant.new('127.0.0.1', 44001)
40
+ # t['toto'] = 'blah blah'
41
+ # t['toto'] # => 'blah blah'
42
+ #
43
+ class NetTyrant
44
+
45
+ include Rufus::Edo::CabinetCore
46
+ include Rufus::Tokyo::TyrantCommons
47
+
48
+ attr_reader :host, :port
49
+
50
+ # Connects to a given Tokyo Tyrant server.
51
+ #
52
+ # Note that if the port is not specified, the host parameter is expected
53
+ # to hold the path to a unix socket (not a TCP socket).
54
+ #
55
+ # (You can start a unix socket listening Tyrant with :
56
+ #
57
+ # ttserver -host /tmp/tyrant_socket -port 0 data.tch
58
+ #
59
+ # and then connect to it with rufus-tokyo via :
60
+ #
61
+ # require 'rufus/edo/ntyrant'
62
+ # db = Rufus::Edo::NetTyrant.new('/tmp/tyrant_socket')
63
+ # db['a'] = 'alpha'
64
+ # db.close
65
+ # )
66
+ #
67
+ # To connect to a classic TCP bound Tyrant (port 44001) :
68
+ #
69
+ # t = Rufus::Edo::NetTyrant.new('127.0.0.1', 44001)
70
+ #
71
+ def initialize (host, port=0)
72
+
73
+ @host = host
74
+ @port = port
75
+
76
+ @db = TokyoTyrant::RDB.new
77
+ @db.open(host, port) || raise_error
78
+
79
+ if self.stat['type'] == 'table'
80
+
81
+ @db.close
82
+
83
+ raise ArgumentError.new(
84
+ "tyrant at #{host}:#{port} is a table, " +
85
+ "use Rufus::Edo::NetTyrantTable instead to access it.")
86
+ end
87
+ end
88
+
89
+ # Returns the 'weight' of the db (in bytes)
90
+ #
91
+ def weight
92
+
93
+ self.stat['size']
94
+ end
95
+
96
+ # isn't that a bit dangerous ? it creates a file on the server...
97
+ #
98
+ # DISABLED.
99
+ #
100
+ def copy (target_path)
101
+
102
+ #@db.copy(target_path)
103
+ raise 'not allowed to create files on the server'
104
+ end
105
+
106
+ # Copies the current cabinet to a new file.
107
+ #
108
+ # Does it by copying each entry afresh to the target file. Spares some
109
+ # space, hence the 'compact' label...
110
+ #
111
+ def compact_copy (target_path)
112
+
113
+ raise NotImplementedError.new('not creating files locally')
114
+ end
115
+
116
+ # Calls a lua embedded function
117
+ # (http://tokyocabinet.sourceforge.net/tyrantdoc/#luaext)
118
+ #
119
+ # Options are :global_locking and :record_locking
120
+ #
121
+ # Returns the return value of the called function.
122
+ #
123
+ # Nil is returned in case of failure.
124
+ #
125
+ def ext (func_name, key, value, opts={})
126
+
127
+ @db.ext(func_name.to_s, key.to_s, value.to_s, compute_ext_opts(opts))
128
+ end
129
+
130
+ protected
131
+
132
+ def do_stat #:nodoc#
133
+ @db.stat
134
+ end
135
+ end
136
+ end
137
+