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 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 'growl', require: false
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', '~> 0.8.0', require: false
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
  [![Gem Version](https://badge.fury.io/rb/solve.png)](http://badge.fury.io/rb/solve)
3
- [![Build Status](https://secure.travis-ci.org/reset/solve.png?branch=master)](http://travis-ci.org/reset/solve)
4
- [![Dependency Status](https://gemnasium.com/reset/solve.png?travis)](https://gemnasium.com/reset/solve)
5
- [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/reset/solve)
3
+ [![Build Status](https://secure.travis-ci.org/RiotGames/solve.png?branch=master)](http://travis-ci.org/RiotGames/solve)
4
+ [![Dependency Status](https://gemnasium.com/RiotGames/solve.png?travis)](https://gemnasium.com/RiotGames/solve)
6
5
 
7
- A Ruby versioning constraint solver implementing [Semantic Versioning 2.0.0-rc.1](http://semver.org).
6
+ A Ruby versioning constraint solver implementing [Semantic Versioning 2.0.0](http://semver.org).
8
7
 
9
8
  ## Installation
10
9
 
@@ -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 target_version.pre_release? && !version.pre_release?
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 = 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 = solver.remove_demand(self)
36
+ result = solver.remove_demand(self)
37
37
  @solver = nil
38
38
  result
39
39
  end
@@ -1,3 +1,3 @@
1
1
  module Solve
2
- VERSION = "0.5.0"
2
+ VERSION = "0.6.0"
3
3
  end
data/lib/solve/graph.rb CHANGED
@@ -157,11 +157,11 @@ module Solve
157
157
  end
158
158
  alias_method :eql?, :==
159
159
 
160
- private
160
+ private
161
161
 
162
- # @return [Array<Solve::Artifact>]
163
- def artifact_collection
164
- @artifacts.collect { |name, artifact| artifact }
165
- end
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
@@ -93,6 +93,10 @@ module Solve
93
93
  !!pre_release
94
94
  end
95
95
 
96
+ def zero?
97
+ [major, minor, patch].all? { |n| n == 0 }
98
+ end
99
+
96
100
  # @return [Integer]
97
101
  def pre_release_and_build_presence_score
98
102
  pre_release ? 0 : (build.nil? ? 1 : 2)
@@ -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 "when the constraint contains a pre-release value" do
276
- subject { Solve::Constraint.new(">= 1.2.3-alpha") }
275
+ context "strictly greater than (>) pre-release constraint" do
276
+ subject { Solve::Constraint.new("> 1.0.0-alpha") }
277
277
 
278
- it "is satisfied by pre-release versions" do
279
- should satisfies("1.2.3-beta")
280
- end
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 "when the constraint does not contain a pre-release value" do
284
- subject { Solve::Constraint.new(">= 1.2.3") }
289
+ context "strictly greater than (>)" do
290
+ subject { Solve::Constraint.new("> 1.0.0") }
285
291
 
286
- it "is not satisfied by pre-release versions" do
287
- should_not satisfies("1.2.3-beta")
288
- end
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-alpha") }
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 { should_not satisfies("1.0.0-alpha") }
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.1.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 { should_not satisfies("1.0.0+build.21") }
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 (<=)" do
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 { should_not satisfies("1.0.0-alpha") }
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.5.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-13 00:00:00.000000000 Z
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: 2797902556656574855
81
+ hash: 682127496261768650
82
82
  requirements: []
83
83
  rubyforge_project:
84
84
  rubygems_version: 1.8.23