diff options
| author | Samuel Giddins <segiddins@segiddins.me> | 2017-07-18 11:50:24 -0500 |
|---|---|---|
| committer | Samuel Giddins <segiddins@segiddins.me> | 2017-08-01 10:07:19 -0500 |
| commit | 962bafa7547231d7b38d9edd5d594dc3aef7534d (patch) | |
| tree | 2f7a70ab204c7945401ad9c16e05a4ec82e9f69b /lib/bundler/resolver.rb | |
| parent | 37eaa46a70668af0a26413ee42ad2f2bab3b6187 (diff) | |
| download | bundler-962bafa7547231d7b38d9edd5d594dc3aef7534d.tar.gz | |
Refactor SpecGroup to not subclass Array
Diffstat (limited to 'lib/bundler/resolver.rb')
| -rw-r--r-- | lib/bundler/resolver.rb | 103 |
1 files changed, 1 insertions, 102 deletions
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index 00cd0cad26..a3b9382a33 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -93,108 +93,7 @@ module Bundler end.strip end end - - class SpecGroup < Array - include GemHelpers - - attr_reader :activated - attr_accessor :ignores_bundler_dependencies - - def initialize(a) - super - @required_by = [] - @activated_platforms = [] - @dependencies = nil - @specs = Hash.new do |specs, platform| - specs[platform] = select_best_platform_match(self, platform) - end - @ignores_bundler_dependencies = true - end - - def initialize_copy(o) - super - @activated_platforms = o.activated.dup - end - - def to_specs - @activated_platforms.map do |p| - next unless s = @specs[p] - lazy_spec = LazySpecification.new(name, version, s.platform, source) - lazy_spec.dependencies.replace s.dependencies - lazy_spec - end.compact - end - - def activate_platform!(platform) - return unless for?(platform) - return if @activated_platforms.include?(platform) - @activated_platforms << platform - end - - def name - @name ||= first.name - end - - def version - @version ||= first.version - end - - def source - @source ||= first.source - end - - def for?(platform) - spec = @specs[platform] - !spec.nil? - end - - def to_s - "#{name} (#{version})" - end - - def dependencies_for_activated_platforms - dependencies = @activated_platforms.map {|p| __dependencies[p] } - metadata_dependencies = @activated_platforms.map do |platform| - metadata_dependencies(@specs[platform], platform) - end - dependencies.concat(metadata_dependencies).flatten - end - - def platforms_for_dependency_named(dependency) - __dependencies.select {|_, deps| deps.map(&:name).include? dependency }.keys - end - - private - - def __dependencies - @dependencies = Hash.new do |dependencies, platform| - dependencies[platform] = [] - if spec = @specs[platform] - spec.dependencies.each do |dep| - next if dep.type == :development - next if @ignores_bundler_dependencies && dep.name == "bundler".freeze - dependencies[platform] << DepProxy.new(dep, platform) - end - end - dependencies[platform] - end - end - - def metadata_dependencies(spec, platform) - return [] unless spec - # Only allow endpoint specifications since they won't hit the network to - # fetch the full gemspec when calling required_ruby_version - return [] if !spec.is_a?(EndpointSpecification) && !spec.is_a?(Gem::Specification) - dependencies = [] - if !spec.required_ruby_version.nil? && !spec.required_ruby_version.none? - dependencies << DepProxy.new(Gem::Dependency.new("ruby\0", spec.required_ruby_version), platform) - end - if !spec.required_rubygems_version.nil? && !spec.required_rubygems_version.none? - dependencies << DepProxy.new(Gem::Dependency.new("rubygems\0", spec.required_rubygems_version), platform) - end - dependencies - end - end + require "bundler/resolver/spec_group" # Figures out the best possible configuration of gems that satisfies # the list of passed dependencies and any child dependencies without |
