aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails
diff options
context:
space:
mode:
authorYehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>2009-06-26 17:32:05 -0700
committerYehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>2009-06-26 17:32:05 -0700
commit188a892c5a097ee6d62249d048a6be7d2dfe9649 (patch)
tree6ef8769019e1f294156dd58551ec6656a37d4385 /railties/lib/rails
parent4153c6b720563e1c43bb96e95f0ff5fbd59d6be7 (diff)
downloadrails-188a892c5a097ee6d62249d048a6be7d2dfe9649.tar.gz
rails-188a892c5a097ee6d62249d048a6be7d2dfe9649.tar.bz2
rails-188a892c5a097ee6d62249d048a6be7d2dfe9649.zip
Starting to replace scattered path configuration settings with the path object
Diffstat (limited to 'railties/lib/rails')
-rw-r--r--railties/lib/rails/configuration.rb33
-rw-r--r--railties/lib/rails/paths.rb43
2 files changed, 70 insertions, 6 deletions
diff --git a/railties/lib/rails/configuration.rb b/railties/lib/rails/configuration.rb
index fdb071fc18..59132efe98 100644
--- a/railties/lib/rails/configuration.rb
+++ b/railties/lib/rails/configuration.rb
@@ -10,7 +10,7 @@ module Rails
:log_path, :log_level, :logger, :preload_frameworks,
:database_configuration_file, :cache_store, :time_zone,
:view_path, :metals, :controller_paths, :routes_configuration_file,
- :eager_load_paths, :dependency_loading
+ :eager_load_paths, :dependency_loading, :paths
def initialize
set_root_path!
@@ -61,7 +61,36 @@ module Rails
Pathname.new(RAILS_ROOT).realpath.to_s
end
- RAILS_ROOT.replace self.root_path
+ @paths = Rails::Application::Root.new(root_path)
+ @paths.app = "app"
+ @paths.app.metals = "app/metal"
+ @paths.app.models = "app/models"
+ @paths.app.controllers = "app/controllers"
+ @paths.app.helpers = "app/helpers"
+ @paths.app.services = "app/services"
+ @paths.lib = "lib"
+ @paths.vendor = "vendor"
+ @paths.vendor.plugins = "vendor/plugins"
+ @paths.cache = "tmp/cache"
+ @paths.config = "config"
+ @paths.config.locales = "config/locales"
+ @paths.config.environments = "config/environments"
+
+ @paths.app.controllers.push *builtin_directories
+
+ @paths.app.load_path!
+ @paths.app.metals.load_path!
+ @paths.app.models.eager_load!
+ @paths.app.controllers.eager_load!
+ @paths.app.helpers.eager_load!
+ @paths.app.services.load_path!
+ @paths.app.metals.eager_load!
+ @paths.lib.load_path!
+ @paths.vendor.load_path!
+
+ @paths.config.environments.glob = "#{RAILS_ENV}.rb"
+
+ RAILS_ROOT.replace root_path
end
# Enable threaded mode. Allows concurrent requests to controller actions and
diff --git a/railties/lib/rails/paths.rb b/railties/lib/rails/paths.rb
index 0b43725e32..aada7d4a56 100644
--- a/railties/lib/rails/paths.rb
+++ b/railties/lib/rails/paths.rb
@@ -19,7 +19,7 @@ module Rails
class Root
include PathParent
- attr_reader :path, :load_once, :eager_load
+ attr_reader :path
def initialize(path)
raise unless path.is_a?(String)
@@ -28,7 +28,32 @@ module Rails
# TODO: Move logic from set_root_path initializer
@path = File.expand_path(path)
@root = self
- @load_once, @eager_load = Set.new, Set.new
+ @load_once, @eager_load, @all_paths = [], [], []
+ end
+
+ def load_once
+ @load_once.uniq!
+ @load_once
+ end
+
+ def eager_load
+ @eager_load.uniq!
+ @eager_load
+ end
+
+ def all_paths
+ @all_paths.uniq!
+ @all_paths
+ end
+
+ def load_paths
+ all_paths.map { |path| path.paths }.flatten
+ end
+
+ def add_to_load_path
+ load_paths.reverse_each do |path|
+ $LOAD_PATH.unshift(path) if File.directory?(path)
+ end
end
end
@@ -57,7 +82,7 @@ module Rails
def load_once!
@load_once = true
- @root.load_once << self
+ @root.load_once.push *self.paths
end
def load_once?
@@ -66,13 +91,23 @@ module Rails
def eager_load!
@eager_load = true
- @root.eager_load << self
+ @root.all_paths << self
+ @root.eager_load.push *self.paths
end
def eager_load?
@eager_load
end
+ def load_path!
+ @load_path = true
+ @root.all_paths << self
+ end
+
+ def load_path?
+ @load_path
+ end
+
def paths
@paths.map do |path|
path.index('/') == 0 ? path : File.join(@root.path, path)