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.
@@ -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.2.1
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-07-09 00:00:00.000000000 Z
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: '0'
21
+ version: 0.16.0
38
22
  type: :development
39
23
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
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: '0'
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: 1692611676791310100
206
+ hash: -4081621273929848192
262
207
  requirements: []
263
208
  rubyforge_project:
264
- rubygems_version: 1.8.23
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: