aboutsummaryrefslogtreecommitdiffstats
path: root/railties
diff options
context:
space:
mode:
authorrick <technoweenie@gmail.com>2008-06-08 14:04:04 -0400
committerrick <technoweenie@gmail.com>2008-06-08 14:04:04 -0400
commitfaad1e32a8ab81890018ba89d191607778830cf0 (patch)
treea7d07b839fae5004fac164cdceb9d76b9a568af2 /railties
parent138adbf156905f5cc6669ba33dd94802c82514d9 (diff)
downloadrails-faad1e32a8ab81890018ba89d191607778830cf0.tar.gz
rails-faad1e32a8ab81890018ba89d191607778830cf0.tar.bz2
rails-faad1e32a8ab81890018ba89d191607778830cf0.zip
Fix discrepancies with loading rails/init.rb from gems. [#324 state:resolved]
Diffstat (limited to 'railties')
-rw-r--r--railties/CHANGELOG4
-rw-r--r--railties/lib/rails/gem_dependency.rb6
-rw-r--r--railties/lib/rails/plugin.rb21
-rw-r--r--railties/lib/rails/plugin/locator.rb7
-rw-r--r--railties/test/plugin_loader_test.rb2
5 files changed, 25 insertions, 15 deletions
diff --git a/railties/CHANGELOG b/railties/CHANGELOG
index 39edc511da..a43455ae2c 100644
--- a/railties/CHANGELOG
+++ b/railties/CHANGELOG
@@ -1,5 +1,9 @@
*Edge*
+* Fix discrepancies with loading rails/init.rb from gems.
+
+* Plugins check for the gem init path (rails/init.rb) before the standard plugin init path (init.rb) [Jacek Becela]
+
* Wrapped Rails.env in StringInquirer so you can do Rails.env.development? [DHH]
* Fixed that RailsInfoController wasn't considering all requests local in development mode (Edgard Castro) [#310 state:resolved]
diff --git a/railties/lib/rails/gem_dependency.rb b/railties/lib/rails/gem_dependency.rb
index 4cac7f725a..f8d97840c1 100644
--- a/railties/lib/rails/gem_dependency.rb
+++ b/railties/lib/rails/gem_dependency.rb
@@ -23,9 +23,13 @@ module Rails
@unpack_directory = nil
end
+ def unpacked_paths
+ Dir[File.join(self.class.unpacked_path, "#{@name}-#{@version || "*"}")]
+ end
+
def add_load_paths
return if @loaded || @load_paths_added
- unpacked_paths = Dir[File.join(self.class.unpacked_path, "#{@name}-#{@version || "*"}")]
+ unpacked_paths = self.unpacked_paths
if unpacked_paths.empty?
args = [@name]
args << @requirement.to_s if @requirement
diff --git a/railties/lib/rails/plugin.rb b/railties/lib/rails/plugin.rb
index a54ab85dbe..b8b2b57038 100644
--- a/railties/lib/rails/plugin.rb
+++ b/railties/lib/rails/plugin.rb
@@ -95,14 +95,14 @@ module Rails
end
def evaluate_init_rb(initializer)
- if has_init_file?
- silence_warnings do
- # Allow plugins to reference the current configuration object
- config = initializer.configuration
-
- eval(IO.read(init_path), binding, init_path)
- end
- end
+ if has_init_file?
+ silence_warnings do
+ # Allow plugins to reference the current configuration object
+ config = initializer.configuration
+
+ eval(IO.read(init_path), binding, init_path)
+ end
+ end
end
end
@@ -111,8 +111,9 @@ module Rails
# to Dependencies.load_paths.
class GemPlugin < Plugin
# Initialize this plugin from a Gem::Specification.
- def initialize(spec)
- super(File.join(spec.full_gem_path))
+ def initialize(spec, gem)
+ directory = (gem.frozen? && gem.unpacked_paths.first) || File.join(spec.full_gem_path)
+ super(directory)
@name = spec.name
end
diff --git a/railties/lib/rails/plugin/locator.rb b/railties/lib/rails/plugin/locator.rb
index f06a51a572..79c07fccd1 100644
--- a/railties/lib/rails/plugin/locator.rb
+++ b/railties/lib/rails/plugin/locator.rb
@@ -78,8 +78,9 @@ module Rails
# a <tt>rails/init.rb</tt> file.
class GemLocator < Locator
def plugins
- specs = initializer.configuration.gems.map(&:specification)
- specs += Gem.loaded_specs.values.select do |spec|
+ gem_index = initializer.configuration.gems.inject({}) { |memo, gem| memo.update gem.specification => gem }
+ specs = gem_index.keys
+ specs += Gem.loaded_specs.values.select do |spec|
spec.loaded_from && # prune stubs
File.exist?(File.join(spec.full_gem_path, "rails", "init.rb"))
end
@@ -91,7 +92,7 @@ module Rails
deps.add(*specs) unless specs.empty?
deps.dependency_order.collect do |spec|
- Rails::GemPlugin.new(spec)
+ Rails::GemPlugin.new(spec, gem_index[spec])
end
end
end
diff --git a/railties/test/plugin_loader_test.rb b/railties/test/plugin_loader_test.rb
index e5fc0926eb..f429bae15c 100644
--- a/railties/test/plugin_loader_test.rb
+++ b/railties/test/plugin_loader_test.rb
@@ -94,7 +94,7 @@ uses_mocha "Plugin Loader Tests" do
def test_should_add_plugin_load_paths_to_global_LOAD_PATH_array
only_load_the_following_plugins! [:stubby, :acts_as_chunky_bacon]
- stubbed_application_lib_index_in_LOAD_PATHS = 5
+ stubbed_application_lib_index_in_LOAD_PATHS = 4
@loader.stubs(:application_lib_index).returns(stubbed_application_lib_index_in_LOAD_PATHS)
@loader.add_plugin_load_paths