solve 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +5 -0
- data/README.md +8 -7
- data/lib/solve.rb +10 -29
- data/lib/solve/artifact.rb +91 -52
- data/lib/solve/constraint.rb +109 -24
- data/lib/solve/demand.rb +26 -17
- data/lib/solve/dependency.rb +15 -1
- data/lib/solve/errors.rb +23 -20
- data/lib/solve/gem_version.rb +1 -1
- data/lib/solve/graph.rb +76 -84
- data/lib/solve/solver.rb +246 -0
- data/lib/solve/solver/constraint_row.rb +17 -0
- data/lib/solve/solver/constraint_table.rb +27 -0
- data/lib/solve/solver/variable.rb +41 -0
- data/lib/solve/solver/variable_table.rb +50 -0
- data/lib/solve/version.rb +53 -16
- data/solve.gemspec +2 -3
- data/spec/acceptance/solutions_spec.rb +81 -8
- data/spec/unit/solve/artifact_spec.rb +73 -49
- data/spec/unit/solve/constraint_spec.rb +36 -30
- data/spec/unit/solve/demand_spec.rb +22 -13
- data/spec/unit/solve/dependency_spec.rb +15 -0
- data/spec/unit/solve/graph_spec.rb +98 -142
- data/spec/unit/solve/solver_spec.rb +302 -0
- data/spec/unit/solve/version_spec.rb +110 -0
- metadata +42 -96
- data/lib/solve/core_ext.rb +0 -3
- data/lib/solve/core_ext/kernel.rb +0 -33
@@ -0,0 +1,302 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Solve::Solver do
|
4
|
+
let(:graph) { double('graph') }
|
5
|
+
|
6
|
+
describe "ClassMethods" do
|
7
|
+
subject { Solve::Solver }
|
8
|
+
|
9
|
+
describe "::new" do
|
10
|
+
let(:demand_array) { ["nginx", "ntp"] }
|
11
|
+
|
12
|
+
it "adds a demand for each element in the array" do
|
13
|
+
obj = subject.new(graph, demand_array)
|
14
|
+
|
15
|
+
obj.demands.should have(2).items
|
16
|
+
end
|
17
|
+
|
18
|
+
context "when demand_array is an array of array" do
|
19
|
+
let(:demand_array) { [["nginx", "= 1.2.3"], ["ntp", "= 1.0.0"]] }
|
20
|
+
|
21
|
+
it "creates a new demand with the name and constraint of each element in the array" do
|
22
|
+
obj = subject.new(graph, demand_array)
|
23
|
+
|
24
|
+
obj.demands[0].name.should eql("nginx")
|
25
|
+
obj.demands[0].constraint.to_s.should eql("= 1.2.3")
|
26
|
+
obj.demands[1].name.should eql("ntp")
|
27
|
+
obj.demands[1].constraint.to_s.should eql("= 1.0.0")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "when demand_array is an array of strings" do
|
32
|
+
let(:demand_array) { ["nginx", "ntp"] }
|
33
|
+
|
34
|
+
it "creates a new demand with the name and a default constraint of each element in the array" do
|
35
|
+
obj = subject.new(graph, demand_array)
|
36
|
+
|
37
|
+
obj.demands[0].name.should eql("nginx")
|
38
|
+
obj.demands[0].constraint.to_s.should eql(">= 0.0.0")
|
39
|
+
obj.demands[1].name.should eql("ntp")
|
40
|
+
obj.demands[1].constraint.to_s.should eql(">= 0.0.0")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "when demand_array is a mix between an array of arrays and an array of strings" do
|
45
|
+
let(:demand_array) { [["nginx", "= 1.2.3"], "ntp"] }
|
46
|
+
|
47
|
+
it "creates a new demand with the name and default constraint or constraint of each element in the array" do
|
48
|
+
obj = subject.new(graph, demand_array)
|
49
|
+
|
50
|
+
obj.demands[0].name.should eql("nginx")
|
51
|
+
obj.demands[0].constraint.to_s.should eql("= 1.2.3")
|
52
|
+
obj.demands[1].name.should eql("ntp")
|
53
|
+
obj.demands[1].constraint.to_s.should eql(">= 0.0.0")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "::demand_key" do
|
59
|
+
let(:demand) { Solve::Demand.new(double('solver'), "nginx", "= 1.2.3") }
|
60
|
+
|
61
|
+
it "returns a symbol containing the name and constraint of the demand" do
|
62
|
+
subject.demand_key(demand).should eql(:'nginx-= 1.2.3')
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "::satisfy_all" do
|
67
|
+
let(:ver_one) { Solve::Version.new("3.1.1") }
|
68
|
+
let(:ver_two) { Solve::Version.new("3.1.2") }
|
69
|
+
|
70
|
+
let(:constraints) do
|
71
|
+
[
|
72
|
+
Solve::Constraint.new("> 3.0.0"),
|
73
|
+
Solve::Constraint.new("<= 3.1.2")
|
74
|
+
]
|
75
|
+
end
|
76
|
+
|
77
|
+
let(:versions) do
|
78
|
+
[
|
79
|
+
Solve::Version.new("0.0.1"),
|
80
|
+
Solve::Version.new("0.1.0"),
|
81
|
+
Solve::Version.new("1.0.0"),
|
82
|
+
Solve::Version.new("2.0.0"),
|
83
|
+
Solve::Version.new("3.0.0"),
|
84
|
+
ver_one,
|
85
|
+
ver_two,
|
86
|
+
Solve::Version.new("4.1.0")
|
87
|
+
].shuffle
|
88
|
+
end
|
89
|
+
|
90
|
+
it "returns all of the versions which satisfy all of the given constraints" do
|
91
|
+
solution = subject.satisfy_all(constraints, versions)
|
92
|
+
|
93
|
+
solution.should have(2).items
|
94
|
+
solution.should include(ver_one)
|
95
|
+
solution.should include(ver_two)
|
96
|
+
end
|
97
|
+
|
98
|
+
context "given multiple duplicate versions" do
|
99
|
+
let(:versions) do
|
100
|
+
[
|
101
|
+
ver_one,
|
102
|
+
ver_one,
|
103
|
+
ver_one
|
104
|
+
]
|
105
|
+
end
|
106
|
+
|
107
|
+
it "does not return duplicate satisfied versions" do
|
108
|
+
solution = subject.satisfy_all(constraints, versions)
|
109
|
+
|
110
|
+
solution.should have(1).item
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "::satisfy_best" do
|
116
|
+
let(:versions) do
|
117
|
+
[
|
118
|
+
Solve::Version.new("0.0.1"),
|
119
|
+
Solve::Version.new("0.1.0"),
|
120
|
+
Solve::Version.new("1.0.0"),
|
121
|
+
Solve::Version.new("2.0.0"),
|
122
|
+
Solve::Version.new("3.0.0"),
|
123
|
+
Solve::Version.new("3.1.1"),
|
124
|
+
Solve::Version.new("3.1.2"),
|
125
|
+
Solve::Version.new("4.1.0")
|
126
|
+
].shuffle
|
127
|
+
end
|
128
|
+
|
129
|
+
it "returns the best possible match for the given constraints" do
|
130
|
+
subject.satisfy_best([">= 1.0.0", "< 4.1.0"], versions).to_s.should eql("3.1.2")
|
131
|
+
end
|
132
|
+
|
133
|
+
context "given no version matches a constraint" do
|
134
|
+
let(:versions) do
|
135
|
+
[
|
136
|
+
Solve::Version.new("4.1.0")
|
137
|
+
]
|
138
|
+
end
|
139
|
+
|
140
|
+
it "raises a NoSolutionError error" do
|
141
|
+
lambda {
|
142
|
+
subject.satisfy_best(">= 5.0.0", versions)
|
143
|
+
}.should raise_error(Solve::Errors::NoSolutionError)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
subject { Solve::Solver.new(graph) }
|
150
|
+
|
151
|
+
describe "#resolve" do
|
152
|
+
let(:graph) { Solve::Graph.new }
|
153
|
+
|
154
|
+
subject { Solve::Solver.new(graph) }
|
155
|
+
|
156
|
+
before(:each) do
|
157
|
+
graph.artifacts("nginx", "1.0.0")
|
158
|
+
subject.demands("nginx", "= 1.0.0")
|
159
|
+
end
|
160
|
+
|
161
|
+
it "returns a solution in the form of a Hash" do
|
162
|
+
subject.resolve.should be_a(Hash)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
describe "#demands" do
|
167
|
+
context "given a name and constraint argument" do
|
168
|
+
let(:name) { "nginx" }
|
169
|
+
let(:constraint) { "~> 0.101.5" }
|
170
|
+
|
171
|
+
context "given the artifact of the given name and constraint does not exist" do
|
172
|
+
it "returns a Solve::Demand" do
|
173
|
+
subject.demands(name, constraint).should be_a(Solve::Demand)
|
174
|
+
end
|
175
|
+
|
176
|
+
it "the artifact has the given name" do
|
177
|
+
subject.demands(name, constraint).name.should eql(name)
|
178
|
+
end
|
179
|
+
|
180
|
+
it "the artifact has the given constraint" do
|
181
|
+
subject.demands(name, constraint).constraint.to_s.should eql(constraint)
|
182
|
+
end
|
183
|
+
|
184
|
+
it "adds an artifact to the demands collection" do
|
185
|
+
subject.demands(name, constraint)
|
186
|
+
|
187
|
+
subject.demands.should have(1).item
|
188
|
+
end
|
189
|
+
|
190
|
+
it "the artifact added matches the given name" do
|
191
|
+
subject.demands(name, constraint)
|
192
|
+
|
193
|
+
subject.demands[0].name.should eql(name)
|
194
|
+
end
|
195
|
+
|
196
|
+
it "the artifact added matches the given constraint" do
|
197
|
+
subject.demands(name, constraint)
|
198
|
+
|
199
|
+
subject.demands[0].constraint.to_s.should eql(constraint)
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
context "given only a name argument" do
|
205
|
+
it "returns a demand with a match all version constraint (>= 0.0.0)" do
|
206
|
+
subject.demands("nginx").constraint.to_s.should eql(">= 0.0.0")
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
context "given no arguments" do
|
211
|
+
it "returns an array" do
|
212
|
+
subject.demands.should be_a(Array)
|
213
|
+
end
|
214
|
+
|
215
|
+
it "returns an empty array if no demands have been accessed" do
|
216
|
+
subject.demands.should have(0).items
|
217
|
+
end
|
218
|
+
|
219
|
+
it "returns an array containing a demand if one was accessed" do
|
220
|
+
subject.demands("nginx", "~> 0.101.5")
|
221
|
+
|
222
|
+
subject.demands.should have(1).item
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
context "given an unexpected number of arguments" do
|
227
|
+
it "raises an ArgumentError if more than two are provided" do
|
228
|
+
lambda {
|
229
|
+
subject.demands(1, 2, 3)
|
230
|
+
}.should raise_error(ArgumentError, "Unexpected number of arguments. You gave: 3. Expected: 2 or less.")
|
231
|
+
end
|
232
|
+
|
233
|
+
it "raises an ArgumentError if a name argument of nil is provided" do
|
234
|
+
lambda {
|
235
|
+
subject.demands(nil)
|
236
|
+
}.should raise_error(ArgumentError, "A name must be specified. You gave: [nil].")
|
237
|
+
end
|
238
|
+
|
239
|
+
it "raises an ArgumentError if a name and constraint argument are provided but name is nil" do
|
240
|
+
lambda {
|
241
|
+
subject.demands(nil, "= 1.0.0")
|
242
|
+
}.should raise_error(ArgumentError, 'A name must be specified. You gave: [nil, "= 1.0.0"].')
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
describe "#add_demand" do
|
248
|
+
let(:demand) { Solve::Demand.new(double('graph'), 'ntp') }
|
249
|
+
|
250
|
+
it "adds a Solve::Artifact to the collection of artifacts" do
|
251
|
+
subject.add_demand(demand)
|
252
|
+
|
253
|
+
subject.should have_demand(demand)
|
254
|
+
subject.demands.should have(1).item
|
255
|
+
end
|
256
|
+
|
257
|
+
it "should not add the same demand twice to the collection" do
|
258
|
+
subject.add_demand(demand)
|
259
|
+
subject.add_demand(demand)
|
260
|
+
|
261
|
+
subject.demands.should have(1).item
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
describe "#remove_demand" do
|
266
|
+
let(:demand) { Solve::Demand.new(double('graph'), 'ntp') }
|
267
|
+
|
268
|
+
context "given the demand is a member of the collection" do
|
269
|
+
before(:each) { subject.add_demand(demand) }
|
270
|
+
|
271
|
+
it "removes the Solve::Artifact from the collection of demands" do
|
272
|
+
subject.remove_demand(demand)
|
273
|
+
|
274
|
+
subject.demands.should have(0).items
|
275
|
+
end
|
276
|
+
|
277
|
+
it "returns the removed Solve::Artifact" do
|
278
|
+
subject.remove_demand(demand).should eql(demand)
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
context "given the demand is not a member of the collection" do
|
283
|
+
it "should return nil" do
|
284
|
+
subject.remove_demand(demand).should be_nil
|
285
|
+
end
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
describe "#has_demand?" do
|
290
|
+
let(:demand) { Solve::Demand.new(double('graph'), 'ntp') }
|
291
|
+
|
292
|
+
it "returns true if the given Solve::Artifact is a member of the collection" do
|
293
|
+
subject.add_demand(demand)
|
294
|
+
|
295
|
+
subject.has_demand?(demand).should be_true
|
296
|
+
end
|
297
|
+
|
298
|
+
it "returns false if the given Solve::Artifact is not a member of the collection" do
|
299
|
+
subject.has_demand?(demand).should be_false
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
@@ -1,6 +1,116 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Solve::Version do
|
4
|
+
describe "ClassMethods" do
|
5
|
+
subject { Solve::Version }
|
6
|
+
|
7
|
+
describe "::new" do
|
8
|
+
context "a string containing a major, minor, and patch separated by periods" do
|
9
|
+
before(:each) { @version = subject.new("1.2.3") }
|
10
|
+
|
11
|
+
it "assigns a major value" do
|
12
|
+
@version.major.should eql(1)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "assigns a minor value" do
|
16
|
+
@version.minor.should eql(2)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "assigns a patch value" do
|
20
|
+
@version.patch.should eql(3)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "a three element array" do
|
25
|
+
before(:each) { @version = subject.new([1,2,3]) }
|
26
|
+
|
27
|
+
it "assigns a major value" do
|
28
|
+
@version.major.should eql(1)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "assigns a minor value" do
|
32
|
+
@version.minor.should eql(2)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "assigns a patch value" do
|
36
|
+
@version.patch.should eql(3)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "a two element array" do
|
41
|
+
before(:each) { @version = subject.new([1,2]) }
|
42
|
+
|
43
|
+
it "assigns a major value" do
|
44
|
+
@version.major.should eql(1)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "assigns a minor value" do
|
48
|
+
@version.minor.should eql(2)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "sets the patch value to 0 (zero)" do
|
52
|
+
@version.patch.should eql(0)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "a one element array" do
|
57
|
+
before(:each) { @version = subject.new([1]) }
|
58
|
+
|
59
|
+
it "assigns the major value" do
|
60
|
+
@version.major.should eql(1)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "sets the minor value to 0 (zero)" do
|
64
|
+
@version.minor.should eql(0)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "sets the patch value to 0 (zero)" do
|
68
|
+
@version.patch.should eql(0)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context "an empty array" do
|
73
|
+
before(:each) { @version = subject.new(Array.new) }
|
74
|
+
|
75
|
+
it "sets the majro value to 0 (zero)" do
|
76
|
+
@version.major.should eql(0)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "sets the minor value to 0 (zero)" do
|
80
|
+
@version.minor.should eql(0)
|
81
|
+
end
|
82
|
+
|
83
|
+
it "sets the patch value to 0 (zero)" do
|
84
|
+
@version.patch.should eql(0)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "::split" do
|
90
|
+
it "returns an array containing 3 elements" do
|
91
|
+
subject.split("1.2.0").should have(3).items
|
92
|
+
end
|
93
|
+
|
94
|
+
context "given a string only containing a major and minor version" do
|
95
|
+
it "returns an array containing 3 elements" do
|
96
|
+
subject.split("1.2").should have(3).items
|
97
|
+
end
|
98
|
+
|
99
|
+
it "returns nil as the third element" do
|
100
|
+
subject.split("1.2")[2].should be_nil
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context "given a string with only a major version" do
|
105
|
+
it "raises an InvalidVersionFormat error" do
|
106
|
+
lambda {
|
107
|
+
subject.split("1")
|
108
|
+
}.should raise_error(Solve::Errors::InvalidVersionFormat)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
4
114
|
subject { Solve::Version.new("1.0.0") }
|
5
115
|
|
6
116
|
describe "#to_s" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solve
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,43 +9,33 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-25 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: dep_selector
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ~>
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: 0.0.8
|
22
|
-
type: :runtime
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 0.0.8
|
30
14
|
- !ruby/object:Gem::Dependency
|
31
15
|
name: thor
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70233888694760 !ruby/object:Gem::Requirement
|
33
17
|
none: false
|
34
18
|
requirements:
|
35
19
|
- - ! '>='
|
36
20
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
21
|
+
version: 0.16.0
|
38
22
|
type: :development
|
39
23
|
prerelease: false
|
40
|
-
version_requirements:
|
24
|
+
version_requirements: *70233888694760
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &70233888694060 !ruby/object:Gem::Requirement
|
41
28
|
none: false
|
42
29
|
requirements:
|
43
30
|
- - ! '>='
|
44
31
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
32
|
+
version: 0.9.2.2
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70233888694060
|
46
36
|
- !ruby/object:Gem::Dependency
|
47
37
|
name: rspec
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &70233888692060 !ruby/object:Gem::Requirement
|
49
39
|
none: false
|
50
40
|
requirements:
|
51
41
|
- - ! '>='
|
@@ -53,15 +43,10 @@ dependencies:
|
|
53
43
|
version: '0'
|
54
44
|
type: :development
|
55
45
|
prerelease: false
|
56
|
-
version_requirements:
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
46
|
+
version_requirements: *70233888692060
|
62
47
|
- !ruby/object:Gem::Dependency
|
63
48
|
name: fuubar
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirement: &70233888691380 !ruby/object:Gem::Requirement
|
65
50
|
none: false
|
66
51
|
requirements:
|
67
52
|
- - ! '>='
|
@@ -69,15 +54,10 @@ dependencies:
|
|
69
54
|
version: '0'
|
70
55
|
type: :development
|
71
56
|
prerelease: false
|
72
|
-
version_requirements:
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ! '>='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
57
|
+
version_requirements: *70233888691380
|
78
58
|
- !ruby/object:Gem::Dependency
|
79
59
|
name: spork
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirement: &70233888690880 !ruby/object:Gem::Requirement
|
81
61
|
none: false
|
82
62
|
requirements:
|
83
63
|
- - ! '>='
|
@@ -85,15 +65,10 @@ dependencies:
|
|
85
65
|
version: '0'
|
86
66
|
type: :development
|
87
67
|
prerelease: false
|
88
|
-
version_requirements:
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ! '>='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '0'
|
68
|
+
version_requirements: *70233888690880
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: yard
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirement: &70233888683680 !ruby/object:Gem::Requirement
|
97
72
|
none: false
|
98
73
|
requirements:
|
99
74
|
- - ! '>='
|
@@ -101,15 +76,10 @@ dependencies:
|
|
101
76
|
version: '0'
|
102
77
|
type: :development
|
103
78
|
prerelease: false
|
104
|
-
version_requirements:
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ! '>='
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
79
|
+
version_requirements: *70233888683680
|
110
80
|
- !ruby/object:Gem::Dependency
|
111
81
|
name: redcarpet
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
82
|
+
requirement: &70233888683020 !ruby/object:Gem::Requirement
|
113
83
|
none: false
|
114
84
|
requirements:
|
115
85
|
- - ! '>='
|
@@ -117,15 +87,10 @@ dependencies:
|
|
117
87
|
version: '0'
|
118
88
|
type: :development
|
119
89
|
prerelease: false
|
120
|
-
version_requirements:
|
121
|
-
none: false
|
122
|
-
requirements:
|
123
|
-
- - ! '>='
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '0'
|
90
|
+
version_requirements: *70233888683020
|
126
91
|
- !ruby/object:Gem::Dependency
|
127
92
|
name: guard
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirement: &70233888682320 !ruby/object:Gem::Requirement
|
129
94
|
none: false
|
130
95
|
requirements:
|
131
96
|
- - ! '>='
|
@@ -133,15 +98,10 @@ dependencies:
|
|
133
98
|
version: '0'
|
134
99
|
type: :development
|
135
100
|
prerelease: false
|
136
|
-
version_requirements:
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ! '>='
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: '0'
|
101
|
+
version_requirements: *70233888682320
|
142
102
|
- !ruby/object:Gem::Dependency
|
143
103
|
name: guard-rspec
|
144
|
-
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirement: &70233888681480 !ruby/object:Gem::Requirement
|
145
105
|
none: false
|
146
106
|
requirements:
|
147
107
|
- - ! '>='
|
@@ -149,15 +109,10 @@ dependencies:
|
|
149
109
|
version: '0'
|
150
110
|
type: :development
|
151
111
|
prerelease: false
|
152
|
-
version_requirements:
|
153
|
-
none: false
|
154
|
-
requirements:
|
155
|
-
- - ! '>='
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
version: '0'
|
112
|
+
version_requirements: *70233888681480
|
158
113
|
- !ruby/object:Gem::Dependency
|
159
114
|
name: guard-spork
|
160
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirement: &70233888681000 !ruby/object:Gem::Requirement
|
161
116
|
none: false
|
162
117
|
requirements:
|
163
118
|
- - ! '>='
|
@@ -165,15 +120,10 @@ dependencies:
|
|
165
120
|
version: '0'
|
166
121
|
type: :development
|
167
122
|
prerelease: false
|
168
|
-
version_requirements:
|
169
|
-
none: false
|
170
|
-
requirements:
|
171
|
-
- - ! '>='
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0'
|
123
|
+
version_requirements: *70233888681000
|
174
124
|
- !ruby/object:Gem::Dependency
|
175
125
|
name: guard-yard
|
176
|
-
requirement: !ruby/object:Gem::Requirement
|
126
|
+
requirement: &70233888680540 !ruby/object:Gem::Requirement
|
177
127
|
none: false
|
178
128
|
requirements:
|
179
129
|
- - ! '>='
|
@@ -181,15 +131,10 @@ dependencies:
|
|
181
131
|
version: '0'
|
182
132
|
type: :development
|
183
133
|
prerelease: false
|
184
|
-
version_requirements:
|
185
|
-
none: false
|
186
|
-
requirements:
|
187
|
-
- - ! '>='
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version: '0'
|
134
|
+
version_requirements: *70233888680540
|
190
135
|
- !ruby/object:Gem::Dependency
|
191
136
|
name: coolline
|
192
|
-
requirement: !ruby/object:Gem::Requirement
|
137
|
+
requirement: &70233888680000 !ruby/object:Gem::Requirement
|
193
138
|
none: false
|
194
139
|
requirements:
|
195
140
|
- - ! '>='
|
@@ -197,12 +142,7 @@ dependencies:
|
|
197
142
|
version: '0'
|
198
143
|
type: :development
|
199
144
|
prerelease: false
|
200
|
-
version_requirements:
|
201
|
-
none: false
|
202
|
-
requirements:
|
203
|
-
- - ! '>='
|
204
|
-
- !ruby/object:Gem::Version
|
205
|
-
version: '0'
|
145
|
+
version_requirements: *70233888680000
|
206
146
|
description: A Ruby constraint solver
|
207
147
|
email:
|
208
148
|
- jamie@vialstudios.com
|
@@ -212,6 +152,7 @@ extra_rdoc_files: []
|
|
212
152
|
files:
|
213
153
|
- .gitignore
|
214
154
|
- .rbenv-version
|
155
|
+
- .travis.yml
|
215
156
|
- Gemfile
|
216
157
|
- Guardfile
|
217
158
|
- LICENSE
|
@@ -220,13 +161,16 @@ files:
|
|
220
161
|
- lib/solve.rb
|
221
162
|
- lib/solve/artifact.rb
|
222
163
|
- lib/solve/constraint.rb
|
223
|
-
- lib/solve/core_ext.rb
|
224
|
-
- lib/solve/core_ext/kernel.rb
|
225
164
|
- lib/solve/demand.rb
|
226
165
|
- lib/solve/dependency.rb
|
227
166
|
- lib/solve/errors.rb
|
228
167
|
- lib/solve/gem_version.rb
|
229
168
|
- lib/solve/graph.rb
|
169
|
+
- lib/solve/solver.rb
|
170
|
+
- lib/solve/solver/constraint_row.rb
|
171
|
+
- lib/solve/solver/constraint_table.rb
|
172
|
+
- lib/solve/solver/variable.rb
|
173
|
+
- lib/solve/solver/variable_table.rb
|
230
174
|
- lib/solve/version.rb
|
231
175
|
- solve.gemspec
|
232
176
|
- spec/acceptance/solutions_spec.rb
|
@@ -236,6 +180,7 @@ files:
|
|
236
180
|
- spec/unit/solve/demand_spec.rb
|
237
181
|
- spec/unit/solve/dependency_spec.rb
|
238
182
|
- spec/unit/solve/graph_spec.rb
|
183
|
+
- spec/unit/solve/solver_spec.rb
|
239
184
|
- spec/unit/solve/version_spec.rb
|
240
185
|
- spec/unit/solve_spec.rb
|
241
186
|
homepage: https://github.com/reset/solve
|
@@ -258,10 +203,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
258
203
|
version: '0'
|
259
204
|
segments:
|
260
205
|
- 0
|
261
|
-
hash:
|
206
|
+
hash: -4081621273929848192
|
262
207
|
requirements: []
|
263
208
|
rubyforge_project:
|
264
|
-
rubygems_version: 1.8.
|
209
|
+
rubygems_version: 1.8.10
|
265
210
|
signing_key:
|
266
211
|
specification_version: 3
|
267
212
|
summary: A Ruby constraint solver
|
@@ -273,6 +218,7 @@ test_files:
|
|
273
218
|
- spec/unit/solve/demand_spec.rb
|
274
219
|
- spec/unit/solve/dependency_spec.rb
|
275
220
|
- spec/unit/solve/graph_spec.rb
|
221
|
+
- spec/unit/solve/solver_spec.rb
|
276
222
|
- spec/unit/solve/version_spec.rb
|
277
223
|
- spec/unit/solve_spec.rb
|
278
224
|
has_rdoc:
|