aboutsummaryrefslogtreecommitdiffstats
path: root/lib/old_rubygems_patch.rb
blob: 3001a73815539464293e7bf66168a0b2a3195fc2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
if File.exist? File.join(File.dirname(__FILE__),'..','vendor','rails','railties','lib','rails','gem_dependency.rb')
  require File.join(File.dirname(__FILE__),'..','vendor','rails','railties','lib','rails','gem_dependency.rb')
else
  require 'rails/gem_dependency'
end

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