merb 0.5.3 → 0.9.2

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 (294) hide show
  1. data/LICENSE +0 -20
  2. data/README +0 -277
  3. data/Rakefile +80 -199
  4. data/TODO +0 -3
  5. metadata +19 -438
  6. data/SVN_REVISION +0 -1
  7. data/app_generators/merb/USAGE +0 -5
  8. data/app_generators/merb/merb_generator.rb +0 -108
  9. data/app_generators/merb/templates/Rakefile +0 -124
  10. data/app_generators/merb/templates/app/controllers/application.rb +0 -3
  11. data/app_generators/merb/templates/app/controllers/exceptions.rb +0 -13
  12. data/app_generators/merb/templates/app/helpers/global_helper.rb +0 -5
  13. data/app_generators/merb/templates/app/mailers/views/layout/application.html.erb +0 -1
  14. data/app_generators/merb/templates/app/mailers/views/layout/application.text.erb +0 -1
  15. data/app_generators/merb/templates/app/parts/views/layout/application.html.erb +0 -1
  16. data/app_generators/merb/templates/app/views/exceptions/internal_server_error.html.erb +0 -216
  17. data/app_generators/merb/templates/app/views/exceptions/not_acceptable.html.erb +0 -38
  18. data/app_generators/merb/templates/app/views/exceptions/not_found.html.erb +0 -40
  19. data/app_generators/merb/templates/app/views/layout/application.html.erb +0 -11
  20. data/app_generators/merb/templates/config/boot.rb +0 -11
  21. data/app_generators/merb/templates/config/dependencies.rb +0 -41
  22. data/app_generators/merb/templates/config/environments/development.rb +0 -1
  23. data/app_generators/merb/templates/config/environments/production.rb +0 -1
  24. data/app_generators/merb/templates/config/environments/test.rb +0 -1
  25. data/app_generators/merb/templates/config/merb.yml +0 -82
  26. data/app_generators/merb/templates/config/merb_init.rb +0 -17
  27. data/app_generators/merb/templates/config/plugins.yml +0 -1
  28. data/app_generators/merb/templates/config/router.rb +0 -35
  29. data/app_generators/merb/templates/config/upload.conf +0 -0
  30. data/app_generators/merb/templates/public/images/merb.jpg +0 -0
  31. data/app_generators/merb/templates/public/merb.fcgi +0 -6
  32. data/app_generators/merb/templates/public/stylesheets/master.css +0 -119
  33. data/app_generators/merb/templates/script/destroy +0 -32
  34. data/app_generators/merb/templates/script/generate +0 -32
  35. data/app_generators/merb/templates/script/stop_merb +0 -13
  36. data/app_generators/merb/templates/script/win_script.cmd +0 -1
  37. data/app_generators/merb/templates/spec/spec.opts +0 -6
  38. data/app_generators/merb/templates/spec/spec_helper.rb +0 -15
  39. data/app_generators/merb/templates/test/test_helper.rb +0 -14
  40. data/app_generators/merb_plugin/USAGE +0 -5
  41. data/app_generators/merb_plugin/merb_plugin_generator.rb +0 -68
  42. data/app_generators/merb_plugin/templates/LICENSE +0 -20
  43. data/app_generators/merb_plugin/templates/README +0 -4
  44. data/app_generators/merb_plugin/templates/Rakefile +0 -35
  45. data/app_generators/merb_plugin/templates/TODO +0 -5
  46. data/app_generators/merb_plugin/templates/merbtasks.rb +0 -6
  47. data/app_generators/merb_plugin/templates/sampleplugin.rb +0 -10
  48. data/app_generators/merb_plugin/templates/sampleplugin_spec.rb +0 -7
  49. data/app_generators/merb_plugin/templates/spec_helper.rb +0 -2
  50. data/bin/merb +0 -4
  51. data/lib/autotest/discover.rb +0 -3
  52. data/lib/autotest/merb_rspec.rb +0 -80
  53. data/lib/merb.rb +0 -188
  54. data/lib/merb/abstract_controller.rb +0 -399
  55. data/lib/merb/assets.rb +0 -160
  56. data/lib/merb/assets.rb.orig +0 -119
  57. data/lib/merb/boot_loader.rb +0 -286
  58. data/lib/merb/boot_loader.rb.orig +0 -235
  59. data/lib/merb/caching.rb +0 -5
  60. data/lib/merb/caching/action_cache.rb +0 -92
  61. data/lib/merb/caching/fragment_cache.rb +0 -39
  62. data/lib/merb/caching/store/file_cache.rb +0 -90
  63. data/lib/merb/caching/store/memory_cache.rb +0 -85
  64. data/lib/merb/config.rb +0 -290
  65. data/lib/merb/constants.rb +0 -50
  66. data/lib/merb/controller.rb +0 -220
  67. data/lib/merb/cookies.rb +0 -95
  68. data/lib/merb/core_ext.rb +0 -15
  69. data/lib/merb/core_ext/array.rb +0 -0
  70. data/lib/merb/core_ext/class.rb +0 -180
  71. data/lib/merb/core_ext/enumerable.rb +0 -49
  72. data/lib/merb/core_ext/get_args.rb +0 -76
  73. data/lib/merb/core_ext/hash.rb +0 -306
  74. data/lib/merb/core_ext/inflections.rb +0 -112
  75. data/lib/merb/core_ext/inflector.rb +0 -275
  76. data/lib/merb/core_ext/kernel.rb +0 -242
  77. data/lib/merb/core_ext/mash.rb +0 -88
  78. data/lib/merb/core_ext/module.rb +0 -67
  79. data/lib/merb/core_ext/numeric.rb +0 -72
  80. data/lib/merb/core_ext/object.rb +0 -183
  81. data/lib/merb/core_ext/string.rb +0 -53
  82. data/lib/merb/core_ext/symbol.rb +0 -6
  83. data/lib/merb/dispatcher.rb +0 -109
  84. data/lib/merb/drb_server.rb +0 -19
  85. data/lib/merb/erubis_ext.rb +0 -10
  86. data/lib/merb/exceptions.rb +0 -192
  87. data/lib/merb/generators/merb_app/merb_app.rb +0 -22
  88. data/lib/merb/generators/merb_generator_helpers.rb +0 -318
  89. data/lib/merb/generators/merb_plugin.rb +0 -22
  90. data/lib/merb/logger.rb +0 -78
  91. data/lib/merb/mail_controller.rb +0 -268
  92. data/lib/merb/mailer.rb +0 -87
  93. data/lib/merb/mixins/basic_authentication.rb +0 -35
  94. data/lib/merb/mixins/controller.rb +0 -160
  95. data/lib/merb/mixins/erubis_capture.rb +0 -68
  96. data/lib/merb/mixins/general_controller.rb +0 -253
  97. data/lib/merb/mixins/inline_partial.rb +0 -32
  98. data/lib/merb/mixins/render.rb +0 -465
  99. data/lib/merb/mixins/responder.rb +0 -449
  100. data/lib/merb/mixins/view_context.rb +0 -558
  101. data/lib/merb/mixins/web_controller.rb +0 -36
  102. data/lib/merb/mongrel_handler.rb +0 -168
  103. data/lib/merb/part_controller.rb +0 -29
  104. data/lib/merb/plugins.rb +0 -16
  105. data/lib/merb/rack_adapter.rb +0 -37
  106. data/lib/merb/request.rb +0 -465
  107. data/lib/merb/router.rb +0 -646
  108. data/lib/merb/server.rb +0 -169
  109. data/lib/merb/session.rb +0 -23
  110. data/lib/merb/session/cookie_store.rb +0 -118
  111. data/lib/merb/session/mem_cache_session.rb +0 -131
  112. data/lib/merb/session/memory_session.rb +0 -176
  113. data/lib/merb/template.rb +0 -37
  114. data/lib/merb/template/erubis.rb +0 -68
  115. data/lib/merb/template/haml.rb +0 -87
  116. data/lib/merb/template/markaby.rb +0 -59
  117. data/lib/merb/template/xml_builder.rb +0 -50
  118. data/lib/merb/test/fake_request.rb +0 -74
  119. data/lib/merb/test/helper.rb +0 -260
  120. data/lib/merb/test/hpricot.rb +0 -136
  121. data/lib/merb/test/multipart.rb +0 -66
  122. data/lib/merb/test/rspec.rb +0 -18
  123. data/lib/merb/test/rspec_matchers/controller_matchers.rb +0 -117
  124. data/lib/merb/test/rspec_matchers/markup_matchers.rb +0 -98
  125. data/lib/merb/upload_handler.rb +0 -80
  126. data/lib/merb/upload_progress.rb +0 -48
  127. data/lib/merb/version.rb +0 -49
  128. data/lib/merb/view_context.rb +0 -79
  129. data/lib/tasks.rb +0 -7
  130. data/lib/tasks/merb.rake +0 -54
  131. data/merb_default_generators/model/USAGE +0 -0
  132. data/merb_default_generators/model/model_generator.rb +0 -16
  133. data/merb_default_generators/model/templates/new_model_template.erb +0 -5
  134. data/merb_default_generators/resource_controller/USAGE +0 -0
  135. data/merb_default_generators/resource_controller/resource_controller_generator.rb +0 -26
  136. data/merb_default_generators/resource_controller/templates/controller.rb +0 -30
  137. data/merb_default_generators/resource_controller/templates/edit.html.erb +0 -1
  138. data/merb_default_generators/resource_controller/templates/helper.rb +0 -5
  139. data/merb_default_generators/resource_controller/templates/index.html.erb +0 -1
  140. data/merb_default_generators/resource_controller/templates/new.html.erb +0 -1
  141. data/merb_default_generators/resource_controller/templates/show.html.erb +0 -1
  142. data/merb_generators/controller/USAGE +0 -5
  143. data/merb_generators/controller/controller_generator.rb +0 -16
  144. data/merb_generators/controller/templates/controller.rb +0 -8
  145. data/merb_generators/controller/templates/helper.rb +0 -5
  146. data/merb_generators/controller/templates/index.html.erb +0 -3
  147. data/merb_generators/part_controller/USAGE +0 -5
  148. data/merb_generators/part_controller/part_controller_generator.rb +0 -27
  149. data/merb_generators/part_controller/templates/controller.rb +0 -8
  150. data/merb_generators/part_controller/templates/helper.rb +0 -5
  151. data/merb_generators/part_controller/templates/index.html.erb +0 -3
  152. data/merb_generators/resource/USAGE +0 -0
  153. data/merb_generators/resource/resource_generator.rb +0 -67
  154. data/rspec_generators/merb_controller_test/merb_controller_test_generator.rb +0 -67
  155. data/rspec_generators/merb_controller_test/templates/controller_spec.rb +0 -8
  156. data/rspec_generators/merb_controller_test/templates/edit_spec.rb +0 -12
  157. data/rspec_generators/merb_controller_test/templates/helper_spec.rb +0 -5
  158. data/rspec_generators/merb_controller_test/templates/index_spec.rb +0 -12
  159. data/rspec_generators/merb_controller_test/templates/new_spec.rb +0 -12
  160. data/rspec_generators/merb_controller_test/templates/show_spec.rb +0 -5
  161. data/rspec_generators/merb_model_test/merb_model_test_generator.rb +0 -26
  162. data/rspec_generators/merb_model_test/templates/model_spec_template.erb +0 -7
  163. data/script/destroy +0 -14
  164. data/script/generate +0 -14
  165. data/spec/fixtures/config/environments/environment_config_test.yml +0 -1
  166. data/spec/fixtures/config/merb.yml +0 -18
  167. data/spec/fixtures/controllers/dispatch_spec_controllers.rb +0 -235
  168. data/spec/fixtures/controllers/render_spec_controllers.rb +0 -184
  169. data/spec/fixtures/foo.rb +0 -3
  170. data/spec/fixtures/mailers/views/layout/application.html.erb +0 -3
  171. data/spec/fixtures/mailers/views/layout/application.text.erb +0 -3
  172. data/spec/fixtures/mailers/views/test_mail_controller/eighth.html.erb +0 -1
  173. data/spec/fixtures/mailers/views/test_mail_controller/eighth.text.erb +0 -1
  174. data/spec/fixtures/mailers/views/test_mail_controller/first.html.erb +0 -1
  175. data/spec/fixtures/mailers/views/test_mail_controller/first.text.erb +0 -1
  176. data/spec/fixtures/mailers/views/test_mail_controller/ninth.html.erb +0 -1
  177. data/spec/fixtures/mailers/views/test_mail_controller/ninth.text.erb +0 -1
  178. data/spec/fixtures/mailers/views/test_mail_controller/second.text.erb +0 -1
  179. data/spec/fixtures/mailers/views/test_mail_controller/third.html.erb +0 -1
  180. data/spec/fixtures/models/router_spec_models.rb +0 -30
  181. data/spec/fixtures/parts/views/layout/todo_part.html.erb +0 -3
  182. data/spec/fixtures/parts/views/layout/todo_part.xml.erb +0 -3
  183. data/spec/fixtures/parts/views/todo_part/formatted_output.html.erb +0 -1
  184. data/spec/fixtures/parts/views/todo_part/formatted_output.js.erb +0 -1
  185. data/spec/fixtures/parts/views/todo_part/formatted_output.xml.erb +0 -1
  186. data/spec/fixtures/parts/views/todo_part/list.html.erb +0 -3
  187. data/spec/fixtures/sample.txt +0 -1
  188. data/spec/fixtures/views/erubis.html.erb +0 -1
  189. data/spec/fixtures/views/examples/_erubis.html.erb +0 -1
  190. data/spec/fixtures/views/examples/_haml.html.haml +0 -1
  191. data/spec/fixtures/views/examples/_markaby.html.mab +0 -1
  192. data/spec/fixtures/views/examples/_throw_content.html.erb +0 -6
  193. data/spec/fixtures/views/examples/hello.xml.builder +0 -1
  194. data/spec/fixtures/views/examples/js.js.erb +0 -1
  195. data/spec/fixtures/views/examples/template_catch_content.html.erb +0 -15
  196. data/spec/fixtures/views/examples/template_catch_content_from_partial.html.erb +0 -6
  197. data/spec/fixtures/views/examples/template_throw_content.html.erb +0 -10
  198. data/spec/fixtures/views/examples/template_throw_content_without_block.html.erb +0 -3
  199. data/spec/fixtures/views/exceptions/admin_access_required.html.erb +0 -1
  200. data/spec/fixtures/views/extension_template_controller/_nested_js.js.erb +0 -1
  201. data/spec/fixtures/views/extension_template_controller/_nested_xml.xml.erb +0 -1
  202. data/spec/fixtures/views/extension_template_controller/_render_partial_multiple_times.html.erb +0 -1
  203. data/spec/fixtures/views/extension_template_controller/erubis_templates.html.erb +0 -1
  204. data/spec/fixtures/views/extension_template_controller/erubis_templates.js.erb +0 -1
  205. data/spec/fixtures/views/extension_template_controller/erubis_templates.rhtml +0 -1
  206. data/spec/fixtures/views/extension_template_controller/erubis_templates.xml.erb +0 -1
  207. data/spec/fixtures/views/extension_template_controller/haml_index.html.haml +0 -0
  208. data/spec/fixtures/views/extension_template_controller/haml_templates.html.haml +0 -1
  209. data/spec/fixtures/views/extension_template_controller/haml_templates.js.haml +0 -1
  210. data/spec/fixtures/views/extension_template_controller/haml_templates.xml.haml +0 -1
  211. data/spec/fixtures/views/extension_template_controller/index.html.erb +0 -0
  212. data/spec/fixtures/views/extension_template_controller/markaby_index.html.mab +0 -0
  213. data/spec/fixtures/views/extension_template_controller/markaby_templates.html.mab +0 -1
  214. data/spec/fixtures/views/extension_template_controller/markaby_templates.js.mab +0 -1
  215. data/spec/fixtures/views/extension_template_controller/markaby_templates.xml.mab +0 -1
  216. data/spec/fixtures/views/extension_template_controller/render_multiple_partials.html.erb +0 -4
  217. data/spec/fixtures/views/extension_template_controller/render_nested_js.js.erb +0 -1
  218. data/spec/fixtures/views/extension_template_controller/render_nested_xml.xml.erb +0 -1
  219. data/spec/fixtures/views/haml.html.haml +0 -1
  220. data/spec/fixtures/views/haml.xml.haml +0 -2
  221. data/spec/fixtures/views/layout/application.html.erb +0 -1
  222. data/spec/fixtures/views/layout/application.xml.erb +0 -1
  223. data/spec/fixtures/views/layout/nested/example.html.erb +0 -1
  224. data/spec/fixtures/views/markaby.html.mab +0 -1
  225. data/spec/fixtures/views/nested/example/test.html.erb +0 -1
  226. data/spec/fixtures/views/partials/_erubis.html.erb +0 -1
  227. data/spec/fixtures/views/partials/_erubis_collection.html.erb +0 -1
  228. data/spec/fixtures/views/partials/_erubis_collection_with_locals.html.erb +0 -1
  229. data/spec/fixtures/views/partials/_erubis_new.html.erb +0 -1
  230. data/spec/fixtures/views/partials/_haml.html.haml +0 -1
  231. data/spec/fixtures/views/partials/_haml_collection.html.haml +0 -1
  232. data/spec/fixtures/views/partials/_haml_collection_with_locals.html.haml +0 -1
  233. data/spec/fixtures/views/partials/_haml_new.html.haml +0 -1
  234. data/spec/fixtures/views/partials/_markaby.html.mab +0 -1
  235. data/spec/fixtures/views/partials/_markaby_collection.html.mab +0 -1
  236. data/spec/fixtures/views/partials/_markaby_collection_with_locals.html.mab +0 -1
  237. data/spec/fixtures/views/partials/_markaby_new.html.mab +0 -1
  238. data/spec/fixtures/views/render_object_controller/render_object_with_template.html.erb +0 -1
  239. data/spec/fixtures/views/render_object_controller/render_object_with_template.js.erb +0 -1
  240. data/spec/fixtures/views/render_object_controller/render_object_with_template.xml.erb +0 -1
  241. data/spec/fixtures/views/template_views/interface__buffer_erubis.html.erb +0 -4
  242. data/spec/fixtures/views/template_views/interface__buffer_haml.html.haml +0 -7
  243. data/spec/fixtures/views/template_views/interface__buffer_markaby.html.mab +0 -7
  244. data/spec/fixtures/views/template_views/interface_capture_erubis.html.erb +0 -15
  245. data/spec/fixtures/views/template_views/interface_capture_haml.html.haml +0 -15
  246. data/spec/fixtures/views/template_views/interface_capture_markaby.html.mab +0 -4
  247. data/spec/fixtures/views/template_views/interface_concat_erubis.html.erb +0 -12
  248. data/spec/fixtures/views/template_views/interface_concat_haml.html.haml +0 -11
  249. data/spec/fixtures/views/template_views/interface_concat_markaby.html.mab +0 -14
  250. data/spec/fixtures/views/test.dir/the_template.html.erb +0 -1
  251. data/spec/merb/abstract_controller_spec.rb +0 -38
  252. data/spec/merb/assets_spec.rb +0 -207
  253. data/spec/merb/caching_spec.rb +0 -102
  254. data/spec/merb/config_spec.rb +0 -29
  255. data/spec/merb/controller_filters_spec.rb +0 -253
  256. data/spec/merb/controller_spec.rb +0 -126
  257. data/spec/merb/cookie_store_spec.rb +0 -72
  258. data/spec/merb/cookies_spec.rb +0 -96
  259. data/spec/merb/core_ext/class_spec.rb +0 -97
  260. data/spec/merb/core_ext/enumerable_spec.rb +0 -27
  261. data/spec/merb/core_ext/hash_spec.rb +0 -251
  262. data/spec/merb/core_ext/inflector_spec.rb +0 -34
  263. data/spec/merb/core_ext/kernel_spec.rb +0 -25
  264. data/spec/merb/core_ext/numeric_spec.rb +0 -26
  265. data/spec/merb/core_ext/object_spec.rb +0 -47
  266. data/spec/merb/core_ext/string_spec.rb +0 -22
  267. data/spec/merb/core_ext/symbol_spec.rb +0 -7
  268. data/spec/merb/dependency_spec.rb +0 -22
  269. data/spec/merb/dispatch_spec.rb +0 -528
  270. data/spec/merb/fake_request_spec.rb +0 -80
  271. data/spec/merb/generator_spec.rb +0 -248
  272. data/spec/merb/handler_spec.rb +0 -169
  273. data/spec/merb/mail_controller_spec.rb +0 -177
  274. data/spec/merb/mailer_spec.rb +0 -87
  275. data/spec/merb/multipart_spec.rb +0 -50
  276. data/spec/merb/part_controller_spec.rb +0 -124
  277. data/spec/merb/plugins_spec.rb +0 -80
  278. data/spec/merb/render_spec.rb +0 -469
  279. data/spec/merb/request_spec.rb +0 -287
  280. data/spec/merb/responder_spec.rb +0 -562
  281. data/spec/merb/router_spec.rb +0 -900
  282. data/spec/merb/server_spec.rb +0 -19
  283. data/spec/merb/template_spec.rb +0 -41
  284. data/spec/merb/upload_handler_spec.rb +0 -108
  285. data/spec/merb/version_spec.rb +0 -33
  286. data/spec/merb/view_context_spec.rb +0 -366
  287. data/spec/spec_generator_helper.rb +0 -34
  288. data/spec/spec_helper.rb +0 -101
  289. data/spec/spec_helpers/url_shared_behaviour.rb +0 -112
  290. data/test_unit_generators/merb_controller_test/merb_controller_test_generator.rb +0 -53
  291. data/test_unit_generators/merb_controller_test/templates/functional_test.rb +0 -17
  292. data/test_unit_generators/merb_controller_test/templates/helper_test.rb +0 -9
  293. data/test_unit_generators/merb_model_test/merb_model_test_generator.rb +0 -29
  294. data/test_unit_generators/merb_model_test/templates/model_test_unit_template.erb +0 -9
