aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2009-11-03 00:08:33 -0200
committerEngine Yard <engineyard@Engine-Yards-MacBook-Pro.local>2009-11-02 18:20:16 -0800
commitd226f17507805c145cc7a1727d46714b88910094 (patch)
tree5fd52e0715c9d6c8f10b7a9ac9db1fa066a65eb0
parent23780850237876cf81038534d8f59fa307af0b31 (diff)
downloadrails-d226f17507805c145cc7a1727d46714b88910094.tar.gz
rails-d226f17507805c145cc7a1727d46714b88910094.tar.bz2
rails-d226f17507805c145cc7a1727d46714b88910094.zip
Ensure that generators can be invoked from any directory.
Signed-off-by: Engine Yard <engineyard@Engine-Yards-MacBook-Pro.local>
-rw-r--r--railties/lib/rails/generators/base.rb17
-rw-r--r--railties/test/generators/generators_test_helper.rb15
-rw-r--r--railties/test/generators_test.rb2
3 files changed, 28 insertions, 6 deletions
diff --git a/railties/lib/rails/generators/base.rb b/railties/lib/rails/generators/base.rb
index 7af99797ea..e6baf2fc79 100644
--- a/railties/lib/rails/generators/base.rb
+++ b/railties/lib/rails/generators/base.rb
@@ -12,6 +12,16 @@ module Rails
add_runtime_options!
+ # Always move to rails source root.
+ #
+ def initialize(*args) #:nodoc:
+ if !invoked?(args) && defined?(Rails.root) && Rails.root
+ self.destination_root = Rails.root
+ FileUtils.cd(destination_root)
+ end
+ super
+ end
+
# Automatically sets the source root based on the class name.
#
def self.source_root
@@ -247,6 +257,13 @@ module Rails
end
end
+ # Check if this generator was invoked from another one by inspecting
+ # parameters.
+ #
+ def invoked?(args)
+ args.last.is_a?(Hash) && args.last.key?(:invocations)
+ end
+
# Use Rails default banner.
#
def self.banner
diff --git a/railties/test/generators/generators_test_helper.rb b/railties/test/generators/generators_test_helper.rb
index ccf08c347c..fdf6b4041f 100644
--- a/railties/test/generators/generators_test_helper.rb
+++ b/railties/test/generators/generators_test_helper.rb
@@ -1,8 +1,14 @@
# TODO: Fix this RAILS_ENV stuff
-RAILS_ENV = 'test'
-
+RAILS_ENV = 'test' unless defined?(RAILS_ENV)
require 'abstract_unit'
-Rails.application.config.root = File.expand_path(File.join(File.dirname(__FILE__), '..', 'fixtures'))
+
+module Rails
+ def self.root
+ @root ||= File.expand_path(File.join(File.dirname(__FILE__), '..', 'fixtures'))
+ end
+end
+Rails.application.config.root = Rails.root
+
require 'rails/generators'
require 'rubygems'
require 'active_record'
@@ -15,8 +21,7 @@ class GeneratorsTestCase < Test::Unit::TestCase
include FileUtils
def destination_root
- @destination_root ||= File.expand_path(File.join(File.dirname(__FILE__),
- '..', 'fixtures', 'tmp'))
+ File.join(Rails.root, "tmp")
end
def setup
diff --git a/railties/test/generators_test.rb b/railties/test/generators_test.rb
index 178b5ef6de..8f1984c7d2 100644
--- a/railties/test/generators_test.rb
+++ b/railties/test/generators_test.rb
@@ -105,7 +105,7 @@ class GeneratorsTest < GeneratorsTestCase
end
def test_warning_is_shown_if_generator_cant_be_loaded
- Rails::Generators.load_paths << File.expand_path("../fixtures/vendor/gems/gems/wrong", __FILE__)
+ Rails::Generators.load_paths << File.join(Rails.root, "vendor", "gems", "gems", "wrong")
output = capture(:stderr){ Rails::Generators.find_by_namespace(:wrong) }
assert_match /\[WARNING\] Could not load generator at/, output
assert_match /Error: uninitialized constant Rails::Generator/, output