diff options
Diffstat (limited to 'lib/old_rubygems_patch.rb')
-rw-r--r-- | lib/old_rubygems_patch.rb | 42 |
1 files changed, 42 insertions, 0 deletions
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 |