aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails/script_rails_loader.rb
diff options
context:
space:
mode:
authorChad Fowler <chad@chadfowler.com>2010-06-10 14:00:58 -0400
committerDavid Heinemeier Hansson <david@loudthinking.com>2010-06-10 14:16:45 -0400
commitdcc758acb0bf210ec8a1c25afeafb7da0334f0b9 (patch)
tree5f223a24511fe75c1535f2fa92df3316d51b1413 /railties/lib/rails/script_rails_loader.rb
parent330a89072a493aafef1e07c3558964477f85adf0 (diff)
downloadrails-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.rb28
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