aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails/gem_dependency.rb
diff options
context:
space:
mode:
Diffstat (limited to 'railties/lib/rails/gem_dependency.rb')
-rw-r--r--railties/lib/rails/gem_dependency.rb16
1 files changed, 16 insertions, 0 deletions
diff --git a/railties/lib/rails/gem_dependency.rb b/railties/lib/rails/gem_dependency.rb
index f9c37cb70a..8d6a748e4c 100644
--- a/railties/lib/rails/gem_dependency.rb
+++ b/railties/lib/rails/gem_dependency.rb
@@ -33,6 +33,10 @@ module Rails
rescue Gem::LoadError
puts $!.to_s
end
+
+ def gem_dir(base_directory)
+ File.join(base_directory, specification.full_name)
+ end
def load
return if @loaded || @load_paths_added == false
@@ -54,12 +58,24 @@ module Rails
def install
Gem::GemRunner.new.run(install_command)
end
+
+ def specification
+ @spec ||= Gem.source_index.search(Gem::Dependency.new(@name, @requirement)).sort_by { |s| s.version }.last
+ end
def unpack_to(directory)
FileUtils.mkdir_p directory
Dir.chdir directory do
Gem::GemRunner.new.run(unpack_command)
end
+
+ # copy the gem's specification into GEMDIR/.specification so that
+ # we can access information about the gem on deployment systems
+ # without having the gem installed
+ spec_filename = File.join(gem_dir(directory), '.specification')
+ File.open(spec_filename, 'w') do |file|
+ file.puts specification.to_yaml
+ end
end
def install_command