version_compare 0.0.2 → 0.1.1
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.
- checksums.yaml +13 -5
- data/README.md +33 -33
- data/lib/version_compare.rb +1 -1
- data/lib/version_compare/comparable_version.rb +71 -0
- data/lib/version_compare/conversions.rb +14 -14
- data/test/comparable_version_test.rb +188 -0
- data/test/conversions_test.rb +27 -27
- data/test/dummy/config/application.rb +2 -2
- metadata +14 -16
- data/lib/version_compare/version.rb +0 -53
- data/test/dummy/log/development.log +0 -0
- data/test/version_compare_test.rb +0 -181
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NDgxYzAxZWFkMzA1Mjc1NWIzODA4ZjA2Y2YzMWQ2OGM4ZWZjYjNmNg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ZDYwNWExZDY4NmIyMjFiOWVhMDEyYmViNTNlNmQyYTdjYWVjNjkzNA==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ODRlYjc2YmE3N2RiYWY2NjgzZDYxZTg4MzBkZGIxZjgxNmM2NGY4YzY4MGUz
|
10
|
+
NDZlMjc0ZDQ5ODU1MjRkMDY2MjJmMDhkMWUwNjVkMzU0YTczMDk2MzlmYmFi
|
11
|
+
NTY5Mjk1MzY1OTk2YWYxNzZlYTQ4YjJiOGY5OGNjYzVlZGFjNTc=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZjVjZTM2NjJlYTc1M2Q3M2QwNmY0Nzc4NmNmZDAwN2FlM2E4NTE4NmU4NmNl
|
14
|
+
MTQzZDA0NzExYmVlNzk1YjBkOTVkYWMyOTFjNWZiZjcxMjBiODRiNzAzMjU4
|
15
|
+
ODBkNzYyODMxM2Q3ZjEwMGEwOWNhYzk1OGNjMDQzNDgxZGRhOTU=
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
Version Compare allows you to easily compare if one Version (string) to another
|
6
6
|
Version (string). It aims to be as light and flexible as possible. Inputs can be
|
7
|
-
a String, Integer, Float, Array, or any object that defines `#
|
7
|
+
a String, Integer, Float, Array, or any object that defines `#to_comparable_version`.
|
8
8
|
|
9
9
|
For simplicity's sake, Version Compare only works with up to four numeric
|
10
10
|
values:
|
@@ -40,7 +40,7 @@ bundle
|
|
40
40
|
|
41
41
|
## Usage
|
42
42
|
|
43
|
-
To get started, you can either use `
|
43
|
+
To get started, you can either use `ComparableVersion.new(<value>)` or `ComparableVersion(<value>)`.
|
44
44
|
To get the latter to work, you'll need to call `include ::Conversions` in the
|
45
45
|
class or context you're wanting to use it at.
|
46
46
|
|
@@ -49,7 +49,7 @@ class MyClass
|
|
49
49
|
include Conversions
|
50
50
|
|
51
51
|
def my_method
|
52
|
-
|
52
|
+
ComparableVersion(1) > ComparableVersion(2)
|
53
53
|
end
|
54
54
|
end
|
55
55
|
```
|
@@ -59,65 +59,65 @@ Or, to test on the Rails Console:
|
|
59
59
|
```ruby
|
60
60
|
[1] pry(main)> include ::Conversions
|
61
61
|
=> Object
|
62
|
-
[2] pry(main)>
|
62
|
+
[2] pry(main)> ComparableVersion(1.0) > ComparableVersion(1)
|
63
63
|
=> false
|
64
64
|
|
65
65
|
# - OR (without using `include ::Conversions`) -
|
66
66
|
|
67
|
-
[1] pry(main)> Conversions.
|
67
|
+
[1] pry(main)> Conversions.ComparableVersion(1.0) > Conversions.ComparableVersion(1)
|
68
68
|
=> false
|
69
69
|
```
|
70
70
|
|
71
|
-
|
71
|
+
ComparableVersion Compare uses the `Comparable` mixin for comparisons, so you get all the
|
72
72
|
usual operators:
|
73
73
|
|
74
74
|
```ruby
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
[
|
83
|
-
[
|
75
|
+
ComparableVersion(2) > ComparableVersion(1) # => true
|
76
|
+
ComparableVersion(1.2) > ComparableVersion(1.2) # => false
|
77
|
+
ComparableVersion("1.2.3") >= ComparableVersion("1.2") # => true
|
78
|
+
ComparableVersion("1.2.3.4") <= ComparableVersion("1.2.3.4") # => true
|
79
|
+
ComparableVersion([1, 2]) == ComparableVersion(["1", "2"]) # => true
|
80
|
+
ComparableVersion("1.2.0.0") == ComparableVersion(1.2) # => true
|
81
|
+
ComparableVersion("1.0.0.0") != ComparableVersion(1) # => false
|
82
|
+
[ComparableVersion(1), ComparableVersion("1.0.0.1"), ComparableVersion(0.1)].sort # => ["0.1", "1", "1.0.0.1"]
|
83
|
+
[ComparableVersion(1), ComparableVersion("1.0.0.1"), ComparableVersion(0.1)].sort { |a, b| b <=> a } # => ["1.0.0.1", "1", "0.1"]
|
84
84
|
```
|
85
85
|
|
86
86
|
|
87
|
-
### Wait, so what exactly is this `
|
87
|
+
### Wait, so what exactly is this `ComparableVersion` ... constant?
|
88
88
|
|
89
|
-
`
|
89
|
+
`ComparableVersion()` is actually a conversion function. It follows the Ruby convention of
|
90
90
|
defining a conversion function that uses the same name as the class it
|
91
91
|
represents, such as how `Array()` converts inputs to an `Array` object.
|
92
|
-
Just like the standard Ruby conversion functions, `
|
93
|
-
to convert any
|
94
|
-
string, or array input (which are all obvious conversions to make), `
|
95
|
-
is essentially the same as `
|
92
|
+
Just like the standard Ruby conversion functions, `ComparableVersion()` tries its hardest
|
93
|
+
to convert any ComparableVersion-like input into a new `ComparableVersion` object. Given a numeric,
|
94
|
+
string, or array input (which are all obvious conversions to make), `ComparableVersion()`
|
95
|
+
is essentially the same as `ComparableVersion.new()`. However, `ComparableVersion()` is otherwise a
|
96
96
|
little more strict in that if you pass in an object that doesn't reasonably look
|
97
|
-
like a
|
98
|
-
`
|
97
|
+
like a ComparableVersion it will raise a `TypeError` exception. Doing the same for
|
98
|
+
`ComparableVersion.new()` will ultimately just `#to_s` the input; and since almost
|
99
99
|
every object responds to `#to_s`, the result is that you may end up with a 0
|
100
100
|
version. For example:
|
101
101
|
|
102
102
|
```ruby
|
103
|
-
|
103
|
+
ComparableVersion.new(OpenStruct.new(a: 1)).to_s # => "0"
|
104
104
|
```
|
105
105
|
|
106
106
|
|
107
|
-
### Can I pass my own custom objects into `
|
107
|
+
### Can I pass my own custom objects into `ComparableVersion()`?
|
108
108
|
|
109
|
-
Yes! All you have to do is define a `#
|
110
|
-
your object that creates a new
|
109
|
+
Yes! All you have to do is define a `#to_comparable_version` implicit conversion method in
|
110
|
+
your object that creates a new ComparableVersion object in the usual fashion.
|
111
111
|
|
112
112
|
```ruby
|
113
113
|
class MyObject
|
114
114
|
VERSION = 1.9
|
115
|
-
def
|
116
|
-
|
115
|
+
def to_comparable_version
|
116
|
+
ComparableVersion.new(VERSION.to_s)
|
117
117
|
end
|
118
118
|
end
|
119
119
|
|
120
|
-
|
120
|
+
ComparableVersion(MyObject.new) > ComparableVersion(2.0) # => false
|
121
121
|
```
|
122
122
|
|
123
123
|
|
@@ -135,14 +135,14 @@ module Dummy
|
|
135
135
|
|
136
136
|
VERSION = "1.2".freeze
|
137
137
|
|
138
|
-
def
|
139
|
-
|
138
|
+
def to_comparable_version
|
139
|
+
ComparableVersion.new(VERSION) # Or ComparableVersion.new([1, 2]) or whatever...
|
140
140
|
end
|
141
141
|
end
|
142
142
|
end
|
143
143
|
|
144
144
|
# Now, from the context of that Rails app you can call:
|
145
|
-
|
145
|
+
ComparableVersion(Rails.application) > ComparableVersion(1.0) # => true
|
146
146
|
```
|
147
147
|
|
148
148
|
So you see... the sky is the limit!
|
data/lib/version_compare.rb
CHANGED
@@ -0,0 +1,71 @@
|
|
1
|
+
class ComparableVersion
|
2
|
+
DEFAULT_SEPARATOR = ".".freeze
|
3
|
+
|
4
|
+
include Comparable
|
5
|
+
|
6
|
+
# ComparableVersion component names
|
7
|
+
NAMES = [:major, :minor, :tiny, :patch].freeze
|
8
|
+
|
9
|
+
attr_accessor *NAMES
|
10
|
+
attr_reader :separator
|
11
|
+
|
12
|
+
def initialize(value, options = {})
|
13
|
+
@separator = options.fetch(:separator) { DEFAULT_SEPARATOR }
|
14
|
+
|
15
|
+
@major, @minor, @tiny, @patch =
|
16
|
+
if value.respond_to?(:to_comparable_version)
|
17
|
+
value.to_comparable_version.to_a
|
18
|
+
elsif value.respond_to?(:to_ary)
|
19
|
+
value.to_ary.map(&:to_i)
|
20
|
+
else
|
21
|
+
value.to_s.split(separator).map(&:to_i)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def inspect
|
26
|
+
"<#{identification}>"
|
27
|
+
end
|
28
|
+
|
29
|
+
# Implicit conversion method
|
30
|
+
def to_comparable_version
|
31
|
+
self
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_s
|
35
|
+
NAMES.map { |name| public_send(name) }.compact.join(separator)
|
36
|
+
end
|
37
|
+
alias :to_str :to_s
|
38
|
+
|
39
|
+
def to_a
|
40
|
+
NAMES.map { |name| public_send(name) }.compact
|
41
|
+
end
|
42
|
+
alias :to_ary :to_a
|
43
|
+
|
44
|
+
# ComparableVersion components comparison method. Uses Comparable to assess whether
|
45
|
+
# This ComparableVersion's component value or the other ComparableVersion's component value is
|
46
|
+
# greater or lesser. The first value to be found as greater or lesser
|
47
|
+
# determines which ComparableVersion object is greater or lesser.
|
48
|
+
#
|
49
|
+
# Missing ComparableVersion components are treated as 0 values, which effectively gives
|
50
|
+
# them no weight in the comparison.
|
51
|
+
#
|
52
|
+
# @params [ComparableVersion] other the other ComparableVersion object we are comparing with
|
53
|
+
def <=>(other)
|
54
|
+
NAMES.each do |name|
|
55
|
+
result = send(name).to_i <=> other.send(name).to_i
|
56
|
+
return result unless result.zero?
|
57
|
+
end
|
58
|
+
|
59
|
+
0
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def identification
|
65
|
+
version_identifiers =
|
66
|
+
NAMES.map { |name| "#{name}:#{send(name)}" if send(name).present? }
|
67
|
+
.compact
|
68
|
+
.join(", ")
|
69
|
+
"#{self.class}[#{version_identifiers}]"
|
70
|
+
end
|
71
|
+
end
|
@@ -2,37 +2,37 @@
|
|
2
2
|
# methods. Anytime one of the standard conversion methods are needed, the
|
3
3
|
# Conversions module can be included and then used freely.
|
4
4
|
module Conversions
|
5
|
-
require_relative "
|
5
|
+
require_relative "comparable_version"
|
6
6
|
|
7
|
-
# The `
|
7
|
+
# The `ComparableVersion()` conversion method is defined as a module_function so that it
|
8
8
|
# may also be called directly without needing to include the Conversions module
|
9
9
|
# if so desired.
|
10
10
|
#
|
11
11
|
# @example
|
12
|
-
# Conversions.
|
12
|
+
# Conversions.ComparableVersion(1.2).to_s # => "1.2"
|
13
13
|
module_function
|
14
14
|
|
15
|
-
# Strict conversion method for creating a `
|
16
|
-
# that sensibly is a
|
15
|
+
# Strict conversion method for creating a `ComparableVersion` object out of anything
|
16
|
+
# that sensibly is a ComparableVersion.
|
17
17
|
#
|
18
18
|
# @param [Object] value the object to be converted
|
19
19
|
#
|
20
20
|
# @example
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
def
|
21
|
+
# ComparableVersion(1) # => #<ComparableVersion:0x007fd8144ea658 @major=1, @minor=nil, @tiny=nil, @patch=nil>
|
22
|
+
# ComparableVersion(1.2) # => #<ComparableVersion:0x007fd8144ea658 @major=1, @minor=2, @tiny=nil, @patch=nil>
|
23
|
+
# ComparableVersion("1.2.3") # => #<ComparableVersion:0x007fd8144ea658 @major=1, @minor=2, @tiny=3, @patch=nil>
|
24
|
+
# ComparableVersion(["1", "2", "3", "4"]) # => #<ComparableVersion:0x007fd8144f98b0 @major=1, @minor=2, @tiny=3, @patch=4>
|
25
|
+
def ComparableVersion(value)
|
26
26
|
case value
|
27
27
|
when String,
|
28
28
|
Integer,
|
29
29
|
Float,
|
30
30
|
-> val { val.respond_to?(:to_ary) }
|
31
|
-
|
32
|
-
when -> val { val.respond_to?(:
|
33
|
-
value.
|
31
|
+
ComparableVersion.new(value)
|
32
|
+
when -> val { val.respond_to?(:to_comparable_version) }
|
33
|
+
value.to_comparable_version
|
34
34
|
else
|
35
|
-
raise TypeError, "Cannot convert #{value.inspect} to
|
35
|
+
raise TypeError, "Cannot convert #{value.inspect} to ComparableVersion"
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
@@ -0,0 +1,188 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe ComparableVersion do
|
4
|
+
describe "#inspect" do
|
5
|
+
it "returns expected inspect String format" do
|
6
|
+
assert ComparableVersion("2.0.0").inspect
|
7
|
+
"ComparableVersion[major:2, minor:0, tiny:0]"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#>" do
|
12
|
+
it "returns true when lvalue is greater than rvalue" do
|
13
|
+
ComparableVersion(2).must_be :>, ComparableVersion(1)
|
14
|
+
ComparableVersion(2).must_be :>, ComparableVersion(1.2)
|
15
|
+
ComparableVersion(2).must_be :>, ComparableVersion("1.2.3")
|
16
|
+
ComparableVersion(2).must_be :>, ComparableVersion("1.2.3.4")
|
17
|
+
|
18
|
+
ComparableVersion(2.0).must_be :>, ComparableVersion(1)
|
19
|
+
ComparableVersion(2.0).must_be :>, ComparableVersion(1.0)
|
20
|
+
ComparableVersion(2.1).must_be :>, ComparableVersion("2.0.3")
|
21
|
+
ComparableVersion(2.1).must_be :>, ComparableVersion("2.0.3.4")
|
22
|
+
|
23
|
+
ComparableVersion("2.0.0").must_be :>, ComparableVersion(1)
|
24
|
+
ComparableVersion("2.1.0").must_be :>, ComparableVersion(1.2)
|
25
|
+
ComparableVersion("2.1.0").must_be :>, ComparableVersion("1.2.0")
|
26
|
+
ComparableVersion("2.1.1").must_be :>, ComparableVersion("2.1.0.4")
|
27
|
+
|
28
|
+
ComparableVersion("2.0.0.0").must_be :>, ComparableVersion(1)
|
29
|
+
ComparableVersion("2.1.0.0").must_be :>, ComparableVersion(2.0)
|
30
|
+
ComparableVersion("2.1.1.0").must_be :>, ComparableVersion("2.1.0")
|
31
|
+
ComparableVersion("2.1.3.0").must_be :>, ComparableVersion("2.1.2.4")
|
32
|
+
|
33
|
+
ComparableVersion(2).must_be :>, ComparableVersion(1.99)
|
34
|
+
ComparableVersion(1.3).must_be :>, ComparableVersion("1.2.99")
|
35
|
+
ComparableVersion("1.2.4").must_be :>, ComparableVersion("1.2.3.99")
|
36
|
+
end
|
37
|
+
|
38
|
+
it "returns false when lvalue is less than rvalue" do
|
39
|
+
ComparableVersion(1).wont_be :>, ComparableVersion(2)
|
40
|
+
ComparableVersion(1.2).wont_be :>, ComparableVersion(2)
|
41
|
+
ComparableVersion("1.2.3").wont_be :>, ComparableVersion(2)
|
42
|
+
ComparableVersion("1.2.3.4").wont_be :>, ComparableVersion(2)
|
43
|
+
|
44
|
+
ComparableVersion(1).wont_be :>, ComparableVersion(2.0)
|
45
|
+
ComparableVersion(2.0).wont_be :>, ComparableVersion(2.1)
|
46
|
+
ComparableVersion("2.0.3").wont_be :>, ComparableVersion(2.1)
|
47
|
+
ComparableVersion("2.0.3.4").wont_be :>, ComparableVersion(2.1)
|
48
|
+
|
49
|
+
ComparableVersion(1).wont_be :>, ComparableVersion("2.0.0")
|
50
|
+
ComparableVersion(1.2).wont_be :>, ComparableVersion("2.1.0")
|
51
|
+
ComparableVersion("2.1.0").wont_be :>, ComparableVersion("2.1.1")
|
52
|
+
ComparableVersion("2.1.0.4").wont_be :>, ComparableVersion("2.1.1")
|
53
|
+
|
54
|
+
ComparableVersion(1).wont_be :>, ComparableVersion("2.0.0.0")
|
55
|
+
ComparableVersion(2.0).wont_be :>, ComparableVersion("2.1.0.0")
|
56
|
+
ComparableVersion("2.1.0").wont_be :>, ComparableVersion("2.1.1.0")
|
57
|
+
ComparableVersion("2.1.0.4").wont_be :>, ComparableVersion("2.1.1.0")
|
58
|
+
|
59
|
+
ComparableVersion(1.99).wont_be :>, ComparableVersion(2)
|
60
|
+
ComparableVersion("1.2.99").wont_be :>, ComparableVersion(1.3)
|
61
|
+
ComparableVersion("1.2.3.99").wont_be :>, ComparableVersion("1.2.4")
|
62
|
+
end
|
63
|
+
|
64
|
+
it "returns false when lvalue is equal to rvalue" do
|
65
|
+
ComparableVersion(1).wont_be :>, ComparableVersion(1.0)
|
66
|
+
ComparableVersion(1.2).wont_be :>, ComparableVersion("1.2.0")
|
67
|
+
ComparableVersion("1.2.3").wont_be :>, ComparableVersion("1.2.3.0")
|
68
|
+
ComparableVersion("1.2.3.4").wont_be :>, ComparableVersion("1.2.3.4")
|
69
|
+
|
70
|
+
ComparableVersion(1.0).wont_be :>, ComparableVersion(1)
|
71
|
+
ComparableVersion("1.2.0").wont_be :>, ComparableVersion(1.2)
|
72
|
+
ComparableVersion("1.2.3").wont_be :>, ComparableVersion("1.2.3.0")
|
73
|
+
ComparableVersion("1.2.3.4").wont_be :>, ComparableVersion("1.2.3.4")
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "#==" do
|
78
|
+
it "returns false when lvalue is less than rvalue" do
|
79
|
+
ComparableVersion(1.2).wont_equal ComparableVersion(2)
|
80
|
+
ComparableVersion("1.2.3").wont_equal ComparableVersion(2)
|
81
|
+
ComparableVersion("1.2.3.4").wont_equal ComparableVersion(2)
|
82
|
+
|
83
|
+
ComparableVersion(1).wont_equal ComparableVersion(2.0)
|
84
|
+
ComparableVersion("2.0.3").wont_equal ComparableVersion(2.1)
|
85
|
+
ComparableVersion("2.0.3.4").wont_equal ComparableVersion(2.1)
|
86
|
+
|
87
|
+
ComparableVersion(1).wont_equal ComparableVersion("2.0.0")
|
88
|
+
ComparableVersion(1.2).wont_equal ComparableVersion("2.1.0")
|
89
|
+
ComparableVersion("2.1.0.4").wont_equal ComparableVersion("2.1.1")
|
90
|
+
|
91
|
+
ComparableVersion(1).wont_equal ComparableVersion("2.0.0.0")
|
92
|
+
ComparableVersion(2.0).wont_equal ComparableVersion("2.1.0.0")
|
93
|
+
ComparableVersion("2.1.0").wont_equal ComparableVersion("2.1.1.0")
|
94
|
+
|
95
|
+
ComparableVersion(1.99).wont_equal ComparableVersion(2)
|
96
|
+
ComparableVersion("1.2.99").wont_equal ComparableVersion(1.3)
|
97
|
+
ComparableVersion("1.2.3.99").wont_equal ComparableVersion("1.2.4")
|
98
|
+
end
|
99
|
+
|
100
|
+
it "returns false when lvalue is greater than rvalue" do
|
101
|
+
ComparableVersion(2).wont_equal ComparableVersion(1.2)
|
102
|
+
ComparableVersion(2).wont_equal ComparableVersion("1.2.3")
|
103
|
+
ComparableVersion(2).wont_equal ComparableVersion("1.2.3.4")
|
104
|
+
|
105
|
+
ComparableVersion(2.0).wont_equal ComparableVersion(1)
|
106
|
+
ComparableVersion(2.1).wont_equal ComparableVersion("2.0.3")
|
107
|
+
ComparableVersion(2.1).wont_equal ComparableVersion("2.0.3.4")
|
108
|
+
|
109
|
+
ComparableVersion("2.0.0").wont_equal ComparableVersion(1)
|
110
|
+
ComparableVersion("2.1.0").wont_equal ComparableVersion(1.2)
|
111
|
+
ComparableVersion("2.1.1").wont_equal ComparableVersion("2.1.0.4")
|
112
|
+
|
113
|
+
ComparableVersion("2.0.0.0").wont_equal ComparableVersion(1)
|
114
|
+
ComparableVersion("2.1.0.0").wont_equal ComparableVersion(2.0)
|
115
|
+
ComparableVersion("2.1.1.0").wont_equal ComparableVersion("2.1.0")
|
116
|
+
|
117
|
+
ComparableVersion(2).wont_equal ComparableVersion(1.99)
|
118
|
+
ComparableVersion(1.3).wont_equal ComparableVersion("1.2.99")
|
119
|
+
ComparableVersion("1.2.4").wont_equal ComparableVersion("1.2.3.99")
|
120
|
+
end
|
121
|
+
|
122
|
+
it "returns true when lvalue is equal to rvalue" do
|
123
|
+
ComparableVersion(1.0).must_equal ComparableVersion(1)
|
124
|
+
ComparableVersion("1.2.0").must_equal ComparableVersion(1.2)
|
125
|
+
ComparableVersion("1.2.3.0").must_equal ComparableVersion("1.2.3")
|
126
|
+
|
127
|
+
ComparableVersion(1).must_equal ComparableVersion(1.0)
|
128
|
+
ComparableVersion(1.2).must_equal ComparableVersion("1.2.0")
|
129
|
+
ComparableVersion("1.2.3").must_equal ComparableVersion("1.2.3.0")
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe "#<" do
|
134
|
+
it "returns true when lvalue is less than rvalue" do
|
135
|
+
ComparableVersion(1.2).must_be :<, ComparableVersion(2)
|
136
|
+
ComparableVersion("1.2.3").must_be :<, ComparableVersion(2)
|
137
|
+
ComparableVersion("1.2.3.4").must_be :<, ComparableVersion(2)
|
138
|
+
|
139
|
+
ComparableVersion(1).must_be :<, ComparableVersion(2.0)
|
140
|
+
ComparableVersion("2.0.3").must_be :<, ComparableVersion(2.1)
|
141
|
+
ComparableVersion("2.0.3.4").must_be :<, ComparableVersion(2.1)
|
142
|
+
|
143
|
+
ComparableVersion(1).must_be :<, ComparableVersion("2.0.0")
|
144
|
+
ComparableVersion(1.2).must_be :<, ComparableVersion("2.1.0")
|
145
|
+
ComparableVersion("2.1.0.4").must_be :<, ComparableVersion("2.1.1")
|
146
|
+
|
147
|
+
ComparableVersion(1).must_be :<, ComparableVersion("2.0.0.0")
|
148
|
+
ComparableVersion(2.0).must_be :<, ComparableVersion("2.1.0.0")
|
149
|
+
ComparableVersion("2.1.0").must_be :<, ComparableVersion("2.1.1.0")
|
150
|
+
|
151
|
+
ComparableVersion(1.99).must_be :<, ComparableVersion(2)
|
152
|
+
ComparableVersion("1.2.99").must_be :<, ComparableVersion(1.3)
|
153
|
+
ComparableVersion("1.2.3.99").must_be :<, ComparableVersion("1.2.4")
|
154
|
+
end
|
155
|
+
|
156
|
+
it "returns false when lvalue is greater than rvalue" do
|
157
|
+
ComparableVersion(2).wont_be :<, ComparableVersion(1.2)
|
158
|
+
ComparableVersion(2).wont_be :<, ComparableVersion("1.2.3")
|
159
|
+
ComparableVersion(2).wont_be :<, ComparableVersion("1.2.3.4")
|
160
|
+
|
161
|
+
ComparableVersion(2.0).wont_be :<, ComparableVersion(1)
|
162
|
+
ComparableVersion(2.1).wont_be :<, ComparableVersion("2.0.3")
|
163
|
+
ComparableVersion(2.1).wont_be :<, ComparableVersion("2.0.3.4")
|
164
|
+
|
165
|
+
ComparableVersion("2.0.0").wont_be :<, ComparableVersion(1)
|
166
|
+
ComparableVersion("2.1.0").wont_be :<, ComparableVersion(1.2)
|
167
|
+
ComparableVersion("2.1.1").wont_be :<, ComparableVersion("2.1.0.4")
|
168
|
+
|
169
|
+
ComparableVersion("2.0.0.0").wont_be :<, ComparableVersion(1)
|
170
|
+
ComparableVersion("2.1.0.0").wont_be :<, ComparableVersion(2.0)
|
171
|
+
ComparableVersion("2.1.1.0").wont_be :<, ComparableVersion("2.1.0")
|
172
|
+
|
173
|
+
ComparableVersion(2).wont_be :<, ComparableVersion(1.99)
|
174
|
+
ComparableVersion(1.3).wont_be :<, ComparableVersion("1.2.99")
|
175
|
+
ComparableVersion("1.2.4").wont_be :<, ComparableVersion("1.2.3.99")
|
176
|
+
end
|
177
|
+
|
178
|
+
it "returns false when lvalue is equal to rvalue" do
|
179
|
+
ComparableVersion(1.0).wont_be :<, ComparableVersion(1)
|
180
|
+
ComparableVersion("1.2.0").wont_be :<, ComparableVersion(1.2)
|
181
|
+
ComparableVersion("1.2.3.0").wont_be :<, ComparableVersion("1.2.3")
|
182
|
+
|
183
|
+
ComparableVersion(1).wont_be :<, ComparableVersion(1.0)
|
184
|
+
ComparableVersion(1.2).wont_be :<, ComparableVersion("1.2.0")
|
185
|
+
ComparableVersion("1.2.3").wont_be :<, ComparableVersion("1.2.3.0")
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
data/test/conversions_test.rb
CHANGED
@@ -3,45 +3,45 @@ require 'test_helper'
|
|
3
3
|
describe Conversions do
|
4
4
|
describe "conversion function" do
|
5
5
|
it "works on integers" do
|
6
|
-
|
6
|
+
ComparableVersion(1).class.must_equal ComparableVersion
|
7
7
|
end
|
8
8
|
|
9
9
|
it "works on floats" do
|
10
|
-
|
10
|
+
ComparableVersion(1.2).class.must_equal ComparableVersion
|
11
11
|
end
|
12
12
|
|
13
13
|
it "works on strings" do
|
14
|
-
|
14
|
+
ComparableVersion("1.2.3.4").class.must_equal ComparableVersion
|
15
15
|
end
|
16
16
|
|
17
17
|
it "works on arrays" do
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
ComparableVersion([1, 2, 3, 4]).must_be_instance_of ComparableVersion
|
19
|
+
ComparableVersion([1, 2, 3, 4]).must_equal ComparableVersion("1.2.3.4")
|
20
|
+
ComparableVersion(["1", "2", "3", "4"]).must_equal ComparableVersion("1.2.3.4")
|
21
21
|
end
|
22
22
|
|
23
|
-
it "works on
|
24
|
-
|
25
|
-
|
23
|
+
it "works on ComparableVersions" do
|
24
|
+
ComparableVersion(ComparableVersion(1.2)).must_be_instance_of ComparableVersion
|
25
|
+
ComparableVersion(ComparableVersion(1.2)).must_equal ComparableVersion(1.2)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
describe "explicit conversions" do
|
30
30
|
describe "#to_s" do
|
31
31
|
it "returns string regardless of input" do
|
32
|
-
|
33
|
-
|
34
|
-
|
32
|
+
ComparableVersion(1).to_s.must_equal "1"
|
33
|
+
ComparableVersion(1.2).to_s.must_equal "1.2"
|
34
|
+
ComparableVersion("1.2.3").to_s.must_equal "1.2.3"
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
describe "#to_a" do
|
39
39
|
it "returns an array of integers" do
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
40
|
+
ComparableVersion(1).to_a.must_equal [1]
|
41
|
+
ComparableVersion(1.0).to_a.must_equal [1, 0]
|
42
|
+
ComparableVersion("1.2.3").to_a.must_equal [1, 2, 3]
|
43
|
+
ComparableVersion("1.2.3.4").to_a.must_equal [1, 2, 3, 4]
|
44
|
+
ComparableVersion(["1", "2", "3", "4"]).to_a.must_equal [1, 2, 3, 4]
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
@@ -49,32 +49,32 @@ describe Conversions do
|
|
49
49
|
describe "implicit conversions" do
|
50
50
|
describe "string concatenation" do
|
51
51
|
it "concatenates" do
|
52
|
-
("version: " +
|
52
|
+
("version: " + ComparableVersion("1.2.3.4")).must_equal "version: 1.2.3.4"
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
56
|
describe "CustomObjects" do
|
57
|
-
describe "without #
|
58
|
-
it "raises TypeError when attempting to convert custom objects that don't implement #
|
59
|
-
-> {
|
57
|
+
describe "without #to_comparable_version" do
|
58
|
+
it "raises TypeError when attempting to convert custom objects that don't implement #to_comparable_version" do
|
59
|
+
-> { ComparableVersion(Object.new) }.must_raise TypeError
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
-
describe "with #
|
63
|
+
describe "with #to_comparable_version" do
|
64
64
|
before do
|
65
65
|
class CustomObject < Object
|
66
66
|
VERSION = 1.9
|
67
|
-
def
|
68
|
-
|
67
|
+
def to_comparable_version
|
68
|
+
ComparableVersion.new(VERSION.to_s)
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
73
|
subject { CustomObject.new }
|
74
74
|
|
75
|
-
it "returns a
|
76
|
-
|
77
|
-
|
75
|
+
it "returns a ComparableVersion object" do
|
76
|
+
ComparableVersion(subject).must_be_instance_of ComparableVersion
|
77
|
+
ComparableVersion.new(subject).must_be_instance_of ComparableVersion
|
78
78
|
end
|
79
79
|
end
|
80
80
|
end
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: version_compare
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Dobbins
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ! '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 3.0.0
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 3.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: sqlite3
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ! '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest-rails
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ! '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ! '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description: Version Compare allows you to easily compare if one Version is >, >=,
|
@@ -64,8 +64,9 @@ files:
|
|
64
64
|
- README.md
|
65
65
|
- Rakefile
|
66
66
|
- lib/version_compare.rb
|
67
|
+
- lib/version_compare/comparable_version.rb
|
67
68
|
- lib/version_compare/conversions.rb
|
68
|
-
-
|
69
|
+
- test/comparable_version_test.rb
|
69
70
|
- test/conversions_test.rb
|
70
71
|
- test/dummy/README.rdoc
|
71
72
|
- test/dummy/Rakefile
|
@@ -94,14 +95,12 @@ files:
|
|
94
95
|
- test/dummy/config/initializers/wrap_parameters.rb
|
95
96
|
- test/dummy/config/locales/en.yml
|
96
97
|
- test/dummy/config/routes.rb
|
97
|
-
- test/dummy/log/development.log
|
98
98
|
- test/dummy/log/test.log
|
99
99
|
- test/dummy/public/404.html
|
100
100
|
- test/dummy/public/422.html
|
101
101
|
- test/dummy/public/500.html
|
102
102
|
- test/dummy/public/favicon.ico
|
103
103
|
- test/test_helper.rb
|
104
|
-
- test/version_compare_test.rb
|
105
104
|
homepage: https://github.com/pdobb/version_compare
|
106
105
|
licenses:
|
107
106
|
- MIT
|
@@ -112,21 +111,22 @@ require_paths:
|
|
112
111
|
- lib
|
113
112
|
required_ruby_version: !ruby/object:Gem::Requirement
|
114
113
|
requirements:
|
115
|
-
- -
|
114
|
+
- - ! '>='
|
116
115
|
- !ruby/object:Gem::Version
|
117
116
|
version: '0'
|
118
117
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
118
|
requirements:
|
120
|
-
- -
|
119
|
+
- - ! '>='
|
121
120
|
- !ruby/object:Gem::Version
|
122
121
|
version: '0'
|
123
122
|
requirements: []
|
124
123
|
rubyforge_project:
|
125
|
-
rubygems_version: 2.4.
|
124
|
+
rubygems_version: 2.4.8
|
126
125
|
signing_key:
|
127
126
|
specification_version: 4
|
128
127
|
summary: Compare versions
|
129
128
|
test_files:
|
129
|
+
- test/comparable_version_test.rb
|
130
130
|
- test/conversions_test.rb
|
131
131
|
- test/dummy/app/assets/javascripts/application.js
|
132
132
|
- test/dummy/app/assets/stylesheets/application.css
|
@@ -153,7 +153,6 @@ test_files:
|
|
153
153
|
- test/dummy/config/locales/en.yml
|
154
154
|
- test/dummy/config/routes.rb
|
155
155
|
- test/dummy/config.ru
|
156
|
-
- test/dummy/log/development.log
|
157
156
|
- test/dummy/log/test.log
|
158
157
|
- test/dummy/public/404.html
|
159
158
|
- test/dummy/public/422.html
|
@@ -162,5 +161,4 @@ test_files:
|
|
162
161
|
- test/dummy/Rakefile
|
163
162
|
- test/dummy/README.rdoc
|
164
163
|
- test/test_helper.rb
|
165
|
-
- test/version_compare_test.rb
|
166
164
|
has_rdoc:
|
@@ -1,53 +0,0 @@
|
|
1
|
-
class Version
|
2
|
-
include Comparable
|
3
|
-
|
4
|
-
# Version component names
|
5
|
-
NAMES = [:major, :minor, :tiny, :patch].freeze
|
6
|
-
|
7
|
-
attr_accessor *NAMES
|
8
|
-
|
9
|
-
# Implicit conversion method
|
10
|
-
def to_version
|
11
|
-
self
|
12
|
-
end
|
13
|
-
|
14
|
-
def to_s
|
15
|
-
NAMES.map { |name| public_send(name) }.compact.join('.')
|
16
|
-
end
|
17
|
-
alias :to_str :to_s
|
18
|
-
|
19
|
-
def to_a
|
20
|
-
NAMES.map { |name| public_send(name) }.compact
|
21
|
-
end
|
22
|
-
alias :to_ary :to_a
|
23
|
-
|
24
|
-
# Version components comparison method. Uses Comparable to assess whether
|
25
|
-
# This Version's component value or the other Version's component value is
|
26
|
-
# greater or lesser. The first value to be found as greater or lesser
|
27
|
-
# determines which Version object is greater or lesser.
|
28
|
-
#
|
29
|
-
# Missing Version components are treated as 0 values, which effectively gives
|
30
|
-
# them no weight in the comparison.
|
31
|
-
#
|
32
|
-
# @params [Version] other the other Version object we are comparing with
|
33
|
-
def <=>(other)
|
34
|
-
NAMES.each do |name|
|
35
|
-
result = send(name).to_i <=> other.send(name).to_i
|
36
|
-
return result unless result.zero?
|
37
|
-
end
|
38
|
-
0
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
def initialize(value)
|
44
|
-
@major, @minor, @tiny, @patch =
|
45
|
-
if value.respond_to?(:to_ary)
|
46
|
-
value.to_ary.map(&:to_i)
|
47
|
-
elsif value.respond_to?(:to_version)
|
48
|
-
value.to_version.to_a
|
49
|
-
else
|
50
|
-
value.to_s.split('.').map(&:to_i)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
File without changes
|
@@ -1,181 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
describe VersionCompare do
|
4
|
-
describe "#>" do
|
5
|
-
it "returns true when lvalue is greater than rvalue" do
|
6
|
-
Version(2).must_be :>, Version(1)
|
7
|
-
Version(2).must_be :>, Version(1.2)
|
8
|
-
Version(2).must_be :>, Version("1.2.3")
|
9
|
-
Version(2).must_be :>, Version("1.2.3.4")
|
10
|
-
|
11
|
-
Version(2.0).must_be :>, Version(1)
|
12
|
-
Version(2.0).must_be :>, Version(1.0)
|
13
|
-
Version(2.1).must_be :>, Version("2.0.3")
|
14
|
-
Version(2.1).must_be :>, Version("2.0.3.4")
|
15
|
-
|
16
|
-
Version("2.0.0").must_be :>, Version(1)
|
17
|
-
Version("2.1.0").must_be :>, Version(1.2)
|
18
|
-
Version("2.1.0").must_be :>, Version("1.2.0")
|
19
|
-
Version("2.1.1").must_be :>, Version("2.1.0.4")
|
20
|
-
|
21
|
-
Version("2.0.0.0").must_be :>, Version(1)
|
22
|
-
Version("2.1.0.0").must_be :>, Version(2.0)
|
23
|
-
Version("2.1.1.0").must_be :>, Version("2.1.0")
|
24
|
-
Version("2.1.3.0").must_be :>, Version("2.1.2.4")
|
25
|
-
|
26
|
-
Version(2).must_be :>, Version(1.99)
|
27
|
-
Version(1.3).must_be :>, Version("1.2.99")
|
28
|
-
Version("1.2.4").must_be :>, Version("1.2.3.99")
|
29
|
-
end
|
30
|
-
|
31
|
-
it "returns false when lvalue is less than rvalue" do
|
32
|
-
Version(1).wont_be :>, Version(2)
|
33
|
-
Version(1.2).wont_be :>, Version(2)
|
34
|
-
Version("1.2.3").wont_be :>, Version(2)
|
35
|
-
Version("1.2.3.4").wont_be :>, Version(2)
|
36
|
-
|
37
|
-
Version(1).wont_be :>, Version(2.0)
|
38
|
-
Version(2.0).wont_be :>, Version(2.1)
|
39
|
-
Version("2.0.3").wont_be :>, Version(2.1)
|
40
|
-
Version("2.0.3.4").wont_be :>, Version(2.1)
|
41
|
-
|
42
|
-
Version(1).wont_be :>, Version("2.0.0")
|
43
|
-
Version(1.2).wont_be :>, Version("2.1.0")
|
44
|
-
Version("2.1.0").wont_be :>, Version("2.1.1")
|
45
|
-
Version("2.1.0.4").wont_be :>, Version("2.1.1")
|
46
|
-
|
47
|
-
Version(1).wont_be :>, Version("2.0.0.0")
|
48
|
-
Version(2.0).wont_be :>, Version("2.1.0.0")
|
49
|
-
Version("2.1.0").wont_be :>, Version("2.1.1.0")
|
50
|
-
Version("2.1.0.4").wont_be :>, Version("2.1.1.0")
|
51
|
-
|
52
|
-
Version(1.99).wont_be :>, Version(2)
|
53
|
-
Version("1.2.99").wont_be :>, Version(1.3)
|
54
|
-
Version("1.2.3.99").wont_be :>, Version("1.2.4")
|
55
|
-
end
|
56
|
-
|
57
|
-
it "returns false when lvalue is equal to rvalue" do
|
58
|
-
Version(1).wont_be :>, Version(1.0)
|
59
|
-
Version(1.2).wont_be :>, Version("1.2.0")
|
60
|
-
Version("1.2.3").wont_be :>, Version("1.2.3.0")
|
61
|
-
Version("1.2.3.4").wont_be :>, Version("1.2.3.4")
|
62
|
-
|
63
|
-
Version(1.0).wont_be :>, Version(1)
|
64
|
-
Version("1.2.0").wont_be :>, Version(1.2)
|
65
|
-
Version("1.2.3").wont_be :>, Version("1.2.3.0")
|
66
|
-
Version("1.2.3.4").wont_be :>, Version("1.2.3.4")
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe "#==" do
|
71
|
-
it "returns false when lvalue is less than rvalue" do
|
72
|
-
Version(1.2).wont_equal Version(2)
|
73
|
-
Version("1.2.3").wont_equal Version(2)
|
74
|
-
Version("1.2.3.4").wont_equal Version(2)
|
75
|
-
|
76
|
-
Version(1).wont_equal Version(2.0)
|
77
|
-
Version("2.0.3").wont_equal Version(2.1)
|
78
|
-
Version("2.0.3.4").wont_equal Version(2.1)
|
79
|
-
|
80
|
-
Version(1).wont_equal Version("2.0.0")
|
81
|
-
Version(1.2).wont_equal Version("2.1.0")
|
82
|
-
Version("2.1.0.4").wont_equal Version("2.1.1")
|
83
|
-
|
84
|
-
Version(1).wont_equal Version("2.0.0.0")
|
85
|
-
Version(2.0).wont_equal Version("2.1.0.0")
|
86
|
-
Version("2.1.0").wont_equal Version("2.1.1.0")
|
87
|
-
|
88
|
-
Version(1.99).wont_equal Version(2)
|
89
|
-
Version("1.2.99").wont_equal Version(1.3)
|
90
|
-
Version("1.2.3.99").wont_equal Version("1.2.4")
|
91
|
-
end
|
92
|
-
|
93
|
-
it "returns false when lvalue is greater than rvalue" do
|
94
|
-
Version(2).wont_equal Version(1.2)
|
95
|
-
Version(2).wont_equal Version("1.2.3")
|
96
|
-
Version(2).wont_equal Version("1.2.3.4")
|
97
|
-
|
98
|
-
Version(2.0).wont_equal Version(1)
|
99
|
-
Version(2.1).wont_equal Version("2.0.3")
|
100
|
-
Version(2.1).wont_equal Version("2.0.3.4")
|
101
|
-
|
102
|
-
Version("2.0.0").wont_equal Version(1)
|
103
|
-
Version("2.1.0").wont_equal Version(1.2)
|
104
|
-
Version("2.1.1").wont_equal Version("2.1.0.4")
|
105
|
-
|
106
|
-
Version("2.0.0.0").wont_equal Version(1)
|
107
|
-
Version("2.1.0.0").wont_equal Version(2.0)
|
108
|
-
Version("2.1.1.0").wont_equal Version("2.1.0")
|
109
|
-
|
110
|
-
Version(2).wont_equal Version(1.99)
|
111
|
-
Version(1.3).wont_equal Version("1.2.99")
|
112
|
-
Version("1.2.4").wont_equal Version("1.2.3.99")
|
113
|
-
end
|
114
|
-
|
115
|
-
it "returns true when lvalue is equal to rvalue" do
|
116
|
-
Version(1.0).must_equal Version(1)
|
117
|
-
Version("1.2.0").must_equal Version(1.2)
|
118
|
-
Version("1.2.3.0").must_equal Version("1.2.3")
|
119
|
-
|
120
|
-
Version(1).must_equal Version(1.0)
|
121
|
-
Version(1.2).must_equal Version("1.2.0")
|
122
|
-
Version("1.2.3").must_equal Version("1.2.3.0")
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
describe "#<" do
|
127
|
-
it "returns true when lvalue is less than rvalue" do
|
128
|
-
Version(1.2).must_be :<, Version(2)
|
129
|
-
Version("1.2.3").must_be :<, Version(2)
|
130
|
-
Version("1.2.3.4").must_be :<, Version(2)
|
131
|
-
|
132
|
-
Version(1).must_be :<, Version(2.0)
|
133
|
-
Version("2.0.3").must_be :<, Version(2.1)
|
134
|
-
Version("2.0.3.4").must_be :<, Version(2.1)
|
135
|
-
|
136
|
-
Version(1).must_be :<, Version("2.0.0")
|
137
|
-
Version(1.2).must_be :<, Version("2.1.0")
|
138
|
-
Version("2.1.0.4").must_be :<, Version("2.1.1")
|
139
|
-
|
140
|
-
Version(1).must_be :<, Version("2.0.0.0")
|
141
|
-
Version(2.0).must_be :<, Version("2.1.0.0")
|
142
|
-
Version("2.1.0").must_be :<, Version("2.1.1.0")
|
143
|
-
|
144
|
-
Version(1.99).must_be :<, Version(2)
|
145
|
-
Version("1.2.99").must_be :<, Version(1.3)
|
146
|
-
Version("1.2.3.99").must_be :<, Version("1.2.4")
|
147
|
-
end
|
148
|
-
|
149
|
-
it "returns false when lvalue is greater than rvalue" do
|
150
|
-
Version(2).wont_be :<, Version(1.2)
|
151
|
-
Version(2).wont_be :<, Version("1.2.3")
|
152
|
-
Version(2).wont_be :<, Version("1.2.3.4")
|
153
|
-
|
154
|
-
Version(2.0).wont_be :<, Version(1)
|
155
|
-
Version(2.1).wont_be :<, Version("2.0.3")
|
156
|
-
Version(2.1).wont_be :<, Version("2.0.3.4")
|
157
|
-
|
158
|
-
Version("2.0.0").wont_be :<, Version(1)
|
159
|
-
Version("2.1.0").wont_be :<, Version(1.2)
|
160
|
-
Version("2.1.1").wont_be :<, Version("2.1.0.4")
|
161
|
-
|
162
|
-
Version("2.0.0.0").wont_be :<, Version(1)
|
163
|
-
Version("2.1.0.0").wont_be :<, Version(2.0)
|
164
|
-
Version("2.1.1.0").wont_be :<, Version("2.1.0")
|
165
|
-
|
166
|
-
Version(2).wont_be :<, Version(1.99)
|
167
|
-
Version(1.3).wont_be :<, Version("1.2.99")
|
168
|
-
Version("1.2.4").wont_be :<, Version("1.2.3.99")
|
169
|
-
end
|
170
|
-
|
171
|
-
it "returns false when lvalue is equal to rvalue" do
|
172
|
-
Version(1.0).wont_be :<, Version(1)
|
173
|
-
Version("1.2.0").wont_be :<, Version(1.2)
|
174
|
-
Version("1.2.3.0").wont_be :<, Version("1.2.3")
|
175
|
-
|
176
|
-
Version(1).wont_be :<, Version(1.0)
|
177
|
-
Version(1.2).wont_be :<, Version("1.2.0")
|
178
|
-
Version("1.2.3").wont_be :<, Version("1.2.3.0")
|
179
|
-
end
|
180
|
-
end
|
181
|
-
end
|