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.
- data/LICENSE +0 -20
- data/README +0 -277
- data/Rakefile +80 -199
- data/TODO +0 -3
- metadata +19 -438
- data/SVN_REVISION +0 -1
- data/app_generators/merb/USAGE +0 -5
- data/app_generators/merb/merb_generator.rb +0 -108
- data/app_generators/merb/templates/Rakefile +0 -124
- data/app_generators/merb/templates/app/controllers/application.rb +0 -3
- data/app_generators/merb/templates/app/controllers/exceptions.rb +0 -13
- data/app_generators/merb/templates/app/helpers/global_helper.rb +0 -5
- data/app_generators/merb/templates/app/mailers/views/layout/application.html.erb +0 -1
- data/app_generators/merb/templates/app/mailers/views/layout/application.text.erb +0 -1
- data/app_generators/merb/templates/app/parts/views/layout/application.html.erb +0 -1
- data/app_generators/merb/templates/app/views/exceptions/internal_server_error.html.erb +0 -216
- data/app_generators/merb/templates/app/views/exceptions/not_acceptable.html.erb +0 -38
- data/app_generators/merb/templates/app/views/exceptions/not_found.html.erb +0 -40
- data/app_generators/merb/templates/app/views/layout/application.html.erb +0 -11
- data/app_generators/merb/templates/config/boot.rb +0 -11
- data/app_generators/merb/templates/config/dependencies.rb +0 -41
- data/app_generators/merb/templates/config/environments/development.rb +0 -1
- data/app_generators/merb/templates/config/environments/production.rb +0 -1
- data/app_generators/merb/templates/config/environments/test.rb +0 -1
- data/app_generators/merb/templates/config/merb.yml +0 -82
- data/app_generators/merb/templates/config/merb_init.rb +0 -17
- data/app_generators/merb/templates/config/plugins.yml +0 -1
- data/app_generators/merb/templates/config/router.rb +0 -35
- data/app_generators/merb/templates/config/upload.conf +0 -0
- data/app_generators/merb/templates/public/images/merb.jpg +0 -0
- data/app_generators/merb/templates/public/merb.fcgi +0 -6
- data/app_generators/merb/templates/public/stylesheets/master.css +0 -119
- data/app_generators/merb/templates/script/destroy +0 -32
- data/app_generators/merb/templates/script/generate +0 -32
- data/app_generators/merb/templates/script/stop_merb +0 -13
- data/app_generators/merb/templates/script/win_script.cmd +0 -1
- data/app_generators/merb/templates/spec/spec.opts +0 -6
- data/app_generators/merb/templates/spec/spec_helper.rb +0 -15
- data/app_generators/merb/templates/test/test_helper.rb +0 -14
- data/app_generators/merb_plugin/USAGE +0 -5
- data/app_generators/merb_plugin/merb_plugin_generator.rb +0 -68
- data/app_generators/merb_plugin/templates/LICENSE +0 -20
- data/app_generators/merb_plugin/templates/README +0 -4
- data/app_generators/merb_plugin/templates/Rakefile +0 -35
- data/app_generators/merb_plugin/templates/TODO +0 -5
- data/app_generators/merb_plugin/templates/merbtasks.rb +0 -6
- data/app_generators/merb_plugin/templates/sampleplugin.rb +0 -10
- data/app_generators/merb_plugin/templates/sampleplugin_spec.rb +0 -7
- data/app_generators/merb_plugin/templates/spec_helper.rb +0 -2
- data/bin/merb +0 -4
- data/lib/autotest/discover.rb +0 -3
- data/lib/autotest/merb_rspec.rb +0 -80
- data/lib/merb.rb +0 -188
- data/lib/merb/abstract_controller.rb +0 -399
- data/lib/merb/assets.rb +0 -160
- data/lib/merb/assets.rb.orig +0 -119
- data/lib/merb/boot_loader.rb +0 -286
- data/lib/merb/boot_loader.rb.orig +0 -235
- data/lib/merb/caching.rb +0 -5
- data/lib/merb/caching/action_cache.rb +0 -92
- data/lib/merb/caching/fragment_cache.rb +0 -39
- data/lib/merb/caching/store/file_cache.rb +0 -90
- data/lib/merb/caching/store/memory_cache.rb +0 -85
- data/lib/merb/config.rb +0 -290
- data/lib/merb/constants.rb +0 -50
- data/lib/merb/controller.rb +0 -220
- data/lib/merb/cookies.rb +0 -95
- data/lib/merb/core_ext.rb +0 -15
- data/lib/merb/core_ext/array.rb +0 -0
- data/lib/merb/core_ext/class.rb +0 -180
- data/lib/merb/core_ext/enumerable.rb +0 -49
- data/lib/merb/core_ext/get_args.rb +0 -76
- data/lib/merb/core_ext/hash.rb +0 -306
- data/lib/merb/core_ext/inflections.rb +0 -112
- data/lib/merb/core_ext/inflector.rb +0 -275
- data/lib/merb/core_ext/kernel.rb +0 -242
- data/lib/merb/core_ext/mash.rb +0 -88
- data/lib/merb/core_ext/module.rb +0 -67
- data/lib/merb/core_ext/numeric.rb +0 -72
- data/lib/merb/core_ext/object.rb +0 -183
- data/lib/merb/core_ext/string.rb +0 -53
- data/lib/merb/core_ext/symbol.rb +0 -6
- data/lib/merb/dispatcher.rb +0 -109
- data/lib/merb/drb_server.rb +0 -19
- data/lib/merb/erubis_ext.rb +0 -10
- data/lib/merb/exceptions.rb +0 -192
- data/lib/merb/generators/merb_app/merb_app.rb +0 -22
- data/lib/merb/generators/merb_generator_helpers.rb +0 -318
- data/lib/merb/generators/merb_plugin.rb +0 -22
- data/lib/merb/logger.rb +0 -78
- data/lib/merb/mail_controller.rb +0 -268
- data/lib/merb/mailer.rb +0 -87
- data/lib/merb/mixins/basic_authentication.rb +0 -35
- data/lib/merb/mixins/controller.rb +0 -160
- data/lib/merb/mixins/erubis_capture.rb +0 -68
- data/lib/merb/mixins/general_controller.rb +0 -253
- data/lib/merb/mixins/inline_partial.rb +0 -32
- data/lib/merb/mixins/render.rb +0 -465
- data/lib/merb/mixins/responder.rb +0 -449
- data/lib/merb/mixins/view_context.rb +0 -558
- data/lib/merb/mixins/web_controller.rb +0 -36
- data/lib/merb/mongrel_handler.rb +0 -168
- data/lib/merb/part_controller.rb +0 -29
- data/lib/merb/plugins.rb +0 -16
- data/lib/merb/rack_adapter.rb +0 -37
- data/lib/merb/request.rb +0 -465
- data/lib/merb/router.rb +0 -646
- data/lib/merb/server.rb +0 -169
- data/lib/merb/session.rb +0 -23
- data/lib/merb/session/cookie_store.rb +0 -118
- data/lib/merb/session/mem_cache_session.rb +0 -131
- data/lib/merb/session/memory_session.rb +0 -176
- data/lib/merb/template.rb +0 -37
- data/lib/merb/template/erubis.rb +0 -68
- data/lib/merb/template/haml.rb +0 -87
- data/lib/merb/template/markaby.rb +0 -59
- data/lib/merb/template/xml_builder.rb +0 -50
- data/lib/merb/test/fake_request.rb +0 -74
- data/lib/merb/test/helper.rb +0 -260
- data/lib/merb/test/hpricot.rb +0 -136
- data/lib/merb/test/multipart.rb +0 -66
- data/lib/merb/test/rspec.rb +0 -18
- data/lib/merb/test/rspec_matchers/controller_matchers.rb +0 -117
- data/lib/merb/test/rspec_matchers/markup_matchers.rb +0 -98
- data/lib/merb/upload_handler.rb +0 -80
- data/lib/merb/upload_progress.rb +0 -48
- data/lib/merb/version.rb +0 -49
- data/lib/merb/view_context.rb +0 -79
- data/lib/tasks.rb +0 -7
- data/lib/tasks/merb.rake +0 -54
- data/merb_default_generators/model/USAGE +0 -0
- data/merb_default_generators/model/model_generator.rb +0 -16
- data/merb_default_generators/model/templates/new_model_template.erb +0 -5
- data/merb_default_generators/resource_controller/USAGE +0 -0
- data/merb_default_generators/resource_controller/resource_controller_generator.rb +0 -26
- data/merb_default_generators/resource_controller/templates/controller.rb +0 -30
- data/merb_default_generators/resource_controller/templates/edit.html.erb +0 -1
- data/merb_default_generators/resource_controller/templates/helper.rb +0 -5
- data/merb_default_generators/resource_controller/templates/index.html.erb +0 -1
- data/merb_default_generators/resource_controller/templates/new.html.erb +0 -1
- data/merb_default_generators/resource_controller/templates/show.html.erb +0 -1
- data/merb_generators/controller/USAGE +0 -5
- data/merb_generators/controller/controller_generator.rb +0 -16
- data/merb_generators/controller/templates/controller.rb +0 -8
- data/merb_generators/controller/templates/helper.rb +0 -5
- data/merb_generators/controller/templates/index.html.erb +0 -3
- data/merb_generators/part_controller/USAGE +0 -5
- data/merb_generators/part_controller/part_controller_generator.rb +0 -27
- data/merb_generators/part_controller/templates/controller.rb +0 -8
- data/merb_generators/part_controller/templates/helper.rb +0 -5
- data/merb_generators/part_controller/templates/index.html.erb +0 -3
- data/merb_generators/resource/USAGE +0 -0
- data/merb_generators/resource/resource_generator.rb +0 -67
- data/rspec_generators/merb_controller_test/merb_controller_test_generator.rb +0 -67
- data/rspec_generators/merb_controller_test/templates/controller_spec.rb +0 -8
- data/rspec_generators/merb_controller_test/templates/edit_spec.rb +0 -12
- data/rspec_generators/merb_controller_test/templates/helper_spec.rb +0 -5
- data/rspec_generators/merb_controller_test/templates/index_spec.rb +0 -12
- data/rspec_generators/merb_controller_test/templates/new_spec.rb +0 -12
- data/rspec_generators/merb_controller_test/templates/show_spec.rb +0 -5
- data/rspec_generators/merb_model_test/merb_model_test_generator.rb +0 -26
- data/rspec_generators/merb_model_test/templates/model_spec_template.erb +0 -7
- data/script/destroy +0 -14
- data/script/generate +0 -14
- data/spec/fixtures/config/environments/environment_config_test.yml +0 -1
- data/spec/fixtures/config/merb.yml +0 -18
- data/spec/fixtures/controllers/dispatch_spec_controllers.rb +0 -235
- data/spec/fixtures/controllers/render_spec_controllers.rb +0 -184
- data/spec/fixtures/foo.rb +0 -3
- data/spec/fixtures/mailers/views/layout/application.html.erb +0 -3
- data/spec/fixtures/mailers/views/layout/application.text.erb +0 -3
- data/spec/fixtures/mailers/views/test_mail_controller/eighth.html.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/eighth.text.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/first.html.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/first.text.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/ninth.html.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/ninth.text.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/second.text.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/third.html.erb +0 -1
- data/spec/fixtures/models/router_spec_models.rb +0 -30
- data/spec/fixtures/parts/views/layout/todo_part.html.erb +0 -3
- data/spec/fixtures/parts/views/layout/todo_part.xml.erb +0 -3
- data/spec/fixtures/parts/views/todo_part/formatted_output.html.erb +0 -1
- data/spec/fixtures/parts/views/todo_part/formatted_output.js.erb +0 -1
- data/spec/fixtures/parts/views/todo_part/formatted_output.xml.erb +0 -1
- data/spec/fixtures/parts/views/todo_part/list.html.erb +0 -3
- data/spec/fixtures/sample.txt +0 -1
- data/spec/fixtures/views/erubis.html.erb +0 -1
- data/spec/fixtures/views/examples/_erubis.html.erb +0 -1
- data/spec/fixtures/views/examples/_haml.html.haml +0 -1
- data/spec/fixtures/views/examples/_markaby.html.mab +0 -1
- data/spec/fixtures/views/examples/_throw_content.html.erb +0 -6
- data/spec/fixtures/views/examples/hello.xml.builder +0 -1
- data/spec/fixtures/views/examples/js.js.erb +0 -1
- data/spec/fixtures/views/examples/template_catch_content.html.erb +0 -15
- data/spec/fixtures/views/examples/template_catch_content_from_partial.html.erb +0 -6
- data/spec/fixtures/views/examples/template_throw_content.html.erb +0 -10
- data/spec/fixtures/views/examples/template_throw_content_without_block.html.erb +0 -3
- data/spec/fixtures/views/exceptions/admin_access_required.html.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/_nested_js.js.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/_nested_xml.xml.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/_render_partial_multiple_times.html.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/erubis_templates.html.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/erubis_templates.js.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/erubis_templates.rhtml +0 -1
- data/spec/fixtures/views/extension_template_controller/erubis_templates.xml.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/haml_index.html.haml +0 -0
- data/spec/fixtures/views/extension_template_controller/haml_templates.html.haml +0 -1
- data/spec/fixtures/views/extension_template_controller/haml_templates.js.haml +0 -1
- data/spec/fixtures/views/extension_template_controller/haml_templates.xml.haml +0 -1
- data/spec/fixtures/views/extension_template_controller/index.html.erb +0 -0
- data/spec/fixtures/views/extension_template_controller/markaby_index.html.mab +0 -0
- data/spec/fixtures/views/extension_template_controller/markaby_templates.html.mab +0 -1
- data/spec/fixtures/views/extension_template_controller/markaby_templates.js.mab +0 -1
- data/spec/fixtures/views/extension_template_controller/markaby_templates.xml.mab +0 -1
- data/spec/fixtures/views/extension_template_controller/render_multiple_partials.html.erb +0 -4
- data/spec/fixtures/views/extension_template_controller/render_nested_js.js.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/render_nested_xml.xml.erb +0 -1
- data/spec/fixtures/views/haml.html.haml +0 -1
- data/spec/fixtures/views/haml.xml.haml +0 -2
- data/spec/fixtures/views/layout/application.html.erb +0 -1
- data/spec/fixtures/views/layout/application.xml.erb +0 -1
- data/spec/fixtures/views/layout/nested/example.html.erb +0 -1
- data/spec/fixtures/views/markaby.html.mab +0 -1
- data/spec/fixtures/views/nested/example/test.html.erb +0 -1
- data/spec/fixtures/views/partials/_erubis.html.erb +0 -1
- data/spec/fixtures/views/partials/_erubis_collection.html.erb +0 -1
- data/spec/fixtures/views/partials/_erubis_collection_with_locals.html.erb +0 -1
- data/spec/fixtures/views/partials/_erubis_new.html.erb +0 -1
- data/spec/fixtures/views/partials/_haml.html.haml +0 -1
- data/spec/fixtures/views/partials/_haml_collection.html.haml +0 -1
- data/spec/fixtures/views/partials/_haml_collection_with_locals.html.haml +0 -1
- data/spec/fixtures/views/partials/_haml_new.html.haml +0 -1
- data/spec/fixtures/views/partials/_markaby.html.mab +0 -1
- data/spec/fixtures/views/partials/_markaby_collection.html.mab +0 -1
- data/spec/fixtures/views/partials/_markaby_collection_with_locals.html.mab +0 -1
- data/spec/fixtures/views/partials/_markaby_new.html.mab +0 -1
- data/spec/fixtures/views/render_object_controller/render_object_with_template.html.erb +0 -1
- data/spec/fixtures/views/render_object_controller/render_object_with_template.js.erb +0 -1
- data/spec/fixtures/views/render_object_controller/render_object_with_template.xml.erb +0 -1
- data/spec/fixtures/views/template_views/interface__buffer_erubis.html.erb +0 -4
- data/spec/fixtures/views/template_views/interface__buffer_haml.html.haml +0 -7
- data/spec/fixtures/views/template_views/interface__buffer_markaby.html.mab +0 -7
- data/spec/fixtures/views/template_views/interface_capture_erubis.html.erb +0 -15
- data/spec/fixtures/views/template_views/interface_capture_haml.html.haml +0 -15
- data/spec/fixtures/views/template_views/interface_capture_markaby.html.mab +0 -4
- data/spec/fixtures/views/template_views/interface_concat_erubis.html.erb +0 -12
- data/spec/fixtures/views/template_views/interface_concat_haml.html.haml +0 -11
- data/spec/fixtures/views/template_views/interface_concat_markaby.html.mab +0 -14
- data/spec/fixtures/views/test.dir/the_template.html.erb +0 -1
- data/spec/merb/abstract_controller_spec.rb +0 -38
- data/spec/merb/assets_spec.rb +0 -207
- data/spec/merb/caching_spec.rb +0 -102
- data/spec/merb/config_spec.rb +0 -29
- data/spec/merb/controller_filters_spec.rb +0 -253
- data/spec/merb/controller_spec.rb +0 -126
- data/spec/merb/cookie_store_spec.rb +0 -72
- data/spec/merb/cookies_spec.rb +0 -96
- data/spec/merb/core_ext/class_spec.rb +0 -97
- data/spec/merb/core_ext/enumerable_spec.rb +0 -27
- data/spec/merb/core_ext/hash_spec.rb +0 -251
- data/spec/merb/core_ext/inflector_spec.rb +0 -34
- data/spec/merb/core_ext/kernel_spec.rb +0 -25
- data/spec/merb/core_ext/numeric_spec.rb +0 -26
- data/spec/merb/core_ext/object_spec.rb +0 -47
- data/spec/merb/core_ext/string_spec.rb +0 -22
- data/spec/merb/core_ext/symbol_spec.rb +0 -7
- data/spec/merb/dependency_spec.rb +0 -22
- data/spec/merb/dispatch_spec.rb +0 -528
- data/spec/merb/fake_request_spec.rb +0 -80
- data/spec/merb/generator_spec.rb +0 -248
- data/spec/merb/handler_spec.rb +0 -169
- data/spec/merb/mail_controller_spec.rb +0 -177
- data/spec/merb/mailer_spec.rb +0 -87
- data/spec/merb/multipart_spec.rb +0 -50
- data/spec/merb/part_controller_spec.rb +0 -124
- data/spec/merb/plugins_spec.rb +0 -80
- data/spec/merb/render_spec.rb +0 -469
- data/spec/merb/request_spec.rb +0 -287
- data/spec/merb/responder_spec.rb +0 -562
- data/spec/merb/router_spec.rb +0 -900
- data/spec/merb/server_spec.rb +0 -19
- data/spec/merb/template_spec.rb +0 -41
- data/spec/merb/upload_handler_spec.rb +0 -108
- data/spec/merb/version_spec.rb +0 -33
- data/spec/merb/view_context_spec.rb +0 -366
- data/spec/spec_generator_helper.rb +0 -34
- data/spec/spec_helper.rb +0 -101
- data/spec/spec_helpers/url_shared_behaviour.rb +0 -112
- data/test_unit_generators/merb_controller_test/merb_controller_test_generator.rb +0 -53
- data/test_unit_generators/merb_controller_test/templates/functional_test.rb +0 -17
- data/test_unit_generators/merb_controller_test/templates/helper_test.rb +0 -9
- data/test_unit_generators/merb_model_test/merb_model_test_generator.rb +0 -29
- 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
|
data/lib/merb/mixins/render.rb
DELETED
|
@@ -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
|