solve 0.5.0 → 0.6.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/Gemfile +3 -16
- data/README.md +3 -4
- data/lib/solve/constraint.rb +11 -3
- data/lib/solve/demand.rb +2 -2
- data/lib/solve/gem_version.rb +1 -1
- data/lib/solve/graph.rb +5 -5
- data/lib/solve/version.rb +4 -0
- data/spec/unit/solve/constraint_spec.rb +216 -17
- data/spec/unit/solve/version_spec.rb +22 -0
- metadata +3 -3
data/Gemfile
CHANGED
@@ -3,37 +3,24 @@ source 'https://rubygems.org'
|
|
3
3
|
gemspec
|
4
4
|
|
5
5
|
group :development do
|
6
|
-
gem 'pry'
|
7
6
|
gem 'fuubar'
|
8
7
|
gem 'yard'
|
9
8
|
gem 'redcarpet'
|
10
|
-
gem 'guard'
|
11
9
|
gem 'guard-rspec'
|
12
10
|
gem 'guard-spork'
|
13
11
|
gem 'guard-yard'
|
14
|
-
|
15
|
-
platform :ruby_19 do
|
16
|
-
gem 'coolline'
|
17
|
-
end
|
12
|
+
gem 'coolline'
|
18
13
|
|
19
14
|
require 'rbconfig'
|
20
15
|
|
21
16
|
if RbConfig::CONFIG['target_os'] =~ /darwin/i
|
22
|
-
gem '
|
23
|
-
gem 'rb-fsevent', require: false
|
24
|
-
|
25
|
-
if `uname`.strip == 'Darwin' && `sw_vers -productVersion`.strip >= '10.8'
|
26
|
-
gem 'terminal-notifier-guard', '~> 1.5.3', require: false
|
27
|
-
end rescue Errno::ENOENT
|
17
|
+
gem 'ruby_gntp', require: false
|
28
18
|
|
29
19
|
elsif RbConfig::CONFIG['target_os'] =~ /linux/i
|
30
|
-
gem 'libnotify',
|
31
|
-
gem 'rb-inotify', require: false
|
20
|
+
gem 'libnotify', require: false
|
32
21
|
|
33
22
|
elsif RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i
|
34
23
|
gem 'win32console', require: false
|
35
|
-
gem 'rb-notifu', '>= 0.0.4', require: false
|
36
|
-
gem 'wdm', require: false
|
37
24
|
end
|
38
25
|
end
|
39
26
|
|
data/README.md
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
# Solve
|
2
2
|
[](http://badge.fury.io/rb/solve)
|
3
|
-
[](https://codeclimate.com/github/reset/solve)
|
3
|
+
[](http://travis-ci.org/RiotGames/solve)
|
4
|
+
[](https://gemnasium.com/RiotGames/solve)
|
6
5
|
|
7
|
-
A Ruby versioning constraint solver implementing [Semantic Versioning 2.0.0
|
6
|
+
A Ruby versioning constraint solver implementing [Semantic Versioning 2.0.0](http://semver.org).
|
8
7
|
|
9
8
|
## Installation
|
10
9
|
|
data/lib/solve/constraint.rb
CHANGED
@@ -189,9 +189,7 @@ module Solve
|
|
189
189
|
def satisfies?(target_version)
|
190
190
|
target_version = Version.new(target_version.to_s)
|
191
191
|
|
192
|
-
if
|
193
|
-
return false
|
194
|
-
end
|
192
|
+
return false if !version.zero? && greedy_match?(target_version)
|
195
193
|
|
196
194
|
compare(target_version)
|
197
195
|
end
|
@@ -217,6 +215,16 @@ module Solve
|
|
217
215
|
|
218
216
|
private
|
219
217
|
|
218
|
+
# Returns true if the given version is a pre-release and if the constraint
|
219
|
+
# does not include a pre-release and if the operator isn't < or <=.
|
220
|
+
# This avoids greedy matches, e.g. 2.0.0.alpha won't satisfy >= 1.0.0.
|
221
|
+
#
|
222
|
+
# @param [Solve::Version] target_version
|
223
|
+
#
|
224
|
+
def greedy_match?(target_version)
|
225
|
+
operator_type !~ /less/ && target_version.pre_release? && !version.pre_release?
|
226
|
+
end
|
227
|
+
|
220
228
|
# @param [Solve::Version] target
|
221
229
|
#
|
222
230
|
# @return [Boolean]
|
data/lib/solve/demand.rb
CHANGED
@@ -20,7 +20,7 @@ module Solve
|
|
20
20
|
# @param [Solve::Constraint, #to_s] constraint
|
21
21
|
def initialize(solver, name, constraint = ">= 0.0.0")
|
22
22
|
@solver = solver
|
23
|
-
@name
|
23
|
+
@name = name
|
24
24
|
@constraint = if constraint.is_a?(Solve::Constraint)
|
25
25
|
constraint
|
26
26
|
else
|
@@ -33,7 +33,7 @@ module Solve
|
|
33
33
|
# @return [Solve::Demand, nil]
|
34
34
|
def delete
|
35
35
|
unless solver.nil?
|
36
|
-
result
|
36
|
+
result = solver.remove_demand(self)
|
37
37
|
@solver = nil
|
38
38
|
result
|
39
39
|
end
|
data/lib/solve/gem_version.rb
CHANGED
data/lib/solve/graph.rb
CHANGED
@@ -157,11 +157,11 @@ module Solve
|
|
157
157
|
end
|
158
158
|
alias_method :eql?, :==
|
159
159
|
|
160
|
-
|
160
|
+
private
|
161
161
|
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
162
|
+
# @return [Array<Solve::Artifact>]
|
163
|
+
def artifact_collection
|
164
|
+
@artifacts.collect { |name, artifact| artifact }
|
165
|
+
end
|
166
166
|
end
|
167
167
|
end
|
data/lib/solve/version.rb
CHANGED
@@ -272,36 +272,130 @@ describe Solve::Constraint do
|
|
272
272
|
should satisfies(Solve::Version.new("1.0.0"))
|
273
273
|
end
|
274
274
|
|
275
|
-
context "
|
276
|
-
subject { Solve::Constraint.new("
|
275
|
+
context "strictly greater than (>) pre-release constraint" do
|
276
|
+
subject { Solve::Constraint.new("> 1.0.0-alpha") }
|
277
277
|
|
278
|
-
it
|
279
|
-
|
280
|
-
|
278
|
+
it { should_not satisfies("0.9.9+build") }
|
279
|
+
it { should_not satisfies("1.0.0-alpha") }
|
280
|
+
it { should satisfies("1.0.0-alpha.2") }
|
281
|
+
it { should satisfies("1.0.0") }
|
282
|
+
it { should satisfies("1.0.0+build") }
|
283
|
+
it { should satisfies("1.0.1-beta") }
|
284
|
+
it { should satisfies("1.0.1") }
|
285
|
+
it { should satisfies("1.0.1+build.2") }
|
286
|
+
it { should satisfies("2.0.0") }
|
281
287
|
end
|
282
288
|
|
283
|
-
context "
|
284
|
-
subject { Solve::Constraint.new("
|
289
|
+
context "strictly greater than (>)" do
|
290
|
+
subject { Solve::Constraint.new("> 1.0.0") }
|
285
291
|
|
286
|
-
it
|
287
|
-
|
288
|
-
|
292
|
+
it { should_not satisfies("0.9.9+build") }
|
293
|
+
it { should_not satisfies("1.0.0-alpha") }
|
294
|
+
it { should_not satisfies("1.0.0-alpha.2") }
|
295
|
+
it { should_not satisfies("1.0.0") }
|
296
|
+
it { should satisfies("1.0.0+build") }
|
297
|
+
it { should_not satisfies("1.0.1-beta") }
|
298
|
+
it { should satisfies("1.0.1") }
|
299
|
+
it { should satisfies("1.0.1+build.2") }
|
300
|
+
it { should satisfies("2.0.0") }
|
289
301
|
end
|
290
302
|
|
291
|
-
context "strictly greater than (>)" do
|
292
|
-
subject { Solve::Constraint.new("> 1.0.0
|
303
|
+
context "strictly greater than (>) build constraint" do
|
304
|
+
subject { Solve::Constraint.new("> 1.0.0+build") }
|
293
305
|
|
306
|
+
it { should_not satisfies("0.9.9+build") }
|
307
|
+
it { should_not satisfies("1.0.0-alpha") }
|
308
|
+
it { should_not satisfies("1.0.0-alpha.2") }
|
309
|
+
it { should_not satisfies("1.0.0") }
|
310
|
+
it { should_not satisfies("1.0.0+build") }
|
311
|
+
it { should_not satisfies("1.0.1-beta") }
|
312
|
+
it { should satisfies("1.0.1") }
|
313
|
+
it { should satisfies("1.0.1+build.2") }
|
294
314
|
it { should satisfies("2.0.0") }
|
315
|
+
end
|
316
|
+
|
317
|
+
context "greater than or equal to (>) zero pre-release constraint" do
|
318
|
+
subject { Solve::Constraint.new("> 0.0.0-alpha") }
|
319
|
+
|
320
|
+
it { should satisfies("0.9.9+build") }
|
321
|
+
it { should satisfies("1.0.0-alpha") }
|
322
|
+
it { should satisfies("1.0.0-alpha.2") }
|
295
323
|
it { should satisfies("1.0.0") }
|
296
|
-
it {
|
324
|
+
it { should satisfies("1.0.0+build") }
|
325
|
+
it { should satisfies("1.0.1-beta") }
|
326
|
+
it { should satisfies("1.0.1") }
|
327
|
+
it { should satisfies("1.0.1+build.2") }
|
328
|
+
it { should satisfies("2.0.0") }
|
329
|
+
end
|
330
|
+
|
331
|
+
context "greater than or equal to (>) zero constraint" do
|
332
|
+
subject { Solve::Constraint.new("> 0.0.0") }
|
333
|
+
|
334
|
+
it { should satisfies("0.9.9+build") }
|
335
|
+
it { should satisfies("1.0.0-alpha") }
|
336
|
+
it { should satisfies("1.0.0-alpha.2") }
|
337
|
+
it { should satisfies("1.0.0") }
|
338
|
+
it { should satisfies("1.0.0+build") }
|
339
|
+
it { should satisfies("1.0.1-beta") }
|
340
|
+
it { should satisfies("1.0.1") }
|
341
|
+
it { should satisfies("1.0.1+build.2") }
|
342
|
+
it { should satisfies("2.0.0") }
|
343
|
+
end
|
344
|
+
|
345
|
+
context "greater than or equal to (>) zero build constraint" do
|
346
|
+
subject { Solve::Constraint.new("> 0.0.0+build") }
|
347
|
+
|
348
|
+
it { should satisfies("0.9.9+build") }
|
349
|
+
it { should satisfies("1.0.0-alpha") }
|
350
|
+
it { should satisfies("1.0.0-alpha.2") }
|
351
|
+
it { should satisfies("1.0.0") }
|
352
|
+
it { should satisfies("1.0.0+build") }
|
353
|
+
it { should satisfies("1.0.1-beta") }
|
354
|
+
it { should satisfies("1.0.1") }
|
355
|
+
it { should satisfies("1.0.1+build.2") }
|
356
|
+
it { should satisfies("2.0.0") }
|
357
|
+
end
|
358
|
+
|
359
|
+
context "strictly less than (<) pre-release constraint" do
|
360
|
+
subject { Solve::Constraint.new("< 1.0.0-alpha.3") }
|
361
|
+
|
362
|
+
it { should satisfies("0.9.9+build") }
|
363
|
+
it { should satisfies("1.0.0-alpha") }
|
364
|
+
it { should satisfies("1.0.0-alpha.2") }
|
365
|
+
it { should_not satisfies("1.0.0") }
|
366
|
+
it { should_not satisfies("1.0.0+build") }
|
367
|
+
it { should_not satisfies("1.0.1-beta") }
|
368
|
+
it { should_not satisfies("1.0.1") }
|
369
|
+
it { should_not satisfies("1.0.1+build.2") }
|
370
|
+
it { should_not satisfies("2.0.0") }
|
297
371
|
end
|
298
372
|
|
299
373
|
context "strictly less than (<)" do
|
374
|
+
subject { Solve::Constraint.new("< 1.0.0") }
|
375
|
+
|
376
|
+
it { should satisfies("0.9.9+build") }
|
377
|
+
it { should satisfies("1.0.0-alpha") }
|
378
|
+
it { should satisfies("1.0.0-alpha.2") }
|
379
|
+
it { should_not satisfies("1.0.0") }
|
380
|
+
it { should_not satisfies("1.0.0+build") }
|
381
|
+
it { should_not satisfies("1.0.1-beta") }
|
382
|
+
it { should_not satisfies("1.0.1") }
|
383
|
+
it { should_not satisfies("1.0.1+build.2") }
|
384
|
+
it { should_not satisfies("2.0.0") }
|
385
|
+
end
|
386
|
+
|
387
|
+
context "strictly less than (<) build constraint" do
|
300
388
|
subject { Solve::Constraint.new("< 1.0.0+build.20") }
|
301
389
|
|
302
|
-
it { should satisfies("0.
|
390
|
+
it { should satisfies("0.9.9+build") }
|
391
|
+
it { should satisfies("1.0.0-alpha") }
|
392
|
+
it { should satisfies("1.0.0-alpha.2") }
|
303
393
|
it { should satisfies("1.0.0") }
|
304
|
-
it {
|
394
|
+
it { should satisfies("1.0.0+build") }
|
395
|
+
it { should_not satisfies("1.0.1-beta") }
|
396
|
+
it { should_not satisfies("1.0.1") }
|
397
|
+
it { should_not satisfies("1.0.1+build.2") }
|
398
|
+
it { should_not satisfies("2.0.0") }
|
305
399
|
end
|
306
400
|
|
307
401
|
context "strictly equal to (=)" do
|
@@ -313,24 +407,129 @@ describe Solve::Constraint do
|
|
313
407
|
it { should_not satisfies("1.0.0-alpha") }
|
314
408
|
end
|
315
409
|
|
410
|
+
context "greater than or equal to (>=) pre-release constraint" do
|
411
|
+
subject { Solve::Constraint.new(">= 1.0.0-alpha") }
|
412
|
+
|
413
|
+
it { should_not satisfies("0.9.9+build") }
|
414
|
+
it { should satisfies("1.0.0-alpha") }
|
415
|
+
it { should satisfies("1.0.0-alpha.2") }
|
416
|
+
it { should satisfies("1.0.0") }
|
417
|
+
it { should satisfies("1.0.0+build") }
|
418
|
+
it { should satisfies("1.0.1-beta") }
|
419
|
+
it { should satisfies("1.0.1") }
|
420
|
+
it { should satisfies("1.0.1+build.2") }
|
421
|
+
it { should satisfies("2.0.0") }
|
422
|
+
end
|
423
|
+
|
316
424
|
context "greater than or equal to (>=)" do
|
317
425
|
subject { Solve::Constraint.new(">= 1.0.0") }
|
318
426
|
|
319
427
|
it { should_not satisfies("0.9.9+build") }
|
320
428
|
it { should_not satisfies("1.0.0-alpha") }
|
429
|
+
it { should_not satisfies("1.0.0-alpha.2") }
|
321
430
|
it { should satisfies("1.0.0") }
|
431
|
+
it { should satisfies("1.0.0+build") }
|
432
|
+
it { should_not satisfies("1.0.1-beta") }
|
322
433
|
it { should satisfies("1.0.1") }
|
434
|
+
it { should satisfies("1.0.1+build.2") }
|
323
435
|
it { should satisfies("2.0.0") }
|
324
436
|
end
|
325
437
|
|
326
|
-
context "greater than or equal to (
|
438
|
+
context "greater than or equal to (>=) build constraint" do
|
439
|
+
subject { Solve::Constraint.new(">= 1.0.0+build") }
|
440
|
+
|
441
|
+
it { should_not satisfies("0.9.9+build") }
|
442
|
+
it { should_not satisfies("1.0.0-alpha") }
|
443
|
+
it { should_not satisfies("1.0.0-alpha.2") }
|
444
|
+
it { should_not satisfies("1.0.0") }
|
445
|
+
it { should satisfies("1.0.0+build") }
|
446
|
+
it { should_not satisfies("1.0.1-beta") }
|
447
|
+
it { should satisfies("1.0.1") }
|
448
|
+
it { should satisfies("1.0.1+build.2") }
|
449
|
+
it { should satisfies("2.0.0") }
|
450
|
+
end
|
451
|
+
|
452
|
+
context "greater than or equal to (>=) zero pre-release constraint" do
|
453
|
+
subject { Solve::Constraint.new(">= 0.0.0-alpha") }
|
454
|
+
|
455
|
+
it { should satisfies("0.9.9+build") }
|
456
|
+
it { should satisfies("1.0.0-alpha") }
|
457
|
+
it { should satisfies("1.0.0-alpha.2") }
|
458
|
+
it { should satisfies("1.0.0") }
|
459
|
+
it { should satisfies("1.0.0+build") }
|
460
|
+
it { should satisfies("1.0.1-beta") }
|
461
|
+
it { should satisfies("1.0.1") }
|
462
|
+
it { should satisfies("1.0.1+build.2") }
|
463
|
+
it { should satisfies("2.0.0") }
|
464
|
+
end
|
465
|
+
|
466
|
+
context "greater than or equal to (>=) zero constraint" do
|
467
|
+
subject { Solve::Constraint.new(">= 0.0.0") }
|
468
|
+
|
469
|
+
it { should satisfies("0.9.9+build") }
|
470
|
+
it { should satisfies("1.0.0-alpha") }
|
471
|
+
it { should satisfies("1.0.0-alpha.2") }
|
472
|
+
it { should satisfies("1.0.0") }
|
473
|
+
it { should satisfies("1.0.0+build") }
|
474
|
+
it { should satisfies("1.0.1-beta") }
|
475
|
+
it { should satisfies("1.0.1") }
|
476
|
+
it { should satisfies("1.0.1+build.2") }
|
477
|
+
it { should satisfies("2.0.0") }
|
478
|
+
end
|
479
|
+
|
480
|
+
context "greater than or equal to (>=) zero build constraint" do
|
481
|
+
subject { Solve::Constraint.new(">= 0.0.0+build") }
|
482
|
+
|
483
|
+
it { should satisfies("0.9.9+build") }
|
484
|
+
it { should satisfies("1.0.0-alpha") }
|
485
|
+
it { should satisfies("1.0.0-alpha.2") }
|
486
|
+
it { should satisfies("1.0.0") }
|
487
|
+
it { should satisfies("1.0.0+build") }
|
488
|
+
it { should satisfies("1.0.1-beta") }
|
489
|
+
it { should satisfies("1.0.1") }
|
490
|
+
it { should satisfies("1.0.1+build.2") }
|
491
|
+
it { should satisfies("2.0.0") }
|
492
|
+
end
|
493
|
+
|
494
|
+
context "lower than or equal to (<=) pre-release constraint" do
|
327
495
|
subject { Solve::Constraint.new("<= 1.0.0") }
|
328
496
|
|
329
497
|
it { should satisfies("0.9.9+build") }
|
330
|
-
it {
|
498
|
+
it { should satisfies("1.0.0-alpha") }
|
499
|
+
it { should satisfies("1.0.0-alpha.2") }
|
331
500
|
it { should satisfies("1.0.0") }
|
332
501
|
it { should_not satisfies("1.0.0+build") }
|
502
|
+
it { should_not satisfies("1.0.1-beta") }
|
503
|
+
it { should_not satisfies("1.0.1") }
|
504
|
+
it { should_not satisfies("1.0.1+build.2") }
|
505
|
+
it { should_not satisfies("2.0.0") }
|
506
|
+
end
|
507
|
+
|
508
|
+
context "lower than or equal to (<=)" do
|
509
|
+
subject { Solve::Constraint.new("<= 1.0.0-alpha") }
|
510
|
+
|
511
|
+
it { should satisfies("0.9.9+build") }
|
512
|
+
it { should satisfies("1.0.0-alpha") }
|
513
|
+
it { should_not satisfies("1.0.0-alpha.2") }
|
514
|
+
it { should_not satisfies("1.0.0") }
|
515
|
+
it { should_not satisfies("1.0.0+build") }
|
516
|
+
it { should_not satisfies("1.0.1-beta") }
|
517
|
+
it { should_not satisfies("1.0.1") }
|
518
|
+
it { should_not satisfies("1.0.1+build.2") }
|
519
|
+
it { should_not satisfies("2.0.0") }
|
520
|
+
end
|
521
|
+
|
522
|
+
context "lower than or equal to (<=) build constraint" do
|
523
|
+
subject { Solve::Constraint.new("<= 1.0.0+build") }
|
524
|
+
|
525
|
+
it { should satisfies("0.9.9+build") }
|
526
|
+
it { should satisfies("1.0.0-alpha") }
|
527
|
+
it { should satisfies("1.0.0-alpha.2") }
|
528
|
+
it { should satisfies("1.0.0") }
|
529
|
+
it { should satisfies("1.0.0+build") }
|
530
|
+
it { should_not satisfies("1.0.1-beta") }
|
333
531
|
it { should_not satisfies("1.0.1") }
|
532
|
+
it { should_not satisfies("1.0.1+build.2") }
|
334
533
|
it { should_not satisfies("2.0.0") }
|
335
534
|
end
|
336
535
|
|
@@ -294,6 +294,28 @@ describe Solve::Version do
|
|
294
294
|
end
|
295
295
|
end
|
296
296
|
|
297
|
+
describe "#zero?" do
|
298
|
+
context "major, minor and patch are equal to 0" do
|
299
|
+
subject { described_class.new("0.0.0").zero? }
|
300
|
+
it { should be_true }
|
301
|
+
end
|
302
|
+
|
303
|
+
context "major is not equal to 0" do
|
304
|
+
subject { described_class.new("1.0.0").zero? }
|
305
|
+
it { should be_false }
|
306
|
+
end
|
307
|
+
|
308
|
+
context "minor is not equal to 0" do
|
309
|
+
subject { described_class.new("0.1.0").zero? }
|
310
|
+
it { should be_false }
|
311
|
+
end
|
312
|
+
|
313
|
+
context "patch is not equal to 0" do
|
314
|
+
subject { described_class.new("0.0.1").zero? }
|
315
|
+
it { should be_false }
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
297
319
|
describe "#to_s" do
|
298
320
|
subject { Solve::Version.new("1.0.0-rc.1+build.1") }
|
299
321
|
|
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.6.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2013-06-
|
14
|
+
date: 2013-06-27 00:00:00.000000000 Z
|
15
15
|
dependencies: []
|
16
16
|
description: A Ruby version constraint solver
|
17
17
|
email:
|
@@ -78,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
78
|
version: '0'
|
79
79
|
segments:
|
80
80
|
- 0
|
81
|
-
hash:
|
81
|
+
hash: 682127496261768650
|
82
82
|
requirements: []
|
83
83
|
rubyforge_project:
|
84
84
|
rubygems_version: 1.8.23
|