Permalink
Browse files

renames load_(once_)paths to autoload_(once_)paths in dependencies an…

…d config
  • Loading branch information...
1 parent 4a0a640 commit 6f83a5036d8a9c3f8ed74755ff6d42bc3f6e9982 @fxn fxn committed Jun 22, 2010
View
@@ -1,5 +1,7 @@
*Rails 3.0.0 [Release Candidate] (unreleased)*
+* Renamed ActiveSupport::Dependecies.load_(once_)paths to autoload_(once_)paths. [fxn]
+
* Added ActiveSupport::FileUpdateChecker to execute a block only if a set of files changed, used by Router and I18n locale files. [José Valim]
* Added ActiveSupport::DescendantsTracker to track descendants with support to constants reloading. [José Valim]
@@ -33,14 +33,14 @@ module Dependencies #:nodoc:
# The set of directories from which we may automatically load files. Files
# under these directories will be reloaded on each request in development mode,
- # unless the directory also appears in load_once_paths.
- mattr_accessor :load_paths
- self.load_paths = []
+ # unless the directory also appears in autoload_once_paths.
+ mattr_accessor :autoload_paths
+ self.autoload_paths = []
# The set of directories from which automatically loaded constants are loaded
- # only once. All directories in this set must also be present in +load_paths+.
- mattr_accessor :load_once_paths
- self.load_once_paths = []
+ # only once. All directories in this set must also be present in +autoload_paths+.
+ mattr_accessor :autoload_once_paths
+ self.autoload_once_paths = []
# An array of qualified constant names that have been loaded. Adding a name to
# this array will cause it to be unloaded the next time Dependencies are cleared.
@@ -352,7 +352,7 @@ def local_const_defined?(mod, const) #:nodoc:
# Given +path+, a filesystem path to a ruby file, return an array of constant
# paths which would cause Dependencies to attempt to load this file.
- def loadable_constants_for_path(path, bases = load_paths)
+ def loadable_constants_for_path(path, bases = autoload_paths)
expanded_path = Pathname.new(path[/\A(.*?)(\.rb)?\Z/, 1]).expand_path
bases.inject([]) do |paths, root|
@@ -363,11 +363,11 @@ def loadable_constants_for_path(path, bases = load_paths)
end.uniq
end
- # Search for a file in load_paths matching the provided suffix.
+ # Search for a file in autoload_paths matching the provided suffix.
def search_for_file(path_suffix)
path_suffix = path_suffix.sub(/(\.rb)?$/, ".rb")
- load_paths.each do |root|
+ autoload_paths.each do |root|
path = File.join(root, path_suffix)
return path if File.file? path
end
@@ -377,14 +377,14 @@ def search_for_file(path_suffix)
# Does the provided path_suffix correspond to an autoloadable module?
# Instead of returning a boolean, the autoload base for this module is returned.
def autoloadable_module?(path_suffix)
- load_paths.each do |load_path|
+ autoload_paths.each do |load_path|
return load_path if File.directory? File.join(load_path, path_suffix)
end
nil
end
def load_once_path?(path)
- load_once_paths.any? { |base| path.starts_with? base }
+ autoload_once_paths.any? { |base| path.starts_with? base }
end
# Attempt to autoload the provided module name by searching for a directory
@@ -396,7 +396,7 @@ def autoload_module!(into, const_name, qualified_name, path_suffix)
return nil unless base_path = autoloadable_module?(path_suffix)
mod = Module.new
into.const_set const_name, mod
- autoloaded_constants << qualified_name unless load_once_paths.include?(base_path)
+ autoloaded_constants << qualified_name unless autoload_once_paths.include?(base_path)
return mod
end
@@ -25,11 +25,11 @@ def with_loading(*from)
this_dir = File.dirname(__FILE__)
parent_dir = File.dirname(this_dir)
$LOAD_PATH.unshift(parent_dir) unless $LOAD_PATH.include?(parent_dir)
- prior_load_paths = ActiveSupport::Dependencies.load_paths
- ActiveSupport::Dependencies.load_paths = from.collect { |f| "#{this_dir}/#{f}" }
+ prior_autoload_paths = ActiveSupport::Dependencies.autoload_paths
+ ActiveSupport::Dependencies.autoload_paths = from.collect { |f| "#{this_dir}/#{f}" }
yield
ensure
- ActiveSupport::Dependencies.load_paths = prior_load_paths
+ ActiveSupport::Dependencies.autoload_paths = prior_autoload_paths
ActiveSupport::Dependencies.mechanism = old_mechanism
ActiveSupport::Dependencies.explicitly_unloadable_constants = []
end
@@ -264,15 +264,15 @@ def test_loadable_constants_for_path_should_handle_relative_paths
def test_loadable_constants_for_path_should_provide_all_results
fake_root = '/usr/apps/backpack'
with_loading fake_root, fake_root + '/lib' do
- root = ActiveSupport::Dependencies.load_paths.first
+ root = ActiveSupport::Dependencies.autoload_paths.first
assert_equal ["Lib::A::B", "A::B"], ActiveSupport::Dependencies.loadable_constants_for_path(root + '/lib/a/b')
end
end
def test_loadable_constants_for_path_should_uniq_results
fake_root = '/usr/apps/backpack/lib'
with_loading fake_root, fake_root + '/' do
- root = ActiveSupport::Dependencies.load_paths.first
+ root = ActiveSupport::Dependencies.autoload_paths.first
assert_equal ["A::B"], ActiveSupport::Dependencies.loadable_constants_for_path(root + '/a/b')
end
end
@@ -344,7 +344,7 @@ def test_qualified_name_for
def test_file_search
with_loading 'dependencies' do
- root = ActiveSupport::Dependencies.load_paths.first
+ root = ActiveSupport::Dependencies.autoload_paths.first
assert_equal nil, ActiveSupport::Dependencies.search_for_file('service_three')
assert_equal nil, ActiveSupport::Dependencies.search_for_file('service_three.rb')
assert_equal root + '/service_one.rb', ActiveSupport::Dependencies.search_for_file('service_one')
@@ -354,14 +354,14 @@ def test_file_search
def test_file_search_uses_first_in_load_path
with_loading 'dependencies', 'autoloading_fixtures' do
- deps, autoload = ActiveSupport::Dependencies.load_paths
+ deps, autoload = ActiveSupport::Dependencies.autoload_paths
assert_match %r/dependencies/, deps
assert_match %r/autoloading_fixtures/, autoload
assert_equal deps + '/conflict.rb', ActiveSupport::Dependencies.search_for_file('conflict')
end
with_loading 'autoloading_fixtures', 'dependencies' do
- autoload, deps = ActiveSupport::Dependencies.load_paths
+ autoload, deps = ActiveSupport::Dependencies.autoload_paths
assert_match %r/dependencies/, deps
assert_match %r/autoloading_fixtures/, autoload
@@ -418,7 +418,7 @@ def test_const_missing_within_anonymous_module
def test_removal_from_tree_should_be_detected
with_loading 'dependencies' do
- root = ActiveSupport::Dependencies.load_paths.first
+ root = ActiveSupport::Dependencies.autoload_paths.first
c = ServiceOne
ActiveSupport::Dependencies.clear
assert ! defined?(ServiceOne)
@@ -433,7 +433,7 @@ def test_removal_from_tree_should_be_detected
def test_references_should_work
with_loading 'dependencies' do
- root = ActiveSupport::Dependencies.load_paths.first
+ root = ActiveSupport::Dependencies.autoload_paths.first
c = ActiveSupport::Dependencies.ref("ServiceOne")
service_one_first = ServiceOne
assert_equal service_one_first, c.get
@@ -460,9 +460,9 @@ def test_nested_load_error_isnt_rescued
end
end
- def test_load_once_paths_do_not_add_to_autoloaded_constants
+ def test_autoload_once_paths_do_not_add_to_autoloaded_constants
with_autoloading_fixtures do
- ActiveSupport::Dependencies.load_once_paths = ActiveSupport::Dependencies.load_paths.dup
+ ActiveSupport::Dependencies.autoload_once_paths = ActiveSupport::Dependencies.autoload_paths.dup
assert ! ActiveSupport::Dependencies.autoloaded?("ModuleFolder")
assert ! ActiveSupport::Dependencies.autoloaded?("ModuleFolder::NestedClass")
@@ -473,7 +473,7 @@ def test_load_once_paths_do_not_add_to_autoloaded_constants
end
ensure
Object.class_eval { remove_const :ModuleFolder }
- ActiveSupport::Dependencies.load_once_paths = []
+ ActiveSupport::Dependencies.autoload_once_paths = []
end
def test_application_should_special_case_application_controller
@@ -760,20 +760,20 @@ def test_remove_constant_handles_double_colon_at_start
def test_load_once_constants_should_not_be_unloaded
with_autoloading_fixtures do
- ActiveSupport::Dependencies.load_once_paths = ActiveSupport::Dependencies.load_paths
+ ActiveSupport::Dependencies.autoload_once_paths = ActiveSupport::Dependencies.autoload_paths
::A.to_s
assert defined?(A)
ActiveSupport::Dependencies.clear
assert defined?(A)
end
ensure
- ActiveSupport::Dependencies.load_once_paths = []
+ ActiveSupport::Dependencies.autoload_once_paths = []
Object.class_eval { remove_const :A if const_defined?(:A) }
end
- def test_load_once_paths_should_behave_when_recursively_loading
+ def test_autoload_once_paths_should_behave_when_recursively_loading
with_loading 'dependencies', 'autoloading_fixtures' do
- ActiveSupport::Dependencies.load_once_paths = [ActiveSupport::Dependencies.load_paths.last]
+ ActiveSupport::Dependencies.autoload_once_paths = [ActiveSupport::Dependencies.autoload_paths.last]
assert !defined?(CrossSiteDependency)
assert_nothing_raised { CrossSiteDepender.nil? }
assert defined?(CrossSiteDependency)
@@ -784,7 +784,7 @@ def test_load_once_paths_should_behave_when_recursively_loading
"CrossSiteDependency shouldn't have been unloaded!"
end
ensure
- ActiveSupport::Dependencies.load_once_paths = []
+ ActiveSupport::Dependencies.autoload_once_paths = []
end
def test_hook_called_multiple_times
View
@@ -1,6 +1,9 @@
*Rails 3.0.0 [Release Candidate] (unreleased)*
+* config.load_(once_)paths in config/application.rb got renamed to config.autoload_(once_)paths. [fxn]
+
* Abort generation/booting on Ruby 1.9.1. [fxn]
+
* Made the rails command work even when you're in a subdirectory [Chad Fowler]
@@ -67,7 +67,7 @@ def inherited(base)
raise "You cannot have more than one Rails::Application" if Rails.application
super
Rails.application = base.instance
- Rails.application.add_lib_to_load_paths!
+ Rails.application.add_lib_to_load_path!
ActiveSupport.run_load_hooks(:before_configuration, base.instance)
end
@@ -97,7 +97,7 @@ def method_missing(*args, &block)
# are changing config.root inside your application definition or having a custom
# Rails application, you will need to add lib to $LOAD_PATH on your own in case
# you need to load files in lib/ during the application configuration as well.
- def add_lib_to_load_paths! #:nodoc:
+ def add_lib_to_load_path! #:nodoc:
path = config.root.join('lib').to_s
$LOAD_PATH.unshift(path) if File.exists?(path)
end
@@ -7,14 +7,14 @@ module Finisher
config.generators.templates.unshift(*paths.lib.templates.to_a)
end
- initializer :ensure_load_once_paths_as_subset do
- extra = ActiveSupport::Dependencies.load_once_paths -
- ActiveSupport::Dependencies.load_paths
+ initializer :ensure_autoload_once_paths_as_subset do
+ extra = ActiveSupport::Dependencies.autoload_once_paths -
+ ActiveSupport::Dependencies.autoload_paths
unless extra.empty?
abort <<-end_error
- load_once_paths must be a subset of the load_paths.
- Extra items in load_once_paths: #{extra * ','}
+ autoload_once_paths must be a subset of the autoload_paths.
+ Extra items in autoload_once_paths: #{extra * ','}
end_error
end
end
@@ -32,14 +32,14 @@ module Rails
# == Configuration
#
# Besides the Railtie configuration which is shared across the application, in a
- # Rails::Engine you can access load_paths, eager_load_paths and load_once_paths,
+ # Rails::Engine you can access autoload_paths, eager_load_paths and autoload_once_paths,
# which differently from a Railtie, are scoped to the current Engine.
#
# Example:
#
# class MyEngine < Rails::Engine
# # Add a load path for this specific Engine
- # config.load_paths << File.expand_path("../lib/some/path", __FILE__)
+ # config.autoload_paths << File.expand_path("../lib/some/path", __FILE__)
#
# initializer "my_engine.add_middleware" do |app|
# app.middleware.use MyEngine::Middleware
@@ -142,7 +142,7 @@ def eager_load!
# Add configured load paths to ruby load paths and remove duplicates.
initializer :set_load_path, :before => :bootstrap_hook do
- config.load_paths.reverse_each do |path|
+ config.autoload_paths.reverse_each do |path|
$LOAD_PATH.unshift(path) if File.directory?(path)
end
$LOAD_PATH.uniq!
@@ -154,17 +154,17 @@ def eager_load!
# This needs to be an initializer, since it needs to run once
# per engine and get the engine as a block parameter
initializer :set_autoload_paths, :before => :bootstrap_hook do |app|
- ActiveSupport::Dependencies.load_paths.unshift(*config.load_paths)
+ ActiveSupport::Dependencies.autoload_paths.unshift(*config.autoload_paths)
if reloadable?(app)
- ActiveSupport::Dependencies.load_once_paths.unshift(*config.load_once_paths)
+ ActiveSupport::Dependencies.autoload_once_paths.unshift(*config.autoload_once_paths)
else
- ActiveSupport::Dependencies.load_once_paths.unshift(*config.load_paths)
+ ActiveSupport::Dependencies.autoload_once_paths.unshift(*config.autoload_paths)
end
# Freeze so future modifications will fail rather than do nothing mysteriously
- config.load_paths.freeze
- config.load_once_paths.freeze
+ config.autoload_paths.freeze
+ config.autoload_once_paths.freeze
end
initializer :add_routing_paths do |app|
@@ -4,7 +4,7 @@ module Rails
class Engine
class Configuration < ::Rails::Railtie::Configuration
attr_reader :root
- attr_writer :eager_load_paths, :load_once_paths, :load_paths
+ attr_writer :eager_load_paths, :autoload_once_paths, :autoload_paths
def initialize(root=nil)
super()
@@ -41,12 +41,12 @@ def eager_load_paths
@eager_load_paths ||= paths.eager_load
end
- def load_once_paths
- @load_once_paths ||= paths.load_once
+ def autoload_once_paths
+ @autoload_once_paths ||= paths.load_once
end
- def load_paths
- @load_paths ||= paths.load_paths
+ def autoload_paths
+ @autoload_paths ||= paths.load_paths
end
end
end
@@ -22,7 +22,7 @@ class Application < Rails::Application
# -- all .rb files in that directory are automatically loaded.
# Add additional load paths for your own custom dirs
- # config.load_paths += %W( #{config.root}/extras )
+ # config.autoload_paths += %W( #{config.root}/extras )
# Only load the plugins named here, in the order given (default is alphabetical).
# :all can be used as a placeholder for all plugins not explicitly named
@@ -130,9 +130,9 @@ def test_gem_should_insert_on_separate_lines
def test_environment_should_include_data_in_environment_initializer_block
run_generator
- load_paths = 'config.load_paths += %w["#{Rails.root}/app/extras"]'
- action :environment, load_paths
- assert_file 'config/application.rb', /#{Regexp.escape(load_paths)}/
+ autoload_paths = 'config.autoload_paths += %w["#{Rails.root}/app/extras"]'
+ action :environment, autoload_paths
+ assert_file 'config/application.rb', /#{Regexp.escape(autoload_paths)}/
end
def test_environment_with_block_should_include_block_contents_in_environment_initializer_block

