Module: Bundler::Override::DependencyPatch

Included in:
EndpointSpecification, RemoteSpecification, Gem::Specification
Defined in:
lib/bundler/override/dependency_patch.rb

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object



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
# File 'lib/bundler/override/dependency_patch.rb', line 4

def self.included(base)
  base.class_eval do
    alias_method :dependencies_orig, :dependencies
    alias_method :runtime_dependencies_orig, :runtime_dependencies if base.method_defined?(:runtime_dependencies)

    def dependencies
      override_dependencies(dependencies_orig) || []
    end

    def runtime_dependencies
      override_dependencies(runtime_dependencies_orig) || []
    end

    def override_dependencies(deps)
      return deps unless Bundler::Override.override? name

      param = Bundler::Override.params(name)
      drop = Array(param[:drop])
      requirements = param[:requirements]
      if requirements && !requirements.empty?
        requirements.each do |name, requirement|
          existing = deps.find { |d| d.name == name }
          deps.delete_if { |d| d.name == name }
          deps << Gem::Dependency.new(name, requirement, existing&.type || :runtime)
        end
      end
      deps.delete_if { |d| drop.include? d.name }

      deps
    end
  end
end