summaryrefslogtreecommitdiff
path: root/lib/bundler/resolver.rb
diff options
context:
space:
mode:
authorSamuel Giddins <segiddins@segiddins.me>2017-07-18 11:50:24 -0500
committerSamuel Giddins <segiddins@segiddins.me>2017-08-01 10:07:19 -0500
commit962bafa7547231d7b38d9edd5d594dc3aef7534d (patch)
tree2f7a70ab204c7945401ad9c16e05a4ec82e9f69b /lib/bundler/resolver.rb
parent37eaa46a70668af0a26413ee42ad2f2bab3b6187 (diff)
downloadbundler-962bafa7547231d7b38d9edd5d594dc3aef7534d.tar.gz
Refactor SpecGroup to not subclass Array
Diffstat (limited to 'lib/bundler/resolver.rb')
-rw-r--r--lib/bundler/resolver.rb103
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