Sha256: 65285c229a43fc2562528a012444191b29e143269ae4eb72f71943a6c07eedc4

Contents?: true

Size: 1.37 KB

Versions: 14

Compression:

Stored size: 1.37 KB

Contents

# frozen_string_literal: true

module Bundler
  #
  # This class materializes a set of resolved specifications (`LazySpecification`)
  # for a given gem into the most appropriate real specifications
  # (`StubSepecification`, `EndpointSpecification`, etc), given a dependency and a
  # target platform.
  #
  class Materialization
    def initialize(dep, platform, candidates:)
      @dep = dep
      @platform = platform
      @candidates = candidates
    end

    def complete?
      specs.any?
    end

    def specs
      @specs ||= if @candidates.nil?
        []
      elsif platform
        GemHelpers.select_best_platform_match(@candidates, platform, force_ruby: dep.force_ruby_platform)
      else
        GemHelpers.select_best_local_platform_match(@candidates, force_ruby: dep.force_ruby_platform || dep.default_force_ruby_platform)
      end
    end

    def dependencies
      specs.first.runtime_dependencies.map {|d| [d, platform] }
    end

    def materialized_spec
      specs.reject(&:missing?).first&.materialization
    end

    def completely_missing_specs
      return [] unless specs.all?(&:missing?)

      specs
    end

    def partially_missing_specs
      specs.select(&:missing?)
    end

    def incomplete_specs
      return [] if complete?

      @candidates || LazySpecification.new(dep.name, nil, nil)
    end

    private

    attr_reader :dep, :platform
  end
end

Version data entries

14 entries across 14 versions & 2 rubygems

Version Path
rubygems-update-3.6.6 bundler/lib/bundler/materialization.rb
bundler-2.6.6 lib/bundler/materialization.rb
rubygems-update-3.6.5 bundler/lib/bundler/materialization.rb
bundler-2.6.5 lib/bundler/materialization.rb
rubygems-update-3.6.4 bundler/lib/bundler/materialization.rb
bundler-2.6.4 lib/bundler/materialization.rb
rubygems-update-3.6.3 bundler/lib/bundler/materialization.rb
bundler-2.6.3 lib/bundler/materialization.rb
rubygems-update-3.6.2 bundler/lib/bundler/materialization.rb
bundler-2.6.2 lib/bundler/materialization.rb
rubygems-update-3.6.1 bundler/lib/bundler/materialization.rb
bundler-2.6.1 lib/bundler/materialization.rb
rubygems-update-3.6.0 bundler/lib/bundler/materialization.rb
bundler-2.6.0 lib/bundler/materialization.rb