aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib
diff options
context:
space:
mode:
authorMatthew Rudy Jacobs <matthewrudyjacobs@gmail.com>2009-02-22 19:23:04 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2009-02-27 14:37:11 +0100
commit319106d09c0ec2daf8b5345f525f1c97b6368ce2 (patch)
tree55bbda458e3428bffcad2fa591f02c2ba961fbff /railties/lib
parent6de83562f91028629bd24447aa521bc72ef8277a (diff)
downloadrails-319106d09c0ec2daf8b5345f525f1c97b6368ce2.tar.gz
rails-319106d09c0ec2daf8b5345f525f1c97b6368ce2.tar.bz2
rails-319106d09c0ec2daf8b5345f525f1c97b6368ce2.zip
Metal can now line in plugins under app/metal [#2045 state:committed]
Signed-off-by: David Heinemeier Hansson <david@loudthinking.com>
Diffstat (limited to 'railties/lib')
-rw-r--r--railties/lib/initializer.rb2
-rw-r--r--railties/lib/rails/plugin.rb8
-rw-r--r--railties/lib/rails/plugin/loader.rb5
-rw-r--r--railties/lib/rails/rack/metal.rb15
4 files changed, 21 insertions, 9 deletions
diff --git a/railties/lib/initializer.rb b/railties/lib/initializer.rb
index 09affe9e36..24ce3e75ff 100644
--- a/railties/lib/initializer.rb
+++ b/railties/lib/initializer.rb
@@ -559,6 +559,8 @@ Run `rake gems:install` to install the missing gems.
end
def initialize_metal
+ Rails::Rack::Metal.metal_paths += plugin_loader.engine_metal_paths
+
configuration.middleware.insert_before(
:"ActionController::RewindableInput",
Rails::Rack::Metal, :if => Rails::Rack::Metal.metals.any?)
diff --git a/railties/lib/rails/plugin.rb b/railties/lib/rails/plugin.rb
index 4901abe808..80deb73bbb 100644
--- a/railties/lib/rails/plugin.rb
+++ b/railties/lib/rails/plugin.rb
@@ -80,6 +80,10 @@ module Rails
File.join(directory, 'app', 'controllers')
end
+ def metal_path
+ File.join(directory, 'app', 'metal')
+ end
+
def routing_file
File.join(directory, 'config', 'routes.rb')
end
@@ -100,7 +104,7 @@ module Rails
def app_paths
- [ File.join(directory, 'app', 'models'), File.join(directory, 'app', 'helpers'), controller_path ]
+ [ File.join(directory, 'app', 'models'), File.join(directory, 'app', 'helpers'), controller_path, metal_path ]
end
def lib_path
@@ -160,4 +164,4 @@ module Rails
File.join(directory, 'rails', 'init.rb')
end
end
-end \ No newline at end of file
+end
diff --git a/railties/lib/rails/plugin/loader.rb b/railties/lib/rails/plugin/loader.rb
index f86589a689..66e01d70da 100644
--- a/railties/lib/rails/plugin/loader.rb
+++ b/railties/lib/rails/plugin/loader.rb
@@ -65,6 +65,9 @@ module Rails
$LOAD_PATH.uniq!
end
+ def engine_metal_paths
+ engines.collect(&:metal_path)
+ end
protected
def configure_engines
@@ -185,4 +188,4 @@ module Rails
end
end
-end \ No newline at end of file
+end
diff --git a/railties/lib/rails/rack/metal.rb b/railties/lib/rails/rack/metal.rb
index b185227234..8dac992ef2 100644
--- a/railties/lib/rails/rack/metal.rb
+++ b/railties/lib/rails/rack/metal.rb
@@ -6,14 +6,17 @@ module Rails
NotFoundResponse = [404, {}, []].freeze
NotFound = lambda { NotFoundResponse }
+ cattr_accessor :metal_paths
+ self.metal_paths = ["#{Rails.root}/app/metal"]
+
def self.metals
- base = "#{Rails.root}/app/metal"
- matcher = /\A#{Regexp.escape(base)}\/(.*)\.rb\Z/
+ matcher = /#{Regexp.escape('/app/metal/')}(.*)\.rb\Z/
+ metal_glob = metal_paths.map{ |base| "#{base}/**/*.rb" }
- Dir["#{base}/**/*.rb"].sort.map do |file|
- file.sub!(matcher, '\1')
- require file
- file.classify.constantize
+ Dir[*metal_glob].sort.map do |file|
+ path = file.match(matcher)[1]
+ require path
+ path.classify.constantize
end
end