aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-01-17 12:41:55 +0100
committerJosé Valim <jose.valim@gmail.com>2010-01-17 12:43:17 +0100
commit27d9836ad3519d57462b86a4e539c1aa176b6d95 (patch)
tree8a228e43b44285ab7fd3a63d8908fbe4469d3a1e /actionpack/lib/action_dispatch
parent61ada28ed3cdc42efa6f9714e909231959b88c26 (diff)
downloadrails-27d9836ad3519d57462b86a4e539c1aa176b6d95.tar.gz
rails-27d9836ad3519d57462b86a4e539c1aa176b6d95.tar.bz2
rails-27d9836ad3519d57462b86a4e539c1aa176b6d95.zip
Add ActionDispatch::Railties::Subscriber and finish tidying up the logging.
Diffstat (limited to 'actionpack/lib/action_dispatch')
-rw-r--r--actionpack/lib/action_dispatch/railtie.rb58
-rw-r--r--actionpack/lib/action_dispatch/railties/subscriber.rb17
2 files changed, 75 insertions, 0 deletions
diff --git a/actionpack/lib/action_dispatch/railtie.rb b/actionpack/lib/action_dispatch/railtie.rb
new file mode 100644
index 0000000000..9fd034cdd2
--- /dev/null
+++ b/actionpack/lib/action_dispatch/railtie.rb
@@ -0,0 +1,58 @@
+require "action_dispatch"
+require "rails"
+
+module ActionDispatch
+ class Railtie < Rails::Railtie
+ plugin_name :action_dispatch
+
+ require "action_dispatch/railties/subscriber"
+ subscriber ActionDispatch::Railties::Subscriber.new
+
+ class MetalMiddlewareBuilder
+ def initialize(metals)
+ @metals = metals
+ end
+
+ def new(app)
+ ActionDispatch::Cascade.new(@metals, app)
+ end
+
+ def name
+ ActionDispatch::Cascade.name
+ end
+ alias_method :to_s, :name
+ end
+
+ initializer "action_dispatch.initialize_metal" do |app|
+ metal_root = "#{Rails.root}/app/metal"
+ load_list = app.config.metals || Dir["#{metal_root}/**/*.rb"]
+
+ metals = load_list.map { |metal|
+ metal = File.basename(metal.gsub("#{metal_root}/", ''), '.rb')
+ require_dependency metal
+ metal.camelize.constantize
+ }.compact
+
+ middleware = MetalMiddlewareBuilder.new(metals)
+ app.config.middleware.insert_before(:"ActionDispatch::ParamsParser", middleware)
+ end
+
+ # Prepare dispatcher callbacks and run 'prepare' callbacks
+ initializer "action_dispatch.prepare_dispatcher" do |app|
+ # TODO: This used to say unless defined?(Dispatcher). Find out why and fix.
+ require 'rails/dispatcher'
+
+ unless app.config.cache_classes
+ # Setup dev mode route reloading
+ routes_last_modified = app.routes_changed_at
+ reload_routes = lambda do
+ unless app.routes_changed_at == routes_last_modified
+ routes_last_modified = app.routes_changed_at
+ app.reload_routes!
+ end
+ end
+ ActionDispatch::Callbacks.before { |callbacks| reload_routes.call }
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/actionpack/lib/action_dispatch/railties/subscriber.rb b/actionpack/lib/action_dispatch/railties/subscriber.rb
new file mode 100644
index 0000000000..c08a844c6a
--- /dev/null
+++ b/actionpack/lib/action_dispatch/railties/subscriber.rb
@@ -0,0 +1,17 @@
+module ActionDispatch
+ module Railties
+ class Subscriber < Rails::Subscriber
+ def before_dispatch(event)
+ request = Request.new(event.payload[:env])
+ path = request.request_uri.inspect rescue "unknown"
+
+ info "\n\nProcessing #{path} to #{request.formats.join(', ')} " <<
+ "(for #{request.remote_ip} at #{event.time.to_s(:db)}) [#{request.method.to_s.upcase}]"
+ end
+
+ def logger
+ ActionController::Base.logger
+ end
+ end
+ end
+end \ No newline at end of file