10 comments on commit 6f83a50

Contributor

iHiD replied Jun 25, 2010

Was load_paths depreciated?

This just broke all my apps with no previous warning.

Thanks,
iHiD

Contributor

josevalim replied Jun 25, 2010

Yes, it was. The deprecation was placed on Rails 2.3 apps, so it was a bit harder on people already using Rails 3 apps.

Contributor

iHiD replied Jun 25, 2010

OK, that's fair enough. Thank you for answering.

I have a library under lib/a/b/c.rb and this change broke my app now.

With this change does it mean we have to load the libraries under the lib/ folder it as such:
Lib::A::B::C

Owner

fxn replied Jun 28, 2010

@scrum8, this particular commit only renames. Perhaps you mean 9b19a6f ?

If that is the case, you need to require c.rb where A::B::C is used:

require "a/b/c"

Note that you can use that relative path because lib is still in Ruby's load path.

Hi @fxn,

Thanks for the response. So now we have to explicitly call require? Did I get this right?

Owner

fxn replied Jun 28, 2010

@scrum8, by default yes.

You can still get the old behavior adding lib to config.autoload_paths in config/application.rb.

Thanks fxn,

Any reason why we have to explicitly configure it in config/application.rb now?

Owner

fxn replied Jun 29, 2010

Applications are no longer configured in config/environment.rb in Rails 3. If you generate a new Rails 3 application you'll see there's a config/application.rb with contents that resemble what config/environment.rb had before.

(Sorry to be late to the party) Is there any explanation available on the interwebs on why the decision to not autoload lib by default?

Please sign in to comment.