From 8ff214e0db31a6827b52f738c409d97d70b363d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 4 Jul 2009 17:09:09 +0200 Subject: Use the proper shebang when using Ruby 1.9 or jruby or windows. --- railties/lib/generators/base.rb | 21 ++++++++++++--------- railties/test/generators/app_generator_test.rb | 15 +++++++++++++++ 2 files changed, 27 insertions(+), 9 deletions(-) (limited to 'railties') 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 } -- cgit v1.2.3