aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails/rack/metal.rb
diff options
context:
space:
mode:
authorJosé Valim and Mikel Lindsaar <pair@programming.com>2010-01-25 09:50:01 +1100
committerJosé Valim and Mikel Lindsaar <pair@programming.com>2010-01-25 09:50:01 +1100
commit4e96442c4e404141830b2d7f0d850b6556190b39 (patch)
treea3ca088ad9d68b5be9ace4d431375bb3fd4ea045 /railties/lib/rails/rack/metal.rb
parenta74a655648618a6ed568b9b4ef3a17a8970e7774 (diff)
parent396003fc48d7c0ba206ad059646c7414bee22a36 (diff)
downloadrails-4e96442c4e404141830b2d7f0d850b6556190b39.tar.gz
rails-4e96442c4e404141830b2d7f0d850b6556190b39.tar.bz2
rails-4e96442c4e404141830b2d7f0d850b6556190b39.zip
Merge branch 'master' of git://github.com/rails/rails
Conflicts: actionmailer/lib/action_mailer/mail_helper.rb railties/lib/rails/configuration.rb
Diffstat (limited to 'railties/lib/rails/rack/metal.rb')
-rw-r--r--railties/lib/rails/rack/metal.rb29
1 files changed, 22 insertions, 7 deletions
diff --git a/railties/lib/rails/rack/metal.rb b/railties/lib/rails/rack/metal.rb
index 565f95d7c4..732936da32 100644
--- a/railties/lib/rails/rack/metal.rb
+++ b/railties/lib/rails/rack/metal.rb
@@ -3,14 +3,29 @@ require 'action_dispatch'
module Rails
module Rack
class Metal
- def initialize(metal_roots, metals=nil)
- load_list = metals || Dir["{#{metal_roots.join(",")}}/**/*.rb"]
+ def self.paths
+ @paths ||= []
+ end
+
+ def initialize(list=nil)
+ metals = []
+ list = Array(list || :all).map(&:to_sym)
+
+ self.class.paths.each do |path|
+ matcher = /\A#{Regexp.escape(path)}\/(.*)\.rb\Z/
+ Dir.glob("#{path}/**/*.rb").sort.each do |metal_path|
+ metal = metal_path.sub(matcher, '\1').to_sym
+ next unless list.include?(metal) || list.include?(:all)
+ require_dependency metal
+ metals << metal
+ end
+ end
+
+ metals = metals.sort_by do |m|
+ [list.index(m) || list.index(:all), m.to_s]
+ end
- @metals = load_list.map { |metal|
- metal = File.basename(metal, '.rb')
- require_dependency metal
- metal.camelize.constantize
- }.compact
+ @metals = metals.map { |m| m.to_s.camelize.constantize }
end
def new(app)