thorero-core 0.9.4.6
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 +20 -0
- data/README +21 -0
- data/Rakefile +352 -0
- data/TODO +0 -0
- data/bin/merb +12 -0
- data/bin/merb-specs +5 -0
- data/docs/bootloading.dox +58 -0
- data/docs/documentation_standards +40 -0
- data/docs/merb-core-call-stack-diagram.mmap +0 -0
- data/docs/merb-core-call-stack-diagram.pdf +0 -0
- data/docs/merb-core-call-stack-diagram.png +0 -0
- data/docs/new_render_api +51 -0
- data/lib/merb-core.rb +603 -0
- data/lib/merb-core/autoload.rb +32 -0
- data/lib/merb-core/bootloader.rb +708 -0
- data/lib/merb-core/config.rb +303 -0
- data/lib/merb-core/constants.rb +43 -0
- data/lib/merb-core/controller/abstract_controller.rb +578 -0
- data/lib/merb-core/controller/exceptions.rb +302 -0
- data/lib/merb-core/controller/merb_controller.rb +256 -0
- data/lib/merb-core/controller/mime.rb +106 -0
- data/lib/merb-core/controller/mixins/authentication.rb +87 -0
- data/lib/merb-core/controller/mixins/controller.rb +290 -0
- data/lib/merb-core/controller/mixins/render.rb +481 -0
- data/lib/merb-core/controller/mixins/responder.rb +472 -0
- data/lib/merb-core/controller/template.rb +254 -0
- data/lib/merb-core/core_ext.rb +8 -0
- data/lib/merb-core/core_ext/kernel.rb +319 -0
- data/lib/merb-core/dispatch/cookies.rb +91 -0
- data/lib/merb-core/dispatch/dispatcher.rb +278 -0
- data/lib/merb-core/dispatch/exceptions.html.erb +303 -0
- data/lib/merb-core/dispatch/request.rb +603 -0
- data/lib/merb-core/dispatch/router.rb +179 -0
- data/lib/merb-core/dispatch/router/behavior.rb +867 -0
- data/lib/merb-core/dispatch/router/cached_proc.rb +52 -0
- data/lib/merb-core/dispatch/router/route.rb +321 -0
- data/lib/merb-core/dispatch/session.rb +78 -0
- data/lib/merb-core/dispatch/session/cookie.rb +168 -0
- data/lib/merb-core/dispatch/session/memcached.rb +184 -0
- data/lib/merb-core/dispatch/session/memory.rb +241 -0
- data/lib/merb-core/dispatch/worker.rb +28 -0
- data/lib/merb-core/gem_ext/erubis.rb +77 -0
- data/lib/merb-core/logger.rb +202 -0
- data/lib/merb-core/plugins.rb +59 -0
- data/lib/merb-core/rack.rb +21 -0
- data/lib/merb-core/rack/adapter.rb +44 -0
- data/lib/merb-core/rack/adapter/ebb.rb +25 -0
- data/lib/merb-core/rack/adapter/evented_mongrel.rb +26 -0
- data/lib/merb-core/rack/adapter/fcgi.rb +17 -0
- data/lib/merb-core/rack/adapter/irb.rb +118 -0
- data/lib/merb-core/rack/adapter/mongrel.rb +26 -0
- data/lib/merb-core/rack/adapter/runner.rb +28 -0
- data/lib/merb-core/rack/adapter/swiftiplied_mongrel.rb +26 -0
- data/lib/merb-core/rack/adapter/thin.rb +39 -0
- data/lib/merb-core/rack/adapter/thin_turbo.rb +24 -0
- data/lib/merb-core/rack/adapter/webrick.rb +36 -0
- data/lib/merb-core/rack/application.rb +18 -0
- data/lib/merb-core/rack/handler/mongrel.rb +97 -0
- data/lib/merb-core/rack/middleware.rb +26 -0
- data/lib/merb-core/rack/middleware/path_prefix.rb +31 -0
- data/lib/merb-core/rack/middleware/profiler.rb +19 -0
- data/lib/merb-core/rack/middleware/static.rb +45 -0
- data/lib/merb-core/server.rb +252 -0
- data/lib/merb-core/tasks/audit.rake +68 -0
- data/lib/merb-core/tasks/merb.rb +1 -0
- data/lib/merb-core/tasks/merb_rake_helper.rb +12 -0
- data/lib/merb-core/test.rb +11 -0
- data/lib/merb-core/test/helpers.rb +9 -0
- data/lib/merb-core/test/helpers/controller_helper.rb +8 -0
- data/lib/merb-core/test/helpers/multipart_request_helper.rb +175 -0
- data/lib/merb-core/test/helpers/request_helper.rb +344 -0
- data/lib/merb-core/test/helpers/route_helper.rb +33 -0
- data/lib/merb-core/test/helpers/view_helper.rb +121 -0
- data/lib/merb-core/test/matchers.rb +9 -0
- data/lib/merb-core/test/matchers/controller_matchers.rb +319 -0
- data/lib/merb-core/test/matchers/route_matchers.rb +136 -0
- data/lib/merb-core/test/matchers/view_matchers.rb +335 -0
- data/lib/merb-core/test/run_specs.rb +47 -0
- data/lib/merb-core/test/tasks/spectasks.rb +68 -0
- data/lib/merb-core/test/test_ext/hpricot.rb +32 -0
- data/lib/merb-core/test/test_ext/object.rb +14 -0
- data/lib/merb-core/test/test_ext/string.rb +14 -0
- data/lib/merb-core/vendor/facets.rb +2 -0
- data/lib/merb-core/vendor/facets/dictionary.rb +433 -0
- data/lib/merb-core/vendor/facets/inflect.rb +345 -0
- data/lib/merb-core/version.rb +11 -0
- data/spec/private/config/adapter_spec.rb +32 -0
- data/spec/private/config/config_spec.rb +202 -0
- data/spec/private/config/environment_spec.rb +13 -0
- data/spec/private/config/spec_helper.rb +1 -0
- data/spec/private/core_ext/kernel_spec.rb +169 -0
- data/spec/private/dispatch/bootloader_spec.rb +24 -0
- data/spec/private/dispatch/cookies_spec.rb +107 -0
- data/spec/private/dispatch/dispatch_spec.rb +35 -0
- data/spec/private/dispatch/fixture/app/controllers/application.rb +4 -0
- data/spec/private/dispatch/fixture/app/controllers/exceptions.rb +27 -0
- data/spec/private/dispatch/fixture/app/controllers/foo.rb +21 -0
- data/spec/private/dispatch/fixture/app/helpers/global_helpers.rb +8 -0
- data/spec/private/dispatch/fixture/app/views/exeptions/client_error.html.erb +37 -0
- data/spec/private/dispatch/fixture/app/views/exeptions/internal_server_error.html.erb +216 -0
- data/spec/private/dispatch/fixture/app/views/exeptions/not_acceptable.html.erb +38 -0
- data/spec/private/dispatch/fixture/app/views/exeptions/not_found.html.erb +40 -0
- data/spec/private/dispatch/fixture/app/views/foo/bar.html.erb +0 -0
- data/spec/private/dispatch/fixture/app/views/layout/application.html.erb +11 -0
- data/spec/private/dispatch/fixture/config/black_hole.rb +12 -0
- data/spec/private/dispatch/fixture/config/environments/development.rb +6 -0
- data/spec/private/dispatch/fixture/config/environments/production.rb +5 -0
- data/spec/private/dispatch/fixture/config/environments/test.rb +6 -0
- data/spec/private/dispatch/fixture/config/init.rb +45 -0
- data/spec/private/dispatch/fixture/config/rack.rb +11 -0
- data/spec/private/dispatch/fixture/config/router.rb +35 -0
- data/spec/private/dispatch/fixture/log/merb_test.log +1874 -0
- data/spec/private/dispatch/fixture/public/images/merb.jpg +0 -0
- data/spec/private/dispatch/fixture/public/merb.fcgi +4 -0
- data/spec/private/dispatch/fixture/public/stylesheets/master.css +119 -0
- data/spec/private/dispatch/route_params_spec.rb +24 -0
- data/spec/private/dispatch/session_mixin_spec.rb +47 -0
- data/spec/private/dispatch/spec_helper.rb +1 -0
- data/spec/private/plugins/plugin_spec.rb +166 -0
- data/spec/private/rack/application_spec.rb +49 -0
- data/spec/private/router/behavior_spec.rb +60 -0
- data/spec/private/router/fixture/log/merb_test.log +139 -0
- data/spec/private/router/route_spec.rb +414 -0
- data/spec/private/router/router_spec.rb +175 -0
- data/spec/private/vendor/facets/plural_spec.rb +564 -0
- data/spec/private/vendor/facets/singular_spec.rb +489 -0
- data/spec/public/DEFINITIONS +11 -0
- data/spec/public/abstract_controller/controllers/alt_views/layout/application.erb +1 -0
- data/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_string_controller_layout.erb +1 -0
- data/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_template_controller_layout.erb +1 -0
- data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/show.erb +1 -0
- data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/alt_views/partial/basic_partial_with_multiple_roots/_partial.erb +1 -0
- data/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_and_custom_location/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_inherited/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/cousins.rb +41 -0
- data/spec/public/abstract_controller/controllers/display.rb +54 -0
- data/spec/public/abstract_controller/controllers/filters.rb +193 -0
- data/spec/public/abstract_controller/controllers/helpers.rb +41 -0
- data/spec/public/abstract_controller/controllers/partial.rb +121 -0
- data/spec/public/abstract_controller/controllers/render.rb +113 -0
- data/spec/public/abstract_controller/controllers/views/helpers/capture/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/helpers/capture_eq/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/helpers/capture_with_args/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/helpers/concat/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/layout/alt.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/layout/custom.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object_with_action/new.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_app_layout/index.erb +0 -0
- data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_custom_layout/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/show.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_two_throw_contents/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/another_directory/_partial.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/basic_partial/_partial.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/basic_partial/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/basic_partial_with_multiple_roots/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/nested_partial/_first.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/nested_partial/_second.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/nested_partial/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_in_another_directory/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_both/_collection.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_both/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/_collection.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/_collection.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/_collection.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/_variables.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/_both.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/_partial.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/with_as_partial/_with_partial.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/with_as_partial/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/_with_partial.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/with_partial/_with_partial.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/with_partial/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/test_display/foo.html.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/test_render/foo.html.erb +0 -0
- data/spec/public/abstract_controller/controllers/views/wonderful/index.erb +1 -0
- data/spec/public/abstract_controller/display_spec.rb +33 -0
- data/spec/public/abstract_controller/filter_spec.rb +106 -0
- data/spec/public/abstract_controller/helper_spec.rb +21 -0
- data/spec/public/abstract_controller/partial_spec.rb +61 -0
- data/spec/public/abstract_controller/render_spec.rb +90 -0
- data/spec/public/abstract_controller/spec_helper.rb +31 -0
- data/spec/public/boot_loader/boot_loader_spec.rb +33 -0
- data/spec/public/boot_loader/spec_helper.rb +1 -0
- data/spec/public/controller/authentication_spec.rb +103 -0
- data/spec/public/controller/base_spec.rb +36 -0
- data/spec/public/controller/controllers/authentication.rb +45 -0
- data/spec/public/controller/controllers/base.rb +36 -0
- data/spec/public/controller/controllers/display.rb +118 -0
- data/spec/public/controller/controllers/redirect.rb +30 -0
- data/spec/public/controller/controllers/responder.rb +93 -0
- data/spec/public/controller/controllers/url.rb +7 -0
- data/spec/public/controller/controllers/views/layout/custom.html.erb +1 -0
- data/spec/public/controller/controllers/views/layout/custom_arg.html.erb +1 -0
- data/spec/public/controller/controllers/views/layout/custom_arg.json.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.xml.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.xml.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/index.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/no_layout.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template_argument/index.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/html_default/index.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/layout/custom.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.xml.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.js.erb +1 -0
- data/spec/public/controller/display_spec.rb +84 -0
- data/spec/public/controller/redirect_spec.rb +27 -0
- data/spec/public/controller/responder_spec.rb +163 -0
- data/spec/public/controller/spec_helper.rb +11 -0
- data/spec/public/controller/url_spec.rb +180 -0
- data/spec/public/core/merb_core_spec.rb +45 -0
- data/spec/public/core_ext/class_spec.rb +91 -0
- data/spec/public/core_ext/fixtures/core_ext_dependency.rb +2 -0
- data/spec/public/core_ext/kernel_spec.rb +9 -0
- data/spec/public/core_ext/spec_helper.rb +1 -0
- data/spec/public/directory_structure/directory/app/controllers/application.rb +3 -0
- data/spec/public/directory_structure/directory/app/controllers/base.rb +13 -0
- data/spec/public/directory_structure/directory/app/controllers/custom.rb +19 -0
- data/spec/public/directory_structure/directory/app/views/base/template.html.erb +1 -0
- data/spec/public/directory_structure/directory/app/views/wonderful/template.erb +1 -0
- data/spec/public/directory_structure/directory/config/router.rb +3 -0
- data/spec/public/directory_structure/directory/log/merb_test.log +562 -0
- data/spec/public/directory_structure/directory_spec.rb +44 -0
- data/spec/public/logger/logger_spec.rb +181 -0
- data/spec/public/logger/spec_helper.rb +1 -0
- data/spec/public/reloading/directory/app/controllers/application.rb +3 -0
- data/spec/public/reloading/directory/app/controllers/reload.rb +6 -0
- data/spec/public/reloading/directory/config/init.rb +2 -0
- data/spec/public/reloading/directory/log/merb_test.log +138 -0
- data/spec/public/reloading/reload_spec.rb +103 -0
- data/spec/public/request/multipart_spec.rb +41 -0
- data/spec/public/request/request_spec.rb +228 -0
- data/spec/public/router/default_spec.rb +21 -0
- data/spec/public/router/deferred_spec.rb +22 -0
- data/spec/public/router/fixation_spec.rb +27 -0
- data/spec/public/router/fixture/log/merb_test.log +1556 -0
- data/spec/public/router/namespace_spec.rb +113 -0
- data/spec/public/router/nested_matches_spec.rb +97 -0
- data/spec/public/router/nested_resources_spec.rb +41 -0
- data/spec/public/router/resource_spec.rb +37 -0
- data/spec/public/router/resources_spec.rb +82 -0
- data/spec/public/router/spec_helper.rb +90 -0
- data/spec/public/router/special_spec.rb +61 -0
- data/spec/public/router/string_spec.rb +61 -0
- data/spec/public/template/template_spec.rb +104 -0
- data/spec/public/template/templates/error.html.erb +2 -0
- data/spec/public/template/templates/template.html.erb +1 -0
- data/spec/public/template/templates/template.html.myt +1 -0
- data/spec/public/test/controller_matchers_spec.rb +402 -0
- data/spec/public/test/controllers/controller_assertion_mock.rb +7 -0
- data/spec/public/test/controllers/dispatch_controller.rb +11 -0
- data/spec/public/test/controllers/spec_helper_controller.rb +38 -0
- data/spec/public/test/multipart_request_helper_spec.rb +159 -0
- data/spec/public/test/multipart_upload_text_file.txt +1 -0
- data/spec/public/test/request_helper_spec.rb +221 -0
- data/spec/public/test/route_helper_spec.rb +71 -0
- data/spec/public/test/route_matchers_spec.rb +162 -0
- data/spec/public/test/view_helper_spec.rb +96 -0
- data/spec/public/test/view_matchers_spec.rb +183 -0
- data/spec/spec_helper.rb +68 -0
- metadata +542 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'swiftcore/evented_mongrel'
|
|
2
|
+
require 'merb-core/rack/handler/mongrel'
|
|
3
|
+
module Merb
|
|
4
|
+
module Rack
|
|
5
|
+
|
|
6
|
+
class EventedMongrel < Mongrel
|
|
7
|
+
# Starts Mongrel as evented.
|
|
8
|
+
#
|
|
9
|
+
# ==== Parameters
|
|
10
|
+
# opts<Hash>:: Options for Mongrel (see below).
|
|
11
|
+
#
|
|
12
|
+
# ==== Options (opts)
|
|
13
|
+
# :host<String>:: The hostname that Mongrel should serve.
|
|
14
|
+
# :port<Fixnum>:: The port Mongrel should bind to.
|
|
15
|
+
# :app<String>>:: The application name.
|
|
16
|
+
def self.start(opts={})
|
|
17
|
+
Merb.logger.warn!("Using EventedMongrel adapter")
|
|
18
|
+
Merb::Dispatcher.use_mutex = false
|
|
19
|
+
server = ::Mongrel::HttpServer.new(opts[:host], opts[:port].to_i)
|
|
20
|
+
Merb::Server.change_privilege
|
|
21
|
+
server.register('/', ::Merb::Rack::Handler::Mongrel.new(opts[:app]))
|
|
22
|
+
server.run.join
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Merb
|
|
2
|
+
module Rack
|
|
3
|
+
|
|
4
|
+
class FastCGI
|
|
5
|
+
# ==== Parameters
|
|
6
|
+
# opts<Hash>:: Options for FastCGI (see below).
|
|
7
|
+
#
|
|
8
|
+
# ==== Options (opts)
|
|
9
|
+
# :app<String>>:: The application name.
|
|
10
|
+
def self.start(opts={})
|
|
11
|
+
Merb.logger.warn!("Using FastCGI adapter")
|
|
12
|
+
Merb::Server.change_privilege
|
|
13
|
+
::Rack::Handler::FastCGI.run(opts[:app], opts)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
module Merb
|
|
2
|
+
module Rack
|
|
3
|
+
class Console
|
|
4
|
+
# ==== Parameters
|
|
5
|
+
# name<~to_sym, Hash>:: The name of the route to generate.
|
|
6
|
+
# params<Hash>:: The params to use in the route generation.
|
|
7
|
+
#
|
|
8
|
+
# ==== Returns
|
|
9
|
+
# String:: The generated URL.
|
|
10
|
+
#
|
|
11
|
+
# ==== Alternatives
|
|
12
|
+
# If name is a hash, it will be merged with params.
|
|
13
|
+
def url(name, params={})
|
|
14
|
+
Merb::Router.generate(name, params)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Reloads classes using Merb::BootLoader::ReloadClasses.
|
|
18
|
+
def reload!
|
|
19
|
+
Merb::BootLoader::ReloadClasses.reload
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Prints all routes for the application.
|
|
23
|
+
def show_routes
|
|
24
|
+
seen = []
|
|
25
|
+
unless Merb::Router.named_routes.empty?
|
|
26
|
+
puts "==== Named routes"
|
|
27
|
+
Merb::Router.named_routes.each do |name,route|
|
|
28
|
+
# something weird happens when you combine sprintf and irb
|
|
29
|
+
puts "Helper : #{name}"
|
|
30
|
+
meth = $1.upcase if route.conditions[:method].to_s =~ /(get|post|put|delete)/
|
|
31
|
+
puts "HTTP method: #{meth || 'GET'}"
|
|
32
|
+
puts "Route : #{route}"
|
|
33
|
+
puts "Params : #{route.params.inspect}"
|
|
34
|
+
puts
|
|
35
|
+
seen << route
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
puts "==== Anonymous routes"
|
|
39
|
+
(Merb::Router.routes - seen).each do |route|
|
|
40
|
+
meth = $1.upcase if route.conditions[:method].to_s =~ /(get|post|put|delete)/
|
|
41
|
+
puts "HTTP method: #{meth || 'GET'}"
|
|
42
|
+
puts "Route : #{route}"
|
|
43
|
+
puts "Params : #{route.params.inspect}"
|
|
44
|
+
puts
|
|
45
|
+
end
|
|
46
|
+
nil
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Starts a sandboxed session (delegates to any Merb::Orms::* modules).
|
|
50
|
+
#
|
|
51
|
+
# An ORM should implement Merb::Orms::MyOrm#open_sandbox! to support this.
|
|
52
|
+
# Usually this involves starting a transaction.
|
|
53
|
+
def open_sandbox!
|
|
54
|
+
puts "Loading #{Merb.environment} environment in sandbox (Merb #{Merb::VERSION})"
|
|
55
|
+
puts "Any modifications you make will be rolled back on exit"
|
|
56
|
+
orm_modules.each { |orm| orm.open_sandbox! if orm.respond_to?(:open_sandbox!) }
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Ends a sandboxed session (delegates to any Merb::Orms::* modules).
|
|
60
|
+
#
|
|
61
|
+
# An ORM should implement Merb::Orms::MyOrm#close_sandbox! to support this.
|
|
62
|
+
# Usually this involves rolling back a transaction.
|
|
63
|
+
def close_sandbox!
|
|
64
|
+
orm_modules.each { |orm| orm.close_sandbox! if orm.respond_to?(:close_sandbox!) }
|
|
65
|
+
puts "Modifications have been rolled back"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Explictly show logger output during IRB session
|
|
69
|
+
def trace_log!
|
|
70
|
+
Merb.logger.auto_flush = true
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
private
|
|
74
|
+
|
|
75
|
+
# ==== Returns
|
|
76
|
+
# Array:: All Merb::Orms::* modules.
|
|
77
|
+
def orm_modules
|
|
78
|
+
if Merb.const_defined?('Orms')
|
|
79
|
+
Merb::Orms.constants.map { |c| Merb::Orms::const_get(c) }
|
|
80
|
+
else
|
|
81
|
+
[]
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
class Irb
|
|
88
|
+
# ==== Parameters
|
|
89
|
+
# opts<Hash>:
|
|
90
|
+
# Options for IRB. Currently this is not used by the IRB adapter.
|
|
91
|
+
#
|
|
92
|
+
# ==== Notes
|
|
93
|
+
# If the +.irbrc+ file exists, it will be loaded into the IRBRC
|
|
94
|
+
# environment variable.
|
|
95
|
+
def self.start(opts={})
|
|
96
|
+
m = Merb::Rack::Console.new
|
|
97
|
+
m.extend Merb::Test::RequestHelper
|
|
98
|
+
Object.send(:define_method, :merb) { m }
|
|
99
|
+
ARGV.clear # Avoid passing args to IRB
|
|
100
|
+
m.open_sandbox! if sandboxed?
|
|
101
|
+
require 'irb'
|
|
102
|
+
require 'irb/completion'
|
|
103
|
+
if File.exists? ".irbrc"
|
|
104
|
+
ENV['IRBRC'] = ".irbrc"
|
|
105
|
+
end
|
|
106
|
+
IRB.start
|
|
107
|
+
at_exit do merb.close_sandbox! if sandboxed? end
|
|
108
|
+
exit
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
private
|
|
112
|
+
|
|
113
|
+
def self.sandboxed?
|
|
114
|
+
Merb::Config[:sandbox]
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'mongrel'
|
|
2
|
+
require 'merb-core/rack/handler/mongrel'
|
|
3
|
+
module Merb
|
|
4
|
+
|
|
5
|
+
module Rack
|
|
6
|
+
|
|
7
|
+
class Mongrel
|
|
8
|
+
# start server on given host and port.
|
|
9
|
+
|
|
10
|
+
# ==== Parameters
|
|
11
|
+
# opts<Hash>:: Options for Mongrel (see below).
|
|
12
|
+
#
|
|
13
|
+
# ==== Options (opts)
|
|
14
|
+
# :host<String>:: The hostname that Mongrel should serve.
|
|
15
|
+
# :port<Fixnum>:: The port Mongrel should bind to.
|
|
16
|
+
# :app<String>>:: The application name.
|
|
17
|
+
def self.start(opts={})
|
|
18
|
+
Merb.logger.warn!("Using Mongrel adapter")
|
|
19
|
+
server = ::Mongrel::HttpServer.new(opts[:host], opts[:port].to_i)
|
|
20
|
+
Merb::Server.change_privilege
|
|
21
|
+
server.register('/', ::Merb::Rack::Handler::Mongrel.new(opts[:app]))
|
|
22
|
+
server.run.join
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Merb
|
|
2
|
+
|
|
3
|
+
module Rack
|
|
4
|
+
|
|
5
|
+
class Runner
|
|
6
|
+
# ==== Parameters
|
|
7
|
+
# opts<Hash>:: Options for the runner (see below).
|
|
8
|
+
#
|
|
9
|
+
# ==== Options (opts)
|
|
10
|
+
# :runner_code<String>:: The code to run.
|
|
11
|
+
#
|
|
12
|
+
# ==== Notes
|
|
13
|
+
# If opts[:runner_code] matches a filename, that file will be read and
|
|
14
|
+
# the contents executed. Otherwise the code will be executed directly.
|
|
15
|
+
def self.start(opts={})
|
|
16
|
+
Merb::Server.change_privilege
|
|
17
|
+
if opts[:runner_code]
|
|
18
|
+
if File.exists?(opts[:runner_code])
|
|
19
|
+
eval(File.read(opts[:runner_code]), TOPLEVEL_BINDING, __FILE__, __LINE__)
|
|
20
|
+
else
|
|
21
|
+
eval(opts[:runner_code], TOPLEVEL_BINDING, __FILE__, __LINE__)
|
|
22
|
+
end
|
|
23
|
+
exit
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'swiftcore/swiftiplied_mongrel'
|
|
2
|
+
require 'merb-core/rack/handler/mongrel'
|
|
3
|
+
module Merb
|
|
4
|
+
module Rack
|
|
5
|
+
|
|
6
|
+
class SwiftipliedMongrel < Mongrel
|
|
7
|
+
# Starts Mongrel as swift.
|
|
8
|
+
#
|
|
9
|
+
# ==== Parameters
|
|
10
|
+
# opts<Hash>:: Options for Mongrel (see below).
|
|
11
|
+
#
|
|
12
|
+
# ==== Options (opts)
|
|
13
|
+
# :host<String>:: The hostname that Mongrel should serve.
|
|
14
|
+
# :port<Fixnum>:: The port Mongrel should bind to.
|
|
15
|
+
# :app<String>>:: The application name.
|
|
16
|
+
def self.start(opts={})
|
|
17
|
+
Merb.logger.warn!("Using SwiftipliedMongrel adapter")
|
|
18
|
+
Merb::Dispatcher.use_mutex = false
|
|
19
|
+
server = ::Mongrel::HttpServer.new(opts[:host], opts[:port].to_i)
|
|
20
|
+
Merb::Server.change_privilege
|
|
21
|
+
server.register('/', ::Merb::Rack::Handler::Mongrel.new(opts[:app]))
|
|
22
|
+
server.run.join
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require "thin"
|
|
2
|
+
|
|
3
|
+
module Merb
|
|
4
|
+
|
|
5
|
+
module Rack
|
|
6
|
+
|
|
7
|
+
class Thin
|
|
8
|
+
# start a Thin server on given host and port.
|
|
9
|
+
|
|
10
|
+
# ==== Parameters
|
|
11
|
+
# opts<Hash>:: Options for Thin (see below).
|
|
12
|
+
#
|
|
13
|
+
# ==== Options (opts)
|
|
14
|
+
# :host<String>:: The hostname that Thin should serve.
|
|
15
|
+
# :port<Fixnum>:: The port Thin should bind to.
|
|
16
|
+
# :socket<Fixnum>>:: The socket number that thin should bind to.
|
|
17
|
+
# :socket_file<String>>:: The socket file that thin should attach to.
|
|
18
|
+
# :app<String>>:: The application name.
|
|
19
|
+
def self.start(opts={})
|
|
20
|
+
Merb::Dispatcher.use_mutex = false
|
|
21
|
+
if opts[:socket] || opts[:socket_file]
|
|
22
|
+
socket = opts[:socket] || "0"
|
|
23
|
+
socket_file = opts[:socket_file] || "#{Merb.root}/log/merb.#{socket}.sock"
|
|
24
|
+
Merb.logger.warn!("Using Thin adapter with socket file #{socket_file}.")
|
|
25
|
+
server = ::Thin::Server.new(socket_file, opts[:app], opts)
|
|
26
|
+
else
|
|
27
|
+
Merb.logger.warn!("Using Thin adapter on host #{opts[:host]} and port #{opts[:port]}.")
|
|
28
|
+
if opts[:host].include?('/')
|
|
29
|
+
opts[:host] = "#{opts[:host]}-#{opts[:port]}"
|
|
30
|
+
end
|
|
31
|
+
server = ::Thin::Server.new(opts[:host], opts[:port].to_i, opts[:app], opts)
|
|
32
|
+
end
|
|
33
|
+
Merb::Server.change_privilege
|
|
34
|
+
::Thin::Logging.silent = true
|
|
35
|
+
server.start
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require "thin-turbo"
|
|
2
|
+
|
|
3
|
+
module Merb
|
|
4
|
+
|
|
5
|
+
module Rack
|
|
6
|
+
|
|
7
|
+
class ThinTurbo < Thin
|
|
8
|
+
# start a Thin Turbo server on given host and port.
|
|
9
|
+
|
|
10
|
+
# ==== Parameters
|
|
11
|
+
# opts<Hash>:: Options for Thin Turbo (see below).
|
|
12
|
+
#
|
|
13
|
+
# ==== Options (opts)
|
|
14
|
+
# :host<String>:: The hostname that Thin Turbo should serve.
|
|
15
|
+
# :port<Fixnum>:: The port Thin Turbo should bind to.
|
|
16
|
+
# :socket<Fixnum>>:: The socket number that thin should bind to.
|
|
17
|
+
# :socket_file<String>>:: The socket file that thin should attach to.
|
|
18
|
+
# :app<String>>:: The application name.
|
|
19
|
+
def self.start(opts={})
|
|
20
|
+
super(opts.merge(:backend => ::Thin::Backends::Turbo))
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'webrick'
|
|
2
|
+
require 'rack/handler/webrick'
|
|
3
|
+
module Merb
|
|
4
|
+
module Rack
|
|
5
|
+
|
|
6
|
+
class WEBrick
|
|
7
|
+
# start WEBrick server on given host and port.
|
|
8
|
+
|
|
9
|
+
# ==== Parameters
|
|
10
|
+
# opts<Hash>:: Options for WEBrick (see below).
|
|
11
|
+
#
|
|
12
|
+
# ==== Options (opts)
|
|
13
|
+
# :host<String>:: The hostname that WEBrick should serve.
|
|
14
|
+
# :port<Fixnum>:: The port WEBrick should bind to.
|
|
15
|
+
# :app<String>>:: The application name.
|
|
16
|
+
def self.start(opts={})
|
|
17
|
+
Merb.logger.warn!("Using Webrick adapter")
|
|
18
|
+
|
|
19
|
+
options = {
|
|
20
|
+
:Port => opts[:port],
|
|
21
|
+
:BindAddress => opts[:host],
|
|
22
|
+
:Logger => Merb.logger,
|
|
23
|
+
:AccessLog => [
|
|
24
|
+
[Merb.logger, ::WEBrick::AccessLog::COMMON_LOG_FORMAT],
|
|
25
|
+
[Merb.logger, ::WEBrick::AccessLog::REFERER_LOG_FORMAT]
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
server = ::WEBrick::HTTPServer.new(options)
|
|
30
|
+
Merb::Server.change_privilege
|
|
31
|
+
server.mount("/", ::Rack::Handler::WEBrick, opts[:app])
|
|
32
|
+
server.start
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Merb
|
|
2
|
+
module Rack
|
|
3
|
+
class Application
|
|
4
|
+
|
|
5
|
+
def call(env)
|
|
6
|
+
begin
|
|
7
|
+
controller = ::Merb::Dispatcher.handle(env)
|
|
8
|
+
rescue Object => e
|
|
9
|
+
return [500, {"Content-Type"=>"text/html"}, e.message + "<br/>" + e.backtrace.join("<br/>")]
|
|
10
|
+
end
|
|
11
|
+
Merb.logger.info "\n\n"
|
|
12
|
+
Merb.logger.flush
|
|
13
|
+
[controller.status, controller.headers, controller.body]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
require 'stringio'
|
|
2
|
+
class Mongrel::HttpResponse
|
|
3
|
+
NO_CLOSE_STATUS_FORMAT = "HTTP/1.1 %d %s\r\n".freeze
|
|
4
|
+
|
|
5
|
+
# Sends the status to the client without closing the connection.
|
|
6
|
+
#
|
|
7
|
+
# ==== Parameters
|
|
8
|
+
# content_length<Fixnum>:: The length of the content. Defaults to body length.
|
|
9
|
+
def send_status_no_connection_close(content_length=@body.length)
|
|
10
|
+
unless @status_sent
|
|
11
|
+
write(NO_CLOSE_STATUS_FORMAT % [@status, Mongrel::HTTP_STATUS_CODES[@status]])
|
|
12
|
+
@status_sent = true
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
module Merb
|
|
18
|
+
module Rack
|
|
19
|
+
module Handler
|
|
20
|
+
class Mongrel < ::Mongrel::HttpHandler
|
|
21
|
+
# Runs the server and yields it to a block.
|
|
22
|
+
#
|
|
23
|
+
# ==== Parameters
|
|
24
|
+
# app<Merb::Rack::Application>:: The app that Mongrel should handle.
|
|
25
|
+
# options<Hash>:: Options to pass to Mongrel (see below).
|
|
26
|
+
#
|
|
27
|
+
# ==== Block parameters
|
|
28
|
+
# server<Mongrel::HttpServer>:: The server to run.
|
|
29
|
+
#
|
|
30
|
+
# ==== Options (options)
|
|
31
|
+
# :Host<String>::
|
|
32
|
+
# The hostname on which the app should run. Defaults to "0.0.0.0"
|
|
33
|
+
# :Port<Fixnum>:: The port for the app. Defaults to 8080.
|
|
34
|
+
def self.run(app, options={})
|
|
35
|
+
server = ::Mongrel::HttpServer.new(options[:Host] || '0.0.0.0',
|
|
36
|
+
options[:Port] || 8080)
|
|
37
|
+
server.register('/', ::Merb::Rack::Handler::Mongrel.new(app))
|
|
38
|
+
yield server if block_given?
|
|
39
|
+
server.run.join
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# ==== Parameters
|
|
43
|
+
# app<Merb::Rack::Application>:: The app that Mongrel should handle.
|
|
44
|
+
def initialize(app)
|
|
45
|
+
@app = app
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# ==== Parameters
|
|
49
|
+
# request<Merb::Request>:: The HTTP request to handle.
|
|
50
|
+
# response<HTTPResponse>:: The response object to write response to.
|
|
51
|
+
def process(request, response)
|
|
52
|
+
env = {}.replace(request.params)
|
|
53
|
+
env.delete "HTTP_CONTENT_TYPE"
|
|
54
|
+
env.delete "HTTP_CONTENT_LENGTH"
|
|
55
|
+
|
|
56
|
+
env["SCRIPT_NAME"] = "" if env["SCRIPT_NAME"] == "/"
|
|
57
|
+
|
|
58
|
+
env.update({"rack.version" => [0,1],
|
|
59
|
+
"rack.input" => request.body || StringIO.new(""),
|
|
60
|
+
"rack.errors" => STDERR,
|
|
61
|
+
|
|
62
|
+
"rack.multithread" => true,
|
|
63
|
+
"rack.multiprocess" => false, # ???
|
|
64
|
+
"rack.run_once" => false,
|
|
65
|
+
|
|
66
|
+
"rack.url_scheme" => "http",
|
|
67
|
+
"rack.streaming" => true
|
|
68
|
+
})
|
|
69
|
+
env["QUERY_STRING"] ||= ""
|
|
70
|
+
env.delete "PATH_INFO" if env["PATH_INFO"] == ""
|
|
71
|
+
|
|
72
|
+
status, headers, body = @app.call(env)
|
|
73
|
+
|
|
74
|
+
begin
|
|
75
|
+
response.status = status.to_i
|
|
76
|
+
headers.each { |k, vs|
|
|
77
|
+
vs.each { |v|
|
|
78
|
+
response.header[k] = v
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if Proc === body
|
|
83
|
+
body.call(response)
|
|
84
|
+
else
|
|
85
|
+
body.each { |part|
|
|
86
|
+
response.body << part
|
|
87
|
+
}
|
|
88
|
+
end
|
|
89
|
+
response.finished
|
|
90
|
+
ensure
|
|
91
|
+
body.close if body.respond_to? :close
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|