From 30e114c33a8b9890e2997b686b081c326dcb9ba2 Mon Sep 17 00:00:00 2001 From: Seb Bacon Date: Mon, 22 Aug 2011 09:44:46 +0100 Subject: Ensure that recent Rails upgrade doesn't break compatibility with older versions of Rubygems (such as exist in Debian Lenny). Closes #145. --- lib/old_rubygems_patch.rb | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 lib/old_rubygems_patch.rb (limited to 'lib/old_rubygems_patch.rb') diff --git a/lib/old_rubygems_patch.rb b/lib/old_rubygems_patch.rb new file mode 100644 index 000000000..5601a5e90 --- /dev/null +++ b/lib/old_rubygems_patch.rb @@ -0,0 +1,42 @@ +require File.join(File.dirname(__FILE__),'..','vendor','rails','railties','lib','rails','gem_dependency.rb') + +module Rails + class GemDependency < Gem::Dependency + + # This definition of the requirement method is a patch + if !method_defined?(:requirement) + def requirement + req = version_requirements + end + end + + def add_load_paths + self.class.add_frozen_gem_path + return if @loaded || @load_paths_added + if framework_gem? + @load_paths_added = @loaded = @frozen = true + return + end + + begin + dep = Gem::Dependency.new(name, requirement) + spec = Gem.source_index.find { |_,s| s.satisfies_requirement?(dep) }.last + spec.activate # a way that exists + rescue + begin + gem self.name, self.requirement # < 1.8 unhappy way + # This second rescue is a patch - fall back to passing Rails::GemDependency to gem + # for older rubygems + rescue ArgumentError + gem self + end + end + + @spec = Gem.loaded_specs[name] + @frozen = @spec.loaded_from.include?(self.class.unpacked_path) if @spec + @load_paths_added = true + rescue Gem::LoadError + end + end + +end -- cgit v1.2.3