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 CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: bb866c1ed445858b022983875066a98b0875dcac
4
- data.tar.gz: fff6ce85b9bb3f11bb9bd9ae352f24789dd040ee
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NDgxYzAxZWFkMzA1Mjc1NWIzODA4ZjA2Y2YzMWQ2OGM4ZWZjYjNmNg==
5
+ data.tar.gz: !binary |-
6
+ ZDYwNWExZDY4NmIyMjFiOWVhMDEyYmViNTNlNmQyYTdjYWVjNjkzNA==
5
7
  SHA512:
6
- metadata.gz: 974085d3d812048c6aa7d6435381750c488bec4fab4d00d203ecd88f586f57af4b5f50d28b67d4543f5596edabe68998c2278204f34b4528cf29d59583c6ef27
7
- data.tar.gz: 6fad959c52815eccf38476c136d90ef40fec1b909f0c3e9edd7551a69ebec521c728a1f8968fc48e683eb85ff66915f352c8db9c14ffac967fb1de8e65f7ebb5
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 `#to_version`.
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 `Version.new(<value>)` or `Version(<value>)`.
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
- Version(1) > Version(2)
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)> Version(1.0) > Version(1)
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.Version(1.0) > Conversions.Version(1)
67
+ [1] pry(main)> Conversions.ComparableVersion(1.0) > Conversions.ComparableVersion(1)
68
68
  => false
69
69
  ```
70
70
 
71
- Version Compare uses the `Comparable` mixin for comparisons, so you get all the
71
+ ComparableVersion Compare uses the `Comparable` mixin for comparisons, so you get all the
72
72
  usual operators:
73
73
 
74
74
  ```ruby
75
- Version(2) > Version(1) # => true
76
- Version(1.2) > Version(1.2) # => false
77
- Version("1.2.3") >= Version("1.2") # => true
78
- Version("1.2.3.4") <= Version("1.2.3.4") # => true
79
- Version([1, 2]) == Version(["1", "2"]) # => true
80
- Version("1.2.0.0") == Version(1.2) # => true
81
- Version("1.0.0.0") != Version(1) # => false
82
- [Version(1), Version("1.0.0.1"), Version(0.1)].sort # => ["0.1", "1", "1.0.0.1"]
83
- [Version(1), Version("1.0.0.1"), Version(0.1)].sort { |a, b| b <=> a } # => ["1.0.0.1", "1", "0.1"]
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 `Version` ... constant?
87
+ ### Wait, so what exactly is this `ComparableVersion` ... constant?
88
88
 
89
- `Version()` is actually a conversion function. It follows the Ruby convention of
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, `Version()` tries its hardest
93
- to convert any Version-like input into a new `Version` object. Given a numeric,
94
- string, or array input (which are all obvious conversions to make), `Version()`
95
- is essentially the same as `Version.new()`. However, `Version()` is otherwise a
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 Version it will raise a `TypeError` exception. Doing the same for
98
- `Version.new()` will ultimately just `#to_s` the input; and since almost
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
- Version.new(OpenStruct.new(a: 1)).to_s # => "0"
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 `Version()`?
107
+ ### Can I pass my own custom objects into `ComparableVersion()`?
108
108
 
109
- Yes! All you have to do is define a `#to_version` implicit conversion method in
110
- your object that creates a new Version object in the usual fashion.
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 to_version
116
- Version.new(VERSION.to_s)
115
+ def to_comparable_version
116
+ ComparableVersion.new(VERSION.to_s)
117
117
  end
118
118
  end
119
119
 
