1
2
3
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
require_relative 'package'
require_relative 'rubygems'
require_relative 'version_constraint'
require_relative 'incompatibility'
require_relative 'basic_package_source'
module Bundler::PubGrub
class StaticPackageSource < BasicPackageSource
class DSL
def initialize(packages, root_deps)
@packages = packages
@root_deps = root_deps
end
def root(deps:)
@root_deps.update(deps)
end
def add(name, version, deps: {})
version = Gem::Version.new(version)
@packages[name] ||= {}
raise ArgumentError, "#{name} #{version} declared twice" if @packages[name].key?(version)
@packages[name][version] = clean_deps(name, version, deps)
end
private
# Exclude redundant self-referencing dependencies
def clean_deps(name, version, deps)
deps.reject {|dep_name, req| name == dep_name && Bundler::PubGrub::RubyGems.parse_range(req).include?(version) }
end
end
def initialize
@root_deps = {}
@packages = {}
yield DSL.new(@packages, @root_deps)
super()
end
def all_versions_for(package)
@packages[package].keys
end
def root_dependencies
@root_deps
end
def dependencies_for(package, version)
@packages[package][version]
end
def parse_dependency(package, dependency)
return false unless @packages.key?(package)
Bundler::PubGrub::RubyGems.parse_constraint(package, dependency)
end
end
end
|