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,32 +0,0 @@
1
- module Merb::InlinePartialMixin
2
- def partial(template, opts={})
3
-
4
- unless @_template_format
5
- @web_controller.choose_template_format(Merb.available_mime_types, {})
6
- end
7
-
8
- found_template = @web_controller._cached_partials["#{template}.#{@_template_format}"] ||=
9
- @web_controller.send(:find_partial, template, opts)
10
-
11
- template_method = found_template && found_template.gsub(/[^\.a-zA-Z0-9]/, "__").gsub(/\./, "_")
12
-
13
- unless template_method && self.respond_to?(template_method)
14
- return super
15
- end
16
-
17
- if with = opts.delete(:with)
18
- as = opts.delete(:as) || found_template.match(/(.*\/_)([^\.]*)/)[2]
19
- @_merb_partial_locals = opts
20
- sent_template = [with].flatten.map do |temp|
21
- @_merb_partial_locals[as.to_sym] = temp
22
- send(template_method)
23
- end.join
24
- else
25
- @_merb_partial_locals = opts
26
- sent_template = send(template_method)
27
- end
28
-
29
- return sent_template if sent_template
30
-
31
- end
32
- end
@@ -1,465 +0,0 @@
1
- module Merb
2
-
3
- module RenderMixin
4
- @@cached_templates = {}
5
- include Merb::ControllerExceptions
6
-
7
- def self.included(base)
8
- base.class_eval {
9
- class_inheritable_accessor :_template_root,
10
- :_layout,
11
- :_templates,
12
- :_cached_partials
13
-
14
- self._layout = :application
15
- self._template_root = File.expand_path(Merb.view_path)
16
- self._templates = {}
17
- self._cached_partials = {}
18
-
19
- attr_accessor :template
20
- }
21
- end
22
-
23
- # Universal render method. Template handlers are registered
24
- # by template extension. So you can use the same render method
25
- # for any kind of template that implements an adapter module.
26
- #
27
- # Out of the box Merb supports Erubis. In addition, Haml, Markaby
28
- # and Builder templates are built in, but you must activate them in
29
- # merb_init.rb by listing the name of the template engine you
30
- # want to use:
31
- #
32
- # Merb::Template::Haml
33
- #
34
- # In addition, you can identify the type of output with an
35
- # extension in the middle of the filename. Erubis is capable of
36
- # rendering any kind of text output, not just HTML.
37
- # This is the recommended usage.
38
- #
39
- # index.html.erb update.js.erb feed.xml.erb
40
- #
41
- # Examples:
42
- #
43
- # render
44
- #
45
- # Looks for views/controllername/actionname.* and renders
46
- # the template with the proper engine based on its file extension.
47
- #
48
- # render :layout => :none
49
- #
50
- # Renders the current template with no layout. XMl Builder templates
51
- # are exempt from layout by default.
52
- #
53
- # render :action => 'foo'
54
- #
55
- # Renders views/controllername/foo.*
56
- #
57
- # render :nothing => 200
58
- #
59
- # Renders nothing with a status of 200
60
- #
61
- # render :template => 'shared/message'
62
- #
63
- # Renders views/shared/message
64
- #
65
- # render :js => "$('some-div').toggle();"
66
- #
67
- # If the right hand side of :js => is a string then the proper
68
- # javascript headers will be set and the string will be returned
69
- # verbatim as js.
70
- #
71
- # render :js => :spinner
72
- #
73
- # When the rhs of :js => is a Symbol, it will be used as the
74
- # action/template name so: views/controllername/spinner.js.erb
75
- # will be rendered as javascript
76
- #
77
- # render :js => true
78
- #
79
- # This will just look for the current controller/action template
80
- # with the .js.erb extension and render it as javascript
81
- #
82
- # XML can be rendered with the same options as Javascript, but it
83
- # also accepts the :template option. This allows you to use any
84
- # template engine to render XML.
85
- #
86
- # render :xml => @posts.to_xml
87
- # render :xml => "<foo><bar>Hi!</bar></foo>"
88
- #
89
- # This will set the appropriate xml headers and render the rhs
90
- # of :xml => as a string. SO you can pass any xml string to this
91
- # to be rendered.
92
- #
93
- # render :xml => :hello
94
- #
95
- # Renders the hello.xrb template for the current controller.
96
- #
97
- # render :xml => true
98
- # render :xml => true, :action => "buffalo"
99
- #
100
- # Renders the buffalo.xml.builder or buffalo.xerb template for the current controller.
101
- #
102
- # render :xml=>true, :template => 'foo/bar'
103
- #
104
- # Renders the the foo/bar template. This is not limited to
105
- # the default rxml, xerb, or builder templates, but could
106
- # just as easy be HAML.
107
- #
108
- # Render also supports passing in an object
109
- # ===Example
110
- #
111
- # class People < Application
112
- # provides :xml
113
- #
114
- # def index
115
- # @people = User.all
116
- # render @people
117
- # end
118
- # end
119
- #
120
- # This will first check to see if a index.xml.* template extists, if not
121
- # it will call @people.to_xml (as defined in the add_mime_type method) on the passed
122
- # in object if such a method exists for the current content_type
123
- #
124
- # Conversely, there may be situations where you prefer to be more literal
125
- # such as when you desire to render a Hash, for those occasions, the
126
- # the following syntax exists:
127
- #
128
- # class People < Application
129
- # provides :xml
130
- #
131
- # def index
132
- # @people = User.all
133
- # render :obj => @people
134
- # end
135
- # end
136
- #
137
- # When using multiple calls to render in one action, the context of the render is cached for performance reasons
138
- # That is, all instance variables are loaded into the view_context object only on the first call and then this is re-used.
139
- # What this means is that in the case where you may want to render then set some more instance variables and then call render again
140
- # you will want to use a clean context object. To do this
141
- #
142
- # render :clean_context => true
143
- #
144
- # This will ensure that all instance variable are up to date in your views.
145
- #
146
- def render(*args,&blk)
147
- opts = (Hash === args.last) ? args.pop : {}
148
-
149
- action = opts[:action] || params[:action]
150
- opts[:layout] ||= _layout
151
-
152
- choose_template_format(Merb.available_mime_types, opts)
153
-
154
- # Handles the case where render is called with an object
155
- if obj = args.first || opts[:obj]
156
- # Check for a template
157
- unless find_template({:action => action}.merge(opts))
158
- fmt = content_type
159
- if transform_method = Merb.mime_transform_method(fmt)
160
- set_response_headers fmt
161
- transform_args = provided_format_arguments_for(fmt)
162
- return case transform_args
163
- when Hash then obj.send(transform_method, transform_args)
164
- when Array then obj.send(transform_method, *transform_args)
165
- when Proc then
166
- case transform_args.arity
167
- when 3 then transform_args.call(obj, self, transform_method)
168
- when 2 then transform_args.call(obj, self)
169
- when 1 then transform_args.call(obj)
170
- else transform_args.call
171
- end
172
- else obj.send(transform_method)
173
- end
174
- end
175
- end
176
- end
177
-
178
- case
179
- when status = opts[:nothing]
180
- return render_nothing(status)
181
-
182
- when opts[:inline]
183
- text = opts.delete(:inline)
184
- return render_inline(text, opts)
185
- else
186
- set_response_headers @_template_format
187
-
188
- case @_format_value
189
- when String
190
- return @_format_value
191
- when Symbol
192
- if !Merb.available_mime_types.keys.include?(@_format_value) # render :js => "Some js value"
193
- template = find_template(:action => @_format_value)
194
- else
195
- if opts[@_format_value] == @_format_value # An edge case that lives in the specs
196
- # says that a render :js => :js should be catered for
197
- template = find_template(:action => @_format_value)
198
- else
199
- # when called from within an action as plain render within a respond_to block
200
- template = find_template(opts.merge( :action => action ))
201
- end
202
- end
203
- else
204
- if template = opts[:template]
205
- # render :template => "this_template"
206
- template = find_template( :template => template)
207
- else
208
- # a plain action render
209
- # def index; render; end
210
- template = find_template(:action => action)
211
- end
212
- end
213
- end
214
-
215
- unless template
216
- raise TemplateNotFound, "No template matched at #{unmatched}"
217
- end
218
- self.template ||= File.basename(template)
219
-
220
- engine = Template.engine_for(template)
221
- options = {
222
- :file => template,
223
- :view_context => (opts[:clean_context] ? clean_view_context(engine) : cached_view_context(engine)),
224
- :opts => opts
225
- }
226
- content = engine.transform(options)
227
- if engine.exempt_from_layout? || opts[:layout] == :none || [:js].include?(@_template_format)
228
- content
229
- else
230
- wrap_layout(content, opts)
231
- end
232
- end
233
-
234
- def set_response_headers(tmpl_fmt)
235
- if self.respond_to?(:headers)
236
- # Set the headers
237
- headers['Content-Type'] = Merb.available_mime_types[tmpl_fmt].first
238
-
239
- # set any additinal headers that may be associated with the current mime type
240
- Merb.response_headers[tmpl_fmt].each do |key,value|
241
- headers[key.to_s] = value
242
- end
243
-
244
- end
245
- end
246
-
247
- def render_inline(text, opts)
248
- # Does not yet support format selection in the wrap_layout
249
- # Needs to get the template format need a spec for this
250
- # should be
251
- choose_template_format(Merb.available_mime_types, opts)
252
-
253
- engine = Template.engine_for_extension(opts[:extension] || 'erb')
254
- options = {
255
- :text => text,
256
- :view_context => (opts[:clean_context] ? clean_view_context(engine) : cached_view_context(engine)),
257
- :opts => opts
258
- }
259
- content = engine.transform(options)
260
- if engine.exempt_from_layout? || opts[:layout] == :none
261
- content
262
- else
263
- wrap_layout(content, opts)
264
- end
265
- end
266
-
267
- # does a render with no layout. Also sets the
268
- # content type header to text/javascript. Use
269
- # this when you want to render a template with
270
- # .jerb extension.
271
- def render_js(template=nil)
272
- render :js => true, :action => (template || params[:action])
273
- end
274
-
275
- # renders nothing but sets the status, defaults
276
- # to 200. does send one ' ' space char, this is for
277
- # safari and flash uploaders to work.
278
- def render_nothing(status=200)
279
- @_status = status
280
- return " "
281
- end
282
-
283
- # Sets the response's status to the specified value. Use either an
284
- # integer (200, 201, 302, etc.), or a Symbol as defined in
285
- # Merb::ControllerExceptions::RESPONSE_CODES, such as :not_found,
286
- # :created or :see_other.
287
- def set_status(status)
288
- if status.kind_of?(Symbol)
289
- status = Merb::ControllerExceptions::STATUS_CODES[status]
290
- status || raise("Can't find a response code with that name")
291
- end
292
- @_status = status
293
- end
294
-
295
- def render_no_layout(opts={})
296
- render opts.update({:layout => :none})
297
- end
298
-
299
- # This is merb's partial render method. You name your
300
- # partials _partialname.format.* , and then call it like
301
- # partial(:partialname). If there is no '/' character
302
- # in the argument passed in it will look for the partial
303
- # in the view directory that corresponds to the current
304
- # controller name. If you pass a string with a path in it
305
- # you can render partials in other view directories. So
306
- # if you create a views/shared directory then you can call
307
- # partials that live there like partial('shared/foo')
308
- def partial(template, opts={})
309
- choose_template_format(Merb.available_mime_types, {}) unless @_template_format
310
- template = _cached_partials["#{template}.#{@_template_format}"] ||= find_partial(template)
311
- unless template
312
- raise TemplateNotFound, "No template matched at #{unmatched}"
313
- end
314
-
315
- opts[:as] ||= template[(template.rindex('/_') + 2)..-1].split('.').first
316
-
317
- if opts[:with] # Render a collection or an object
318
- partial_for_collection(template, opts.delete(:with), opts)
319
- else # Just render a partial
320
- engine = Template.engine_for(template)
321
- render_partial(template, engine, opts || {})
322
- end
323
- end
324
-
325
- # +catch_content+ catches the thrown content from another template
326
- # So when you throw_content(:foo) {...} you can catch_content :foo
327
- # in another view or the layout.
328
- def catch_content(name)
329
- thrown_content[name]
330
- end
331
-
332
- private
333
-
334
- def render_partial(template, engine, locals={})
335
- @_merb_partial_locals = locals
336
- options = {
337
- :file => template,
338
- :view_context => clean_view_context(engine),
339
- :opts => { :locals => locals }
340
- }
341
- engine.transform(options)
342
- end
343
-
344
- def partial_for_collection(template, collection, opts={})
345
- # Delete the internal keys, so that everything else is considered
346
- # a local declaration in the partial
347
- local_name = opts.delete(:as)
348
-
349
- engine = Template.engine_for(template)
350
-
351
- buffer = []
352
-
353
- collection = [collection].flatten
354
- collection.each_with_index do |object, count|
355
- opts.merge!({
356
- local_name.to_sym => object,
357
- :count => count
358
- })
359
- buffer << render_partial(template, engine, opts)
360
- end
361
-
362
- buffer.join
363
- end
364
-
365
- # this returns a ViewContext object populated with all
366
- # the instance variables in your controller. This is used
367
- # as the view context object for the Erubis templates.
368
- def cached_view_context(engine=nil)
369
- @_view_context_cache ||= clean_view_context(engine)
370
- end
371
-
372
- def clean_view_context(engine=nil)
373
- if engine.nil?
374
- ::Merb::ViewContext.new(self)
375
- else
376
- engine.view_context_klass.new(self)
377
- end
378
- end
379
-
380
- def wrap_layout(content, opts={})
381
- @_template_format ||= choose_template_format(Merb.available_mime_types, opts)
382
-
383
- if opts[:layout] != :application
384
- layout_choice = find_template(:layout => opts[:layout])
385
- else
386
- if name = find_template(:layout => self.class.name.snake_case.split('::').join('/'))
387
- layout_choice = name
388
- else
389
- previous_glob = unmatched
390
- layout_choice = find_template(:layout => :application)
391
- end
392
- end
393
- unless layout_choice
394
- raise LayoutNotFound, "No layout matched #{unmatched}#{" or #{previous_glob}" if previous_glob}"
395
- end
396
-
397
- thrown_content[:layout] = content
398
- engine = Template.engine_for(layout_choice)
399
- options = {
400
- :file => layout_choice,
401
- :view_context => cached_view_context,
402
- :opts => opts
403
- }
404
- engine.transform(options)
405
- end
406
-
407
- # OPTIMIZE : combine find_template and find_partial ?
408
- def find_template(opts={})
409
- if template = opts[:template]
410
- path = _template_root / template
411
- elsif action = opts[:action]
412
- segment = self.class.name.snake_case.split('::').join('/')
413
- path = _template_root / segment / action
414
- elsif _layout = opts[:layout]
415
- path = _template_root / 'layout' / _layout
416
- else
417
- raise "called find_template without an :action or :layout"
418
- end
419
- glob_template(path, opts)
420
- end
421
-
422
- def find_partial(template, opts={})
423
- if template =~ /\//
424
- t = template.split('/')
425
- template = t.pop
426
- path = _template_root / t.join('/') / "_#{template}"
427
- else
428
- segment = self.class.name.snake_case.split('::').join('/')
429
- path = _template_root / segment / "_#{template}"
430
- end
431
- glob_template(path, opts)
432
- end
433
-
434
- # This method will return a matching template at the specified path, using the
435
- # template_name.format.engine convention
436
- def glob_template(path, opts = {})
437
- the_template = "#{path}.#{opts[:format] || @_template_format}"
438
- Merb::AbstractController._template_path_cache[the_template] || (@_merb_unmatched = (the_template + ".*"); nil)
439
- end
440
-
441
- # Chooses the format of the template based on the params hash or the explicit
442
- # request of the developer.
443
- def choose_template_format(types, opts)
444
- opts[:format] ||= content_type
445
- @_template_format = (opts.keys & types.keys).first # Check for render :js => etc
446
- @_template_format ||= opts[:format]
447
- @_format_value = opts[@_template_format] || opts[:format] # get the value of the option if something
448
- # like :js was used
449
-
450
- # need to change things to symbols so as not to stuff up part controllers
451
- if @_template_format.to_s == @_format_value.to_s
452
- @_template_format = @_template_format.to_sym
453
- @_format_value = @_format_value.to_sym
454
- end
455
- @_template_format
456
- end
457
-
458
- # For the benefit of error handlers, returns the most recent glob
459
- # pattern which didn't find a file in the filesystem
460
- def unmatched
461
- @_merb_unmatched
462
- end
463
-
464
- end
465
- end