diff options
author | Xavier Noria <fxn@hashref.com> | 2010-04-06 15:38:05 -0700 |
---|---|---|
committer | Xavier Noria <fxn@hashref.com> | 2010-04-06 15:38:05 -0700 |
commit | 4c4fd1a60ff1c060e76e9ee540074756510f53ea (patch) | |
tree | 77da1c66c127e36c8b00825b676d9267a9ef4cd6 /railties/lib/rails/paths.rb | |
parent | 03cb74b9461293b96ae0add8ff5efda132dabba0 (diff) | |
parent | af130575249571464ec984efa84fcea1267e8cf8 (diff) | |
download | rails-4c4fd1a60ff1c060e76e9ee540074756510f53ea.tar.gz rails-4c4fd1a60ff1c060e76e9ee540074756510f53ea.tar.bz2 rails-4c4fd1a60ff1c060e76e9ee540074756510f53ea.zip |
Merge commit 'rails/master'
Diffstat (limited to 'railties/lib/rails/paths.rb')
-rw-r--r-- | railties/lib/rails/paths.rb | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/railties/lib/rails/paths.rb b/railties/lib/rails/paths.rb index 55874813da..1c9e308631 100644 --- a/railties/lib/rails/paths.rb +++ b/railties/lib/rails/paths.rb @@ -3,6 +3,8 @@ require 'set' module Rails module Paths module PathParent + attr_reader :children + def method_missing(id, *args) name = id.to_s @@ -37,15 +39,15 @@ module Rails end def load_once - filter { |path| path.paths if path.load_once? } + filter_by(:load_once?) end def eager_load - filter { |path| path.paths if path.eager_load? } + filter_by(:eager_load?) end def load_paths - filter { |path| path.paths if path.load_path? } + filter_by(:load_path?) end def push(*) @@ -58,8 +60,16 @@ module Rails protected - def filter(&block) - all_paths.map(&block).compact.flatten.uniq.select { |p| File.exists?(p) } + def filter_by(constraint) + all_paths.map do |path| + if path.send(constraint) + paths = path.paths + paths -= path.children.values.map { |p| p.send(constraint) ? [] : p.paths }.flatten + paths + else + [] + end + end.flatten.uniq.select { |p| File.exists?(p) } end end @@ -129,10 +139,12 @@ module Rails def paths raise "You need to set a path root" unless @root.path + result = @paths.map do |p| path = File.expand_path(p, @root.path) @glob ? Dir[File.join(path, @glob)] : path end + result.flatten! result.uniq! result |