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,35 +0,0 @@
|
|
|
1
|
-
module Merb
|
|
2
|
-
|
|
3
|
-
module AuthenticationMixin
|
|
4
|
-
require 'base64'
|
|
5
|
-
|
|
6
|
-
def credentials
|
|
7
|
-
if d = %w{REDIRECT_X_HTTP_AUTHORIZATION X_HTTP_AUTHORIZATION
|
|
8
|
-
X-HTTP_AUTHORIZATION HTTP_AUTHORIZATION}.
|
|
9
|
-
inject([]) { |d,h| request.env.has_key?(h) ? request.env[h].to_s.split : d }
|
|
10
|
-
return Base64.decode64(d[1]).split(':')[0..1] if d[0] == 'Basic'
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def authenticated?
|
|
15
|
-
username, password = *credentials
|
|
16
|
-
username == Merb::Config[:basic_auth][:username] and password == Merb::Config[:basic_auth][:password]
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def basic_authentication
|
|
20
|
-
if !authenticated?
|
|
21
|
-
throw :halt, :access_denied
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def access_denied
|
|
26
|
-
set_status(401)
|
|
27
|
-
headers['Content-type'] = 'text/plain'
|
|
28
|
-
headers['Status'] = 'Unauthorized'
|
|
29
|
-
headers['WWW-Authenticate'] = "Basic realm=\"#{Merb::Config[:basic_auth][:domain]}\""
|
|
30
|
-
return 'Unauthorized'
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
end
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
module Merb
|
|
2
|
-
# Module that is mixed in to all implemented controllers.
|
|
3
|
-
module ControllerMixin
|
|
4
|
-
|
|
5
|
-
# Renders the block given as a parameter using chunked
|
|
6
|
-
# encoding.
|
|
7
|
-
#
|
|
8
|
-
# ==== Examples
|
|
9
|
-
#
|
|
10
|
-
# def stream
|
|
11
|
-
# prefix = '<p>'
|
|
12
|
-
# suffix = "</p>\r\n"
|
|
13
|
-
# render_chunked do
|
|
14
|
-
# IO.popen("cat /tmp/test.log") do |io|
|
|
15
|
-
# done = false
|
|
16
|
-
# until done
|
|
17
|
-
# sleep 0.3
|
|
18
|
-
# line = io.gets.chomp
|
|
19
|
-
#
|
|
20
|
-
# if line == 'EOF'
|
|
21
|
-
# done = true
|
|
22
|
-
# else
|
|
23
|
-
# send_chunk(prefix + line + suffix)
|
|
24
|
-
# end
|
|
25
|
-
# end
|
|
26
|
-
# end
|
|
27
|
-
# end
|
|
28
|
-
# end
|
|
29
|
-
#
|
|
30
|
-
def render_chunked(&blk)
|
|
31
|
-
headers['Transfer-Encoding'] = 'chunked'
|
|
32
|
-
Proc.new {
|
|
33
|
-
response.send_status_no_connection_close(0)
|
|
34
|
-
response.send_header
|
|
35
|
-
blk.call
|
|
36
|
-
response.write("0\r\n\r\n")
|
|
37
|
-
}
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Returns a +Proc+ that Mongrel can call later, allowing
|
|
41
|
-
# Merb to release the thread lock and render another request.
|
|
42
|
-
#
|
|
43
|
-
def render_deferred(&blk)
|
|
44
|
-
Proc.new {
|
|
45
|
-
result = blk.call
|
|
46
|
-
response.send_status(result.length)
|
|
47
|
-
response.send_header
|
|
48
|
-
response.write(result)
|
|
49
|
-
}
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Writes a chunk from render_chunked to the response that
|
|
53
|
-
# is sent back to the client.
|
|
54
|
-
def send_chunk(data)
|
|
55
|
-
response.write('%x' % data.size + "\r\n")
|
|
56
|
-
response.write(data + "\r\n")
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
# Redirects to a URL. The +url+ parameter can be either
|
|
60
|
-
# a relative URL (e.g., +/posts/34+) or a fully-qualified URL
|
|
61
|
-
# (e.g., +http://www.merbivore.com/+).
|
|
62
|
-
#
|
|
63
|
-
# ==== Parameters
|
|
64
|
-
#
|
|
65
|
-
# +url+ - URL to redirect to; it can be either a relative or
|
|
66
|
-
# fully-qualified URL.
|
|
67
|
-
# +permanent+ - Whether to use permanent redirection.
|
|
68
|
-
#
|
|
69
|
-
def redirect(url, permanent = false)
|
|
70
|
-
status = permanent ? 301 : 302
|
|
71
|
-
Merb.logger.info("Redirecting to: #{url} status: #{status}")
|
|
72
|
-
set_status(status)
|
|
73
|
-
headers['Location'] = url
|
|
74
|
-
"<html><body>You are being <a href=\"#{url}\">redirected</a>.</body></html>"
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# Sends a file over HTTP. When given a path to a file, it will set the
|
|
78
|
-
# right headers so that the static file is served directly.
|
|
79
|
-
#
|
|
80
|
-
# ==== Parameters
|
|
81
|
-
#
|
|
82
|
-
# +file+ - Path to file to send to the client.
|
|
83
|
-
#
|
|
84
|
-
def send_file(file, opts={})
|
|
85
|
-
opts.update(Merb::Const::DEFAULT_SEND_FILE_OPTIONS.merge(opts))
|
|
86
|
-
disposition = opts[:disposition].dup || 'attachment'
|
|
87
|
-
disposition << %(; filename="#{opts[:filename] ? opts[:filename] : File.basename(file)}")
|
|
88
|
-
headers.update(
|
|
89
|
-
'Content-Type' => opts[:type].strip, # fixes a problem with extra '\r' with some browsers
|
|
90
|
-
'Content-Disposition' => disposition,
|
|
91
|
-
'Content-Transfer-Encoding' => 'binary',
|
|
92
|
-
'X-SENDFILE' => file
|
|
93
|
-
)
|
|
94
|
-
return
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
# Streams a file over HTTP.
|
|
98
|
-
#
|
|
99
|
-
# ==== Example
|
|
100
|
-
#
|
|
101
|
-
# stream_file( { :filename => file_name,
|
|
102
|
-
# :type => content_type,
|
|
103
|
-
# :content_length => content_length }) do
|
|
104
|
-
# AWS::S3::S3Object.stream(user.folder_name + "-" + user_file.unique_id, bucket_name) do |chunk|
|
|
105
|
-
# response.write chunk
|
|
106
|
-
# end
|
|
107
|
-
# end
|
|
108
|
-
def stream_file(opts={}, &stream)
|
|
109
|
-
opts.update(Merb::Const::DEFAULT_SEND_FILE_OPTIONS.merge(opts))
|
|
110
|
-
disposition = opts[:disposition].dup || 'attachment'
|
|
111
|
-
disposition << %(; filename="#{opts[:filename]}")
|
|
112
|
-
response.headers.update(
|
|
113
|
-
'Content-Type' => opts[:type].strip, # fixes a problem with extra '\r' with some browsers
|
|
114
|
-
'Content-Disposition' => disposition,
|
|
115
|
-
'Content-Transfer-Encoding' => 'binary',
|
|
116
|
-
'CONTENT-LENGTH' => opts[:content_length]
|
|
117
|
-
)
|
|
118
|
-
response.send_status(opts[:content_length])
|
|
119
|
-
response.send_header
|
|
120
|
-
stream
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
# Uses the nginx specific +X-Accel-Redirect+ header to send
|
|
125
|
-
# a file directly from nginx. For more information, see the nginx wiki:
|
|
126
|
-
# http://wiki.codemongers.com/NginxXSendfile
|
|
127
|
-
#
|
|
128
|
-
# ==== Parameters
|
|
129
|
-
#
|
|
130
|
-
# +file+ - Path to file to send to the client.
|
|
131
|
-
#
|
|
132
|
-
def nginx_send_file(file)
|
|
133
|
-
headers['X-Accel-Redirect'] = File.expand_path(file)
|
|
134
|
-
return
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
# Sets a cookie to be included in the response. This method is used
|
|
138
|
-
# primarily internally in Merb.
|
|
139
|
-
#
|
|
140
|
-
# If you need to set a cookie, then use the +cookies+ hash.
|
|
141
|
-
#
|
|
142
|
-
def set_cookie(name, value, expires)
|
|
143
|
-
(headers['Set-Cookie'] ||=[]) << (Merb::Const::SET_COOKIE % [
|
|
144
|
-
name.to_s,
|
|
145
|
-
escape(value.to_s),
|
|
146
|
-
# Cookie expiration time must be GMT. See RFC 2109
|
|
147
|
-
expires.gmtime.strftime(Merb::Const::COOKIE_EXPIRATION_FORMAT)
|
|
148
|
-
])
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
# Marks a cookie as deleted and gives it an expires stamp in
|
|
152
|
-
# the past. This method is used primarily internally in Merb.
|
|
153
|
-
#
|
|
154
|
-
# Use the +cookies+ hash to manipulate cookies instead.
|
|
155
|
-
#
|
|
156
|
-
def delete_cookie(name)
|
|
157
|
-
set_cookie(name, nil, Merb::Const::COOKIE_EXPIRED_TIME)
|
|
158
|
-
end
|
|
159
|
-
end
|
|
160
|
-
end
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
module Merb
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
module ErubisCaptureMixin
|
|
6
|
-
|
|
7
|
-
# Provides direct acccess to the buffer for this view context
|
|
8
|
-
def _buffer( the_binding )
|
|
9
|
-
@_buffer = eval( "_buf", the_binding )
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
# Capture allows you to extract a part of the template into an
|
|
13
|
-
# instance variable. You can use this instance variable anywhere
|
|
14
|
-
# in your templates and even in your layout.
|
|
15
|
-
#
|
|
16
|
-
# Example of capture being used in a .herb page:
|
|
17
|
-
#
|
|
18
|
-
# <% @foo = capture do %>
|
|
19
|
-
# <p>Some Foo content!</p>
|
|
20
|
-
# <% end %>
|
|
21
|
-
def capture(*args, &block)
|
|
22
|
-
# execute the block
|
|
23
|
-
begin
|
|
24
|
-
buffer = _buffer( block.binding )
|
|
25
|
-
rescue
|
|
26
|
-
buffer = nil
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
if buffer.nil?
|
|
30
|
-
capture_block(*args, &block)
|
|
31
|
-
else
|
|
32
|
-
capture_erb_with_buffer(buffer, *args, &block)
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
private
|
|
37
|
-
def capture_block(*args, &block)
|
|
38
|
-
block.call(*args)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def capture_erb(*args, &block)
|
|
42
|
-
buffer = _buffer
|
|
43
|
-
capture_erb_with_buffer(buffer, *args, &block)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def capture_erb_with_buffer(buffer, *args, &block)
|
|
47
|
-
pos = buffer.length
|
|
48
|
-
block.call(*args)
|
|
49
|
-
|
|
50
|
-
# extract the block
|
|
51
|
-
data = buffer[pos..-1]
|
|
52
|
-
|
|
53
|
-
# replace it in the original with empty string
|
|
54
|
-
buffer[pos..-1] = ''
|
|
55
|
-
|
|
56
|
-
data
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def erb_content_for(name, &block)
|
|
60
|
-
controller.thrown_content[name] << capture_erb( &block )
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def block_content_for(name, &block)
|
|
64
|
-
controller.thrown_content[name] << capture_block( &block )
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
end
|
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
# This module provides helper style functionality to all controllers.
|
|
2
|
-
module Merb
|
|
3
|
-
module GeneralControllerMixin
|
|
4
|
-
include Merb::ControllerExceptions
|
|
5
|
-
|
|
6
|
-
# Returns a URL according to the defined route. Accepts the path and
|
|
7
|
-
# an options hash. The path specifies the route requested. The options
|
|
8
|
-
# hash fills in the dynamic parts of the route.
|
|
9
|
-
#
|
|
10
|
-
# Merb routes can often be one-way; if they use a regex to define
|
|
11
|
-
# the route, then knowing the controller & action won't be enough
|
|
12
|
-
# to reverse-generate the route. However, if you use the default
|
|
13
|
-
# /controller/action/id?query route, +default_route+ can generate
|
|
14
|
-
# it for you.
|
|
15
|
-
#
|
|
16
|
-
# For easy reverse-routes that use a Regex, be sure to also add
|
|
17
|
-
# a name to the route, so +url+ can find it.
|
|
18
|
-
#
|
|
19
|
-
# Nested resources such as:
|
|
20
|
-
#
|
|
21
|
-
# r.resources :blogposts do |post|
|
|
22
|
-
# post.resources :comments
|
|
23
|
-
# end
|
|
24
|
-
#
|
|
25
|
-
# Provide the following routes:
|
|
26
|
-
#
|
|
27
|
-
# [:blogposts, "/blogposts"]
|
|
28
|
-
# [:blogpost, "/blogposts/:id"]
|
|
29
|
-
# [:edit_blogpost, "/blogposts/:id/edit"]
|
|
30
|
-
# [:new_blogpost, "/blogposts/new"]
|
|
31
|
-
# [:custom_new_blogpost, "/blogposts/new/:action"]
|
|
32
|
-
# [:comments, "/blogposts/:blogpost_id/comments"]
|
|
33
|
-
# [:comment, "/blogposts/:blogpost_id/comments/:id"]
|
|
34
|
-
# [:edit_comment, "/blogposts/:blogpost_id/comments/:id/edit"]
|
|
35
|
-
# [:new_comment, "/blogposts/:blogpost_id/comments/new"]
|
|
36
|
-
# [:custom_new_comment, "/blogposts/:blogpost_id/comments/new/:action"]
|
|
37
|
-
#
|
|
38
|
-
#
|
|
39
|
-
# ==== Parameters
|
|
40
|
-
#
|
|
41
|
-
# :route_name: - Symbol that represents a named route that you want to use, such as +:edit_post+.
|
|
42
|
-
# :new_params: - Parameters to be passed to the generated URL, such as the +id+ for a record to edit.
|
|
43
|
-
#
|
|
44
|
-
# ==== Examples
|
|
45
|
-
#
|
|
46
|
-
# @post = Post.find(1)
|
|
47
|
-
# @comment = @post.comments.find(1)
|
|
48
|
-
#
|
|
49
|
-
# url(:blogposts) # => /blogposts
|
|
50
|
-
# url(:new_post) # => /blogposts/new
|
|
51
|
-
# url(:blogpost, @post) # => /blogposts/1
|
|
52
|
-
# url(:edit_blogpost, @post) # => /blogposts/1/edit
|
|
53
|
-
# url(:custom_new_blogpost, :action => 'alternate') # => /blogposts/new/alternate
|
|
54
|
-
#
|
|
55
|
-
# url(:comments, :blogpost_id => @post) # => /blogposts/1/comments
|
|
56
|
-
# url(:new_comment, :blogpost_id => @post) # => /blogposts/1/comments/new
|
|
57
|
-
# url(:comment, @comment) # => /blogposts/1/comments/1
|
|
58
|
-
# url(:edit_comment, @comment) # => /blogposts/1/comments/1/edit
|
|
59
|
-
# url(:custom_new_comment, :blogpost_id => @post)
|
|
60
|
-
#
|
|
61
|
-
# url(:page => 2) # => /posts/show/1?page=2
|
|
62
|
-
# url(:new_post, :page => 3) # => /posts/new?page=3
|
|
63
|
-
# url('/go/here', :page => 3) # => /go/here?page=3
|
|
64
|
-
#
|
|
65
|
-
# url(:controller => "welcome") # => /welcome
|
|
66
|
-
# url(:controller => "welcome", :action => "greet")
|
|
67
|
-
# # => /welcome/greet
|
|
68
|
-
#
|
|
69
|
-
def url(route_name = nil, new_params = {})
|
|
70
|
-
if route_name.is_a?(Hash)
|
|
71
|
-
new_params = route_name
|
|
72
|
-
route_name = nil
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
url = if new_params.respond_to?(:keys) && route_name.nil? &&
|
|
76
|
-
!(new_params.keys & [:controller, :action, :id]).empty?
|
|
77
|
-
url_from_default_route(new_params)
|
|
78
|
-
elsif route_name.nil? && !route.regexp?
|
|
79
|
-
url_from_route(route, new_params)
|
|
80
|
-
elsif route_name.nil?
|
|
81
|
-
request.path + (new_params.empty? ? "" : "?" + params_to_query_string(new_params))
|
|
82
|
-
elsif route_name.is_a?(Symbol)
|
|
83
|
-
url_from_route(route_name, new_params)
|
|
84
|
-
elsif route_name.is_a?(String)
|
|
85
|
-
route_name + (new_params.empty? ? "" : "?" + params_to_query_string(new_params))
|
|
86
|
-
else
|
|
87
|
-
raise "URL not generated: #{route_name.inspect}, #{new_params.inspect}"
|
|
88
|
-
end
|
|
89
|
-
url = Merb::Config[:path_prefix] + url if Merb::Config[:path_prefix]
|
|
90
|
-
url
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def url_from_route(symbol, new_params = {})
|
|
94
|
-
if new_params.respond_to?(:new_record?) && new_params.new_record?
|
|
95
|
-
symbol = "#{symbol}".singularize.to_sym
|
|
96
|
-
new_params = {}
|
|
97
|
-
end
|
|
98
|
-
route = symbol.is_a?(Symbol) ? Merb::Router.named_routes[symbol] : symbol
|
|
99
|
-
unless route
|
|
100
|
-
raise "URL could not be constructed. Route symbol not found: #{symbol.inspect}"
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
path = route.generate(new_params, params)
|
|
104
|
-
keys = route.symbol_segments
|
|
105
|
-
|
|
106
|
-
if new_params.is_a? Hash
|
|
107
|
-
if ext = format_extension(new_params)
|
|
108
|
-
new_params.delete(:format)
|
|
109
|
-
path += "." + ext
|
|
110
|
-
end
|
|
111
|
-
extras = new_params.reject{ |k, v| keys.include?(k) }
|
|
112
|
-
path += "?" + params_to_query_string(extras) unless extras.empty?
|
|
113
|
-
end
|
|
114
|
-
path
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
# this is pretty ugly, but it works. TODO: make this cleaner
|
|
118
|
-
def url_from_default_route(new_params)
|
|
119
|
-
query_params = new_params.reject do |k,v|
|
|
120
|
-
[:controller, :action, :id, :format].include?(k)
|
|
121
|
-
end
|
|
122
|
-
controller = get_controller_for_url_generation(new_params)
|
|
123
|
-
url = "/#{controller}"
|
|
124
|
-
if new_params[:action] || new_params[:id] ||
|
|
125
|
-
new_params[:format] || !query_params.empty?
|
|
126
|
-
action = new_params[:action] || params[:action]
|
|
127
|
-
url += "/#{action}"
|
|
128
|
-
end
|
|
129
|
-
if new_params[:id]
|
|
130
|
-
url += "/#{new_params[:id]}"
|
|
131
|
-
end
|
|
132
|
-
if format = new_params[:format]
|
|
133
|
-
format = params[:format] if format == :current
|
|
134
|
-
url += ".#{format}"
|
|
135
|
-
end
|
|
136
|
-
unless query_params.empty?
|
|
137
|
-
url += "?" + params_to_query_string(query_params)
|
|
138
|
-
end
|
|
139
|
-
url
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
protected
|
|
143
|
-
|
|
144
|
-
# Creates query string from params, supporting nested arrays and hashes.
|
|
145
|
-
# ==== Example
|
|
146
|
-
# params_to_query_string(:user => {:filter => {:name => "quux*"}, :order => ["name"]})
|
|
147
|
-
# # => user[filter][name]=quux%2A&user[order][]=name
|
|
148
|
-
def params_to_query_string(value, prefix = nil)
|
|
149
|
-
case value
|
|
150
|
-
when Array
|
|
151
|
-
value.map { |v|
|
|
152
|
-
params_to_query_string(v, "#{prefix}[]")
|
|
153
|
-
} * "&"
|
|
154
|
-
when Hash
|
|
155
|
-
value.map { |k, v|
|
|
156
|
-
params_to_query_string(v, prefix ? "#{prefix}[#{escape(k)}]" : escape(k))
|
|
157
|
-
} * "&"
|
|
158
|
-
else
|
|
159
|
-
"#{prefix}=#{escape(value)}"
|
|
160
|
-
end
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
# +format_extension+ dictates when named route URLs generated by the url
|
|
164
|
-
# method will have a file extension. It will return either nil or the format
|
|
165
|
-
# extension to append.
|
|
166
|
-
#
|
|
167
|
-
# ==== Configuration Options
|
|
168
|
-
#
|
|
169
|
-
# By default, non-HTML URLs will be given an extension. It is posible
|
|
170
|
-
# to override this behaviour by setting +:use_format_in_urls+ in your
|
|
171
|
-
# Merb config (merb.yml) to either true/false.
|
|
172
|
-
#
|
|
173
|
-
# +true+ Results in all URLs (even HTML) being given extensions.
|
|
174
|
-
# This effect is often desirable when you have many formats and dont
|
|
175
|
-
# wish to treat .html any differently than any other format.
|
|
176
|
-
# +false+ Results in no URLs being given extensions and +format+
|
|
177
|
-
# gets treated just like any other param (default).
|
|
178
|
-
#
|
|
179
|
-
# ==== Method parameters
|
|
180
|
-
#
|
|
181
|
-
# +new_params+ - New parameters to be appended to the URL
|
|
182
|
-
#
|
|
183
|
-
# ==== Examples
|
|
184
|
-
#
|
|
185
|
-
# url(:post, :id => post, :format => 'xml')
|
|
186
|
-
# # => /posts/34.xml
|
|
187
|
-
#
|
|
188
|
-
# url(:accounts, :format => 'yml')
|
|
189
|
-
# # => /accounts.yml
|
|
190
|
-
#
|
|
191
|
-
# url(:edit_product, :id => 3, :format => 'html')
|
|
192
|
-
# # => /products/3
|
|
193
|
-
#
|
|
194
|
-
def format_extension(new_params={})
|
|
195
|
-
format = params.merge(new_params)[:format] || 'html'
|
|
196
|
-
if format != 'html' || always_use_format_extension?
|
|
197
|
-
format || 'html'
|
|
198
|
-
end
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
def always_use_format_extension?
|
|
202
|
-
Merb::Config[:use_format_in_urls]
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
# Creates an MD5 hashed token based on the current time.
|
|
207
|
-
#
|
|
208
|
-
# ==== Example
|
|
209
|
-
# make_token
|
|
210
|
-
# # => "b9a82e011694cc13a4249731b9e83cea"
|
|
211
|
-
#
|
|
212
|
-
def make_token
|
|
213
|
-
require 'digest/md5'
|
|
214
|
-
Digest::MD5.hexdigest("#{inspect}#{Time.now}#{rand}")
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
# Escapes the string representation of +obj+ and escapes
|
|
218
|
-
# it for use in XML.
|
|
219
|
-
#
|
|
220
|
-
# ==== Parameter
|
|
221
|
-
#
|
|
222
|
-
# +obj+ - The object to escape for use in XML.
|
|
223
|
-
#
|
|
224
|
-
def escape_xml(obj)
|
|
225
|
-
obj.to_s.gsub(/[&<>"']/) { |s| Merb::Const::ESCAPE_TABLE[s] }
|
|
226
|
-
end
|
|
227
|
-
alias h escape_xml
|
|
228
|
-
alias html_escape escape_xml
|
|
229
|
-
|
|
230
|
-
def escape(s)
|
|
231
|
-
::Merb::Request.escape(s)
|
|
232
|
-
end
|
|
233
|
-
|
|
234
|
-
# Unescapes a string (i.e., reverse URL escaping).
|
|
235
|
-
#
|
|
236
|
-
# ==== Parameter
|
|
237
|
-
#
|
|
238
|
-
# +s+ - String to unescape.
|
|
239
|
-
#
|
|
240
|
-
def unescape(s)
|
|
241
|
-
::Merb::Request.unescape(s)
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
private
|
|
246
|
-
# Used for sepccing
|
|
247
|
-
def get_controller_for_url_generation(options)
|
|
248
|
-
raise "Controller Not Specified" unless options[:controller]
|
|
249
|
-
options[:controller]
|
|
250
|
-
end
|
|
251
|
-
|
|
252
|
-
end
|
|
253
|
-
end
|