120
- Version(MyObject.new) > Version(2.0) # => false
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 to_version
139
- Version.new(VERSION) # Or Version.new([1, 2]) or whatever...
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
- Version(Rails.application) > Version(1.0) # => true
145
+ ComparableVersion(Rails.application) > ComparableVersion(1.0) # => true
146
146
  ```
147
147
 
148
148
  So you see... the sky is the limit!
@@ -1,5 +1,5 @@
1
1
  require "version_compare/conversions"
2
2
 
3
3
  module VersionCompare
4
- autoload :Version, "version_compare/version"
4
+ autoload :ComparableVersion, "version_compare/comparable_version"
5
5
  end
@@ -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 "version"
5
+ require_relative "comparable_version"
6
6
 
7
- # The `Version()` conversion method is defined as a module_function so that it
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.Version(1.2).to_s # => "1.2"
12
+ # Conversions.ComparableVersion(1.2).to_s # => "1.2"
13
13
  module_function
14
14
 
15
- # Strict conversion method for creating a `Version` object out of anything
16
- # that sensibly is a Version.
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
- # Version(1) # => #<Version:0x007fd8144ea658 @major=1, @minor=nil, @tiny=nil, @patch=nil>
22
- # Version(1.2) # => #<Version:0x007fd8144ea658 @major=1, @minor=2, @tiny=nil, @patch=nil>
23
- # Version("1.2.3") # => #<Version:0x007fd8144ea658 @major=1, @minor=2, @tiny=3, @patch=nil>
24
- # Version(["1", "2", "3", "4"]) # => #<Version:0x007fd8144f98b0 @major=1, @minor=2, @tiny=3, @patch=4>
25
- def Version(value)
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
- Version.new(value)
32
- when -> val { val.respond_to?(:to_version) }
33
- value.to_version
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 Version"
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
@@ -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
- Version(1).class.must_equal Version
6
+ ComparableVersion(1).class.must_equal ComparableVersion
7
7
  end
8
8
 
9
9
  it "works on floats" do
10
- Version(1.2).class.must_equal Version
10
+ ComparableVersion(1.2).class.must_equal ComparableVersion
11
11
  end
12
12
 
13
13
  it "works on strings" do
14
- Version("1.2.3.4").class.must_equal Version
14
+ ComparableVersion("1.2.3.4").class.must_equal ComparableVersion
15
15
  end
16
16
 
17
17
  it "works on arrays" do
18
- Version([1, 2, 3, 4]).must_be_instance_of Version
19
- Version([1, 2, 3, 4]).must_equal Version("1.2.3.4")
20
- Version(["1", "2", "3", "4"]).must_equal Version("1.2.3.4")
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 Versions" do
24
- Version(Version(1.2)).must_be_instance_of Version
25
- Version(Version(1.2)).must_equal Version(1.2)
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
- Version(1).to_s.must_equal "1"
33
- Version(1.2).to_s.must_equal "1.2"
34
- Version("1.2.3").to_s.must_equal "1.2.3"
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
- Version(1).to_a.must_equal [1]
41
- Version(1.0).to_a.must_equal [1, 0]
42
- Version("1.2.3").to_a.must_equal [1, 2, 3]
43
- Version("1.2.3.4").to_a.must_equal [1, 2, 3, 4]
44
- Version(["1", "2", "3", "4"]).to_a.must_equal [1, 2, 3, 4]
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: " + Version("1.2.3.4")).must_equal "version: 1.2.3.4"
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 #to_version" do
58
- it "raises TypeError when attempting to convert custom objects that don't implement #to_version" do
59
- -> { Version(Object.new) }.must_raise TypeError
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 #to_version" do
63
+ describe "with #to_comparable_version" do
64
64
  before do
65
65
  class CustomObject < Object
66
66
  VERSION = 1.9
67
- def to_version
68
- Version.new(VERSION.to_s)
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 Version object" do
76
- Version(subject).must_be_instance_of Version
77
- Version.new(subject).must_be_instance_of Version
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
@@ -21,8 +21,8 @@ module Dummy
21
21
 
22
22
  VERSION = "1.2".freeze
23
23
 
24
- def to_version
25
- Version.new(VERSION)
24
+ def to_comparable_version
25
+ ComparableVersion.new(VERSION)
26
26
  end
27
27
  end
28
28
  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.0.2
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: 2014-08-31 00:00:00.000000000 Z
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
- - lib/version_compare/version.rb
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.1
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