aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--railties/lib/generators/base.rb21
-rw-r--r--railties/test/generators/app_generator_test.rb15
2 files changed, 27 insertions, 9 deletions
diff --git a/railties/lib/generators/base.rb b/railties/lib/generators/base.rb
index 5d6821efe0..0d2d165741 100644
--- a/railties/lib/generators/base.rb
+++ b/railties/lib/generators/base.rb
@@ -335,18 +335,21 @@ module Rails
# default value plus an instance helper method called shebang.
#
def self.add_shebang_option!
- require 'rbconfig'
- default = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
-
- class_option :ruby, :type => :string, :aliases => "-r", :default => default,
+ class_option :ruby, :type => :string, :aliases => "-r", :default => Thor::Util.ruby_command,
:desc => "Path to the Ruby binary of your choice", :banner => "PATH"
- class_eval <<-METHOD, __FILE__, __LINE__
- protected
- def shebang
- "#!\#{options[:ruby] || "/usr/bin/env ruby"}"
+ no_tasks {
+ define_method :shebang do
+ @shebang ||= begin
+ command = if options[:ruby] == Thor::Util.ruby_command
+ "/usr/bin/env #{File.basename(Thor::Util.ruby_command)}"
+ else
+ options[:ruby]
+ end
+ "#!#{command}"
+ end
end
- METHOD
+ }
end
end
diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb
index 98994f6ad2..8955789087 100644
--- a/railties/test/generators/app_generator_test.rb
+++ b/railties/test/generators/app_generator_test.rb
@@ -109,6 +109,21 @@ class AppGeneratorTest < GeneratorsTestCase
).each { |path| assert_file "script/#{path}", /#!foo\/bar\/baz/ }
end
+ def test_shebang_when_is_the_same_as_default_use_env
+ run_generator ["--ruby", Thor::Util.ruby_command]
+
+ %w(
+ about
+ console
+ dbconsole
+ destroy
+ generate
+ plugin
+ runner
+ server
+ ).each { |path| assert_file "script/#{path}", /#!\/usr\/bin\/env/ }
+ end
+
def test_rails_is_frozen
generator(:freeze => true, :database => "sqlite3").expects(:run).with("rake rails:freeze:edge", false)
silence(:stdout){ generator.invoke }