diff options
author | Chad Fowler <chad@chadfowler.com> | 2010-06-10 14:00:58 -0400 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2010-06-10 14:16:45 -0400 |
commit | dcc758acb0bf210ec8a1c25afeafb7da0334f0b9 (patch) | |
tree | 5f223a24511fe75c1535f2fa92df3316d51b1413 /railties/lib/rails/script_rails_loader.rb | |
parent | 330a89072a493aafef1e07c3558964477f85adf0 (diff) | |
download | rails-dcc758acb0bf210ec8a1c25afeafb7da0334f0b9.tar.gz rails-dcc758acb0bf210ec8a1c25afeafb7da0334f0b9.tar.bz2 rails-dcc758acb0bf210ec8a1c25afeafb7da0334f0b9.zip |
detect being inside a rails application even from a subdirectory
Signed-off-by: David Heinemeier Hansson <david@loudthinking.com>
Diffstat (limited to 'railties/lib/rails/script_rails_loader.rb')
-rw-r--r-- | railties/lib/rails/script_rails_loader.rb | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/railties/lib/rails/script_rails_loader.rb b/railties/lib/rails/script_rails_loader.rb new file mode 100644 index 0000000000..8fbd3bf492 --- /dev/null +++ b/railties/lib/rails/script_rails_loader.rb @@ -0,0 +1,28 @@ +require 'pathname' + +module Rails + module ScriptRailsLoader + RUBY = File.join(*RbConfig::CONFIG.values_at("bindir", "ruby_install_name")) + RbConfig::CONFIG["EXEEXT"] + SCRIPT_RAILS = File.join('script', 'rails') + + def self.exec_script_rails! + cwd = Dir.pwd + exec RUBY, SCRIPT_RAILS, *ARGV if in_rails_application? + Dir.chdir("..") do + # Recurse in a chdir block: if the search fails we want to be sure + # the application is generated in the original working directory. + exec_script_rails! unless cwd == Dir.pwd + end + rescue SystemCallError + # could not chdir, no problem just return + end + + def self.in_rails_application? + File.exists?(SCRIPT_RAILS) || in_rails_application_subdirectory? + end + + def self.in_rails_application_subdirectory?(path = Pathname.new(Dir.pwd)) + File.exists?(File.join(path, SCRIPT_RAILS)) || !path.root? && in_rails_application_subdirectory?(path.parent) + end + end +end
\ No newline at end of file |