summaryrefslogtreecommitdiff
path: root/lib/bundler/resolver/base.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bundler/resolver/base.rb')
-rw-r--r--lib/bundler/resolver/base.rb50
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/bundler/resolver/base.rb b/lib/bundler/resolver/base.rb
new file mode 100644
index 0000000000..84e087b0ae
--- /dev/null
+++ b/lib/bundler/resolver/base.rb
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+
+module Bundler
+ class Resolver
+ class Base
+ def initialize(base, additional_base_requirements)
+ @base = base
+ @additional_base_requirements = additional_base_requirements
+ end
+
+ def [](name)
+ @base[name]
+ end
+
+ def delete(spec)
+ @base.delete(spec)
+ end
+
+ def base_requirements
+ @base_requirements ||= build_base_requirements
+ end
+
+ def unlock_deps(deps)
+ exact, lower_bound = deps.partition(&:specific?)
+
+ exact.each do |exact_dep|
+ @base.delete_by_name_and_version(exact_dep.name, exact_dep.requirement.requirements.first.last)
+ end
+
+ lower_bound.each do |lower_bound_dep|
+ @additional_base_requirements.delete(lower_bound_dep)
+ end
+
+ @base_requirements = nil
+ end
+
+ private
+
+ def build_base_requirements
+ base_requirements = {}
+ @base.each do |ls|
+ dep = Dependency.new(ls.name, ls.version)
+ base_requirements[ls.name] = DepProxy.get_proxy(dep, ls.platform)
+ end
+ @additional_base_requirements.each {|d| base_requirements[d.name] = d }
+ base_requirements
+ end
+ end
+ end
+end