version_compare 0.0.2 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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