@@ -1,136 +0,0 @@
1
- # http://yehudakatz.com/2007/01/27/a-better-assert_select-assert_elements/
2
- # based on assert_elements
3
- # Author: Yehuda Katz
4
- # Email: wycats @nospam@ gmail.com
5
- # Web: http://www.yehudakatz.com
6
- #
7
- # which was based on HpricotTestHelper
8
- # Author: Luke Redpath
9
- # Email: contact @nospam@ lukeredpath.co.uk
10
- # Web: www.lukeredpath.co.uk / opensource.agileevolved.com
11
-
12
- require 'hpricot'
13
-
14
- class Hpricot::Elem
15
- def should_contain(value)
16
- self.inner_text.include?(value)
17
- end
18
-
19
- def should_match(regex)
20
- self.inner_text.match(regex)
21
- end
22
-
23
- # courtesy of 'thomas' from the comments
24
- # of _whys blog - get in touch if you want a better credit!
25
- def inner_text
26
- self.children.collect do |child|
27
- child.is_a?(Hpricot::Text) ? child.content : ((child.respond_to?("inner_text") && child.inner_text) || "")
28
- end.join.strip
29
- end
30
- end
31
-
32
- module HpricotTestHelper
33
- # returns the inner content of
34
- # the first tag found by the css query
35
- def tag(css_query)
36
- process_output
37
- @output.content_for(css_query)
38
- end
39
-
40
- # returns an array of tag contents
41
- # for all of the tags found by the
42
- # css query
43
- def tags(css_query)
44
- process_output
45
- @output.content_for_all(css_query)
46
- end
47
-
48
- # returns a raw Hpricot::Elem object
49
- # for the first result found by the query
50
- def element(css_query)
51
- process_output
52
- @output[css_query].first
53
- end
54
-
55
- # returns an array of Hpricot::Elem objects
56
- # for the results found by the query
57
- def elements(css_query)
58
- process_output
59
- Hpricot::Elements[*css_query.split(",").map(&:strip).map do |query|
60
- @output[query]
61
- end.flatten]
62
- end
63
-
64
- def get_elements css_query, text
65
- els = elements(css_query)
66
- case text
67
- when String then els.reject! {|t| !t.should_contain(text) }
68
- when Regexp then els.reject! {|t| !t.should_match(text) }
69
- end
70
- els
71
- end
72
-
73
- def assert_elements css_query, equality = nil, &block
74
- message = equality.delete(:message) if equality.is_a?(Hash)
75
-
76
- case equality
77
- when Numeric then equality = {:count => equality}
78
- when Range then equality = {:minimum => equality.to_a.first, :maximum => equality.to_a.last }
79
- else equality ||= {}
80
- end
81
-
82
- equality.merge!({:minimum => 1}) if (equality.keys & [:minimum, :maximum, :count]).empty?
83
-
84
- els = get_elements(css_query, equality[:text])
85
-
86
- ret = equality.keys.include?(:minimum) ? (els.size >= equality[:minimum]) : true
87
- ret &&= (els.size <= equality[:maximum]) if equality.keys.include?(:maximum)
88
- ret &&= (els.size == equality[:count]) if equality.keys.include?(:count)
89
-
90
- if block && !els.empty?
91
- ret &&= self.dup.instance_eval do
92
- @output = HpricotTestHelper::DocumentOutput.new(els.inner_html)
93
- @block = true
94
- instance_eval(&block)
95
- end
96
- end
97
-
98
- if(equality[:count] != 0)
99
- assert ret, "#{ message } \"#{ css_query }\" with \"#{ equality.inspect }\" was not found."
100
- else
101
- assert ret, "#{ message } \"#{ css_query }\" with \"#{ equality.reject{|k,v| k == :count}.inspect }\" was found, but you specified :count => 0."
102
- end
103
- ret
104
- end
105
-
106
- # small utility class for working with
107
- # the Hpricot parser class
108
- class DocumentOutput
109
- def initialize(response_body)
110
- @parser = Hpricot.parse(response_body)
111
- end
112
-
113
- def content_for(css_query)
114
- @parser.search(css_query).first.inner_text
115
- end
116
-
117
- def content_for_all(css_query)
118
- @parser.search(css_query).collect(&:inner_text)
119
- end
120
-
121
- def [](css_query)
122
- @parser.search(css_query)
123
- end
124
- end
125
-
126
- protected
127
- # creates a new DocumentOutput object from the response
128
- # body if hasn't already been created. This is
129
- # called automatically by the element and tag methods
130
- def process_output
131
- if !@block && (@output.nil? || (@controller.body != @response_output))
132
- @output = HpricotTestHelper::DocumentOutput.new(@controller.body)
133
- @response_output = @controller.body
134
- end
135
- end
136
- end
@@ -1,66 +0,0 @@
1
- module Merb
2
- module Test
3
- module Multipart
4
- require 'rubygems'
5
- require 'mime/types'
6
-
7
- class Param
8
- attr_accessor :key, :value
9
- def initialize(key, value)
10
- @key = key
11
- @value = value
12
- end
13
-
14
- def to_multipart
15
- return %(Content-Disposition: form-data; name="#{key}"\r\n\r\n#{value}\r\n)
16
- end
17
- end
18
-
19
- class FileParam
20
- attr_accessor :key, :filename, :content
21
- def initialize(key, filename, content)
22
- @key = key
23
- @filename = filename
24
- @content = content
25
- end
26
-
27
- def to_multipart
28
- return %(Content-Disposition: form-data; name="#{key}"; filename="#{filename}"\r\n) + "Content-Type: #{MIME::Types.type_for(@filename)}\r\n\r\n" + content + "\r\n"
29
- end
30
- end
31
-
32
- class Post
33
- BOUNDARY = '----------0xKhTmLbOuNdArY'
34
- CONTENT_TYPE = "multipart/form-data, boundary=" + BOUNDARY
35
-
36
- def initialize(params = {})
37
- @multipart_params = []
38
- push_params(params)
39
- end
40
-
41
- def push_params(params, prefix = nil)
42
- params.sort_by {|k| k.to_s}.each do |key, value|
43
- param_key = prefix.nil? ? key : "#{prefix}[#{key}]"
44
- if value.respond_to?(:read)
45
- @multipart_params << FileParam.new(param_key, value.path, value.read)
46
- else
47
- if value.is_a?(Hash) || value.is_a?(Mash)
48
- value.keys.each do |k|
49
- push_params(value, param_key)
50
- end
51
- else
52
- @multipart_params << Param.new(param_key, value)
53
- end
54
- end
55
- end
56
- end
57
-
58
- def to_multipart
59
- query = @multipart_params.collect { |param| "--" + BOUNDARY + "\r\n" + param.to_multipart }.join("") + "--" + BOUNDARY + "--"
60
- return query, CONTENT_TYPE
61
- end
62
- end
63
-
64
- end
65
- end
66
- end
@@ -1,18 +0,0 @@
1
- require 'hpricot'
2
- require 'spec'
3
-
4
- # Get all the rspec matchers for merb and include them
5
- Dir[(File.dirname(__FILE__) + "/rspec_matchers/**/*.rb")].each do |file|
6
- require "#{file[0...-3]}"
7
- end
8
-
9
- module Merb
10
- module Test
11
- module RspecMatchers
12
-
13
- include ControllerMatchers
14
- include MarkupMatchers
15
-
16
- end
17
- end
18
- end
@@ -1,117 +0,0 @@
1
- module Merb
2
- module Test
3
- module ControllerMatchers
4
-
5
- class BeRedirect
6
- def matches?(target)
7
- @target = target
8
- [301, 302].include? target
9
- end
10
- def failure_message
11
- "expected to redirect"
12
- end
13
- def negative_failure_message
14
- "expected not to redirect"
15
- end
16
- end
17
-
18
- class Redirect
19
- def matches?(target)
20
- @target = target
21
- BeRedirect.new.matches?(target.status)
22
- end
23
- def failure_message
24
- "expected #{@target.inspect} to redirect"
25
- end
26
- def negative_failure_message
27
- "expected #{@target.inspect} not to redirect"
28
- end
29
- end
30
-
31
- class RedirectTo
32
- def initialize(expected)
33
- @expected = expected
34
- end
35
-
36
- def matches?(target)
37
- @target = target.headers['Location']
38
- @redirected = BeRedirect.new.matches?(target.status)
39
- @target == @expected
40
- end
41
-
42
- def failure_message
43
- msg = "expected a redirect to <#{@expected}>, but "
44
- if @redirected
45
- msg << "found one to <#{@target}>"
46
- else
47
- msg << "there was no redirect"
48
- end
49
- end
50
-
51
- def negative_failure_message
52
- "expected not to redirect to <#{@expected}>, but did anyway"
53
- end
54
- end
55
-
56
- class BeSuccess
57
-
58
- def matches?(target)
59
- @target = target.status
60
- (200..299).include?(@target)
61
- end
62
-
63
- def failure_message
64
- "expected #{@target} to be successful but was #{@target.status}"
65
- end
66
-
67
- def negative_failure_message
68
- "expected #{@target} not to be successful but it was"
69
- end
70
- end
71
-
72
- class BeMissing
73
- def matches?(target)
74
- @target = target
75
- (400..499).include?(@target.status)
76
- end
77
-
78
- def failure_message
79
- "expected #{@target} to be missing but was #{@target.status}"
80
- end
81
-
82
- def negative_failure_message
83
- "expected #{@target} not to be missing but it was"
84
- end
85
- end
86
-
87
-
88
- def be_redirect
89
- BeRedirect.new
90
- end
91
-
92
- def redirect
93
- Redirect.new
94
- end
95
-
96
- def redirect_to(expected)
97
- RedirectTo.new(expected)
98
- end
99
-
100
- def be_success
101
- BeSuccess.new
102
- end
103
-
104
- def be_successful
105
- BeSuccess.new
106
- end
107
-
108
- def respond_successfully
109
- BeSuccess.new
110
- end
111
-
112
- def be_missing
113
- BeMissing.new
114
- end
115
- end
116
- end
117
- end
@@ -1,98 +0,0 @@
1
- module Merb
2
- module Test
3
- module MarkupMatchers
4
- class HaveSelector
5
- def initialize(expected)
6
- @expected = expected
7
- end
8
-
9
- def matches?(stringlike)
10
- @document = case stringlike
11
- when Hpricot::Elem
12
- stringlike
13
- when StringIO
14
- Hpricot.parse(stringlike.string)
15
- else
16
- Hpricot.parse(stringlike)
17
- end
18
- !@document.search(@expected).empty?
19
- end
20
-
21
- def failure_message
22
- "expected following text to match selector #{@expected}:\n#{@document}"
23
- end
24
-
25
- def negative_failure_message
26
- "expected following text to not match selector #{@expected}:\n#{@document}"
27
- end
28
- end
29
-
30
- class MatchTag
31
- def initialize(name, attrs)
32
- @name, @attrs = name, attrs
33
- @content = @attrs.delete(:content)
34
- end
35
-
36
- def matches?(target)
37
- @errors = []
38
- unless target.include?("<#{@name}")
39
- @errors << "Expected a <#{@name}>, but was #{target}"
40
- end
41
- @attrs.each do |attr, val|
42
- unless target.include?("#{attr}=\"#{val}\"")
43
- @errors << "Expected #{attr}=\"#{val}\", but was #{target}"
44
- end
45
- end
46
- if @content
47
- unless target.include?(">#{@content}<")
48
- @errors << "Expected #{target} to include #{@content}"
49
- end
50
- end
51
- @errors.size == 0
52
- end
53
-
54
- def failure_message
55
- @errors[0]
56
- end
57
-
58
- def negative_failure_message
59
- "Expected not to match against <#{@name} #{@attrs.map{ |a,v| "#{a}=\"#{v}\"" }.join(" ")}> tag, but it matched"
60
- end
61
- end
62
-
63
- class NotMatchTag
64
- def initialize(attrs)
65
- @attrs = attrs
66
- end
67
-
68
- def matches?(target)
69
- @errors = []
70
- @attrs.each do |attr, val|
71
- if target.include?("#{attr}=\"#{val}\"")
72
- @errors << "Should not include #{attr}=\"#{val}\", but was #{target}"
73
- end
74
- end
75
- @errors.size == 0
76
- end
77
-
78
- def failure_message
79
- @errors[0]
80
- end
81
- end
82
-
83
- def match_tag(name, attrs={})
84
- MatchTag.new(name, attrs)
85
- end
86
- def not_match_tag(attrs)
87
- NotMatchTag.new(attrs)
88
- end
89
-
90
- def have_selector(expected)
91
- HaveSelector.new(expected)
92
- end
93
- alias_method :match_selector, :have_selector
94
-
95
-
96
- end
97
- end
98
- end
@@ -1,80 +0,0 @@
1
- module Mongrel
2
- module Const
3
- POST = 'POST'.freeze unless const_defined?(:POST)
4
- PUT = 'PUT'.freeze unless const_defined?(:PUT)
5
- QUERY_STRING = 'QUERY_STRING'.freeze unless const_defined?(:QUERY_STRING)
6
- UPLOAD_ID = 'upload_id'.freeze
7
- end
8
-
9
- unless ENV['EVENT'] || ENV['SWIFT']
10
- HttpHandler.class_eval do
11
- def request_aborted(params)
12
- end
13
- end
14
-
15
- HttpRequest.class_eval do
16
- def initialize_with_abort(params, socket, dispatchers)
17
- initialize_without_abort(params, socket, dispatchers)
18
- dispatchers.each {|d| d.request_aborted(params) if @body.nil? && d }
19
- end
20
-
21
- alias_method :initialize_without_abort, :initialize
22
- alias_method :initialize, :initialize_with_abort
23
- end
24
- end
25
- end
26
-
27
-
28
- class MerbUploadHandler < Mongrel::HttpHandler
29
-
30
- def initialize(options = {})
31
- @path_match = Regexp.new(options[:upload_path_match])
32
- @frequency = options[:upload_frequency] || 3
33
- @request_notify = true
34
- if options[:start_drb]
35
- require 'drb'
36
- DRb.start_service
37
- Mongrel.const_set :Uploads, DRbObject.new(nil, "druby://#{options[:host]}:#{options[:drb_server_port]}").upload_progress
38
- else
39
- Mongrel.const_set :Uploads, Merb::UploadProgress.new
40
- end
41
- Mongrel::Uploads.debug = true if options[:debug]
42
- end
43
-
44
- def request_begins(params)
45
- upload_notify(:add, params, params[Mongrel::Const::CONTENT_LENGTH].to_i)
46
- end
47
-
48
- def request_progress(params, clen, total)
49
- upload_notify(:mark, params, clen)
50
- end
51
-
52
- def process(request, response)
53
- upload_notify(:finish, request.params)
54
- end
55
-
56
- def request_aborted(params)
57
- return unless upload_id = valid_upload?(params)
58
- Mongrel::Uploads.finish(upload_id)
59
- Merb.logger.info "#{self.class.name} - request aborted for " <<
60
- "id: #{upload_id.inspect}, params: #{params.inspect}"
61
- end
62
-
63
- private
64
- def upload_notify(action, params, *args)
65
- return unless upload_id = valid_upload?(params)
66
- if action == :mark
67
- last_checked_time = Mongrel::Uploads.last_checked(upload_id)
68
- return unless last_checked_time && Time.now - last_checked_time > @frequency
69
- end
70
- Mongrel::Uploads.send(action, upload_id, *args)
71
- Mongrel::Uploads.update_checked_time(upload_id) unless action == :finish
72
- end
73
-
74
- def valid_upload?(params)
75
- params[Mongrel::Const::PATH_INFO].match(@path_match) &&
76
- [Mongrel::Const::POST, Mongrel::Const::PUT].include?(params[Mongrel::Const::REQUEST_METHOD]) &&
77
- Mongrel::HttpRequest.query_parse(params[Mongrel::Const::QUERY_STRING])[Mongrel::Const::UPLOAD_ID]
78
- end
79
- end
80
-