version_compare 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +5 -13
  2. data/.gitignore +11 -0
  3. data/.travis.yml +21 -0
  4. data/CHANGELOG.md +10 -0
  5. data/Gemfile +6 -0
  6. data/Gemfile.lock +51 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +84 -63
  9. data/Rakefile +6 -28
  10. data/bin/console +15 -0
  11. data/bin/setup +8 -0
  12. data/lib/version_compare.rb +3 -3
  13. data/lib/version_compare/comparable_version.rb +66 -55
  14. data/lib/version_compare/conversions.rb +34 -32
  15. data/lib/version_compare/version.rb +3 -0
  16. data/version_compare.gemspec +40 -0
  17. metadata +108 -98
  18. data/MIT-LICENSE +0 -20
  19. data/test/comparable_version_test.rb +0 -188
  20. data/test/conversions_test.rb +0 -82
  21. data/test/dummy/README.rdoc +0 -28
  22. data/test/dummy/Rakefile +0 -6
  23. data/test/dummy/app/assets/javascripts/application.js +0 -13
  24. data/test/dummy/app/assets/stylesheets/application.css +0 -13
  25. data/test/dummy/app/controllers/application_controller.rb +0 -5
  26. data/test/dummy/app/helpers/application_helper.rb +0 -2
  27. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  28. data/test/dummy/bin/bundle +0 -3
  29. data/test/dummy/bin/rails +0 -4
  30. data/test/dummy/bin/rake +0 -4
  31. data/test/dummy/config.ru +0 -4
  32. data/test/dummy/config/application.rb +0 -29
  33. data/test/dummy/config/boot.rb +0 -5
  34. data/test/dummy/config/database.yml +0 -25
  35. data/test/dummy/config/environment.rb +0 -5
  36. data/test/dummy/config/environments/development.rb +0 -29
  37. data/test/dummy/config/environments/production.rb +0 -80
  38. data/test/dummy/config/environments/test.rb +0 -36
  39. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  40. data/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  41. data/test/dummy/config/initializers/inflections.rb +0 -16
  42. data/test/dummy/config/initializers/mime_types.rb +0 -5
  43. data/test/dummy/config/initializers/secret_token.rb +0 -12
  44. data/test/dummy/config/initializers/session_store.rb +0 -3
  45. data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
  46. data/test/dummy/config/locales/en.yml +0 -23
  47. data/test/dummy/config/routes.rb +0 -56
  48. data/test/dummy/log/test.log +0 -0
  49. data/test/dummy/public/404.html +0 -58
  50. data/test/dummy/public/422.html +0 -58
  51. data/test/dummy/public/500.html +0 -57
  52. data/test/dummy/public/favicon.ico +0 -0
  53. data/test/test_helper.rb +0 -13
@@ -1,5 +1,5 @@
1
- require "version_compare/conversions"
2
-
3
1
  module VersionCompare
4
- autoload :ComparableVersion, "version_compare/comparable_version"
5
2
  end
3
+
4
+ require "version_compare/conversions"
5
+ require "version_compare/comparable_version"
@@ -1,71 +1,82 @@
1
- class ComparableVersion
2
- DEFAULT_SEPARATOR = ".".freeze
1
+ module VersionCompare
2
+ # VersionCompare::ComparableVersion objects compare themselves with other
3
+ # VersionCompare::ComparableVersion objects.
4
+ #
5
+ # @attr value [#to_comparable_version, #to_ary, #to_s] the Version object
6
+ class ComparableVersion
7
+ DEFAULT_SEPARATOR = ".".freeze
8
+ NAMES = %i[major minor tiny patch].freeze
3
9
 
4
- include Comparable
10
+ include Comparable
5
11
 
6
- # ComparableVersion component names
7
- NAMES = [:major, :minor, :tiny, :patch].freeze
12
+ attr_accessor(*NAMES)
13
+ attr_reader :separator
8
14
 
9
- attr_accessor *NAMES
10
- attr_reader :separator
15
+ def initialize(value, separator: DEFAULT_SEPARATOR)
16
+ @separator = separator
11
17
 
12
- def initialize(value, options = {})
13
- @separator = options.fetch(:separator) { DEFAULT_SEPARATOR }
18
+ @major, @minor, @tiny, @patch =
19
+ if value.respond_to?(:to_comparable_version)
20
+ value.to_comparable_version.to_a
21
+ elsif value.respond_to?(:to_ary)
22
+ value.to_ary.map(&:to_i)
23
+ else
24
+ value.to_s.split(separator).map(&:to_i)
25
+ end
26
+ end
14
27
 
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
28
+ def inspect
29
+ "<#{identification}>"
30
+ end
24
31
 
25
- def inspect
26
- "<#{identification}>"
27
- end
32
+ # Implicit conversion method.
33
+ #
34
+ # @return [VersionCompare::ComparableVersion] self
35
+ def to_comparable_version
36
+ self
37
+ end
28
38
 
29
- # Implicit conversion method
30
- def to_comparable_version
31
- self
32
- end
39
+ # @return [String] a String representation of the version
40
+ def to_s
41
+ NAMES.map { |name| public_send(name) }.compact.join(separator)
42
+ end
43
+ alias :to_str :to_s
33
44
 
34
- def to_s
35
- NAMES.map { |name| public_send(name) }.compact.join(separator)
36
- end
37
- alias :to_str :to_s
45
+ # @return [Array] an Array representation of the version's parts
46
+ def to_a
47
+ NAMES.map { |name| public_send(name) }.compact
48
+ end
49
+ alias :to_ary :to_a
38
50
 
39
- def to_a
40
- NAMES.map { |name| public_send(name) }.compact
41
- end
42
- alias :to_ary :to_a
51
+ # ComparableVersion components comparison method. Uses Comparable to assess
52
+ # whether this ComparableVersion's component value or the other
53
+ # ComparableVersion's component value is greater or lesser. The first value
54
+ # to be found as greater or lesser determines which ComparableVersion
55
+ # object is greater or lesser.
56
+ #
57
+ # Missing ComparableVersion components are treated as 0 values, which
58
+ # effectively gives them no weight in the comparison.
59
+ #
60
+ # @params [ComparableVersion] other the other ComparableVersion object we
61
+ # are comparing with
62
+ def <=>(other)
63
+ NAMES.each do |name|
64
+ result = send(name).to_i <=> other.send(name).to_i
65
+ return result unless result.zero?
66
+ end
43
67
 
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?
68
+ 0
57
69
  end
58
70
 
59
- 0
60
- end
71
+ private
61
72
 
62
- private
73
+ def identification
74
+ version_identifiers =
75
+ NAMES.map { |name|
76
+ "#{name}:#{send(name)}" if send(name)
77
+ }.compact.join(", ")
63
78
 
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}]"
79
+ "#{self.class}[#{version_identifiers}]"
80
+ end
70
81
  end
71
82
  end
@@ -1,38 +1,40 @@
1
- # Conversions is meant to be a common module used to define standard conversion
2
- # methods. Anytime one of the standard conversion methods are needed, the
3
- # Conversions module can be included and then used freely.
4
- module Conversions
5
- require_relative "comparable_version"
1
+ module VersionCompare
2
+ # Conversions is meant to be a common module used to define standard
3
+ # conversion methods. Anytime one of the standard conversion methods are
4
+ # needed, the Conversions module can be included and then used freely.
5
+ module Conversions
6
6
 
7
- # The `ComparableVersion()` conversion method is defined as a module_function so that it
8
- # may also be called directly without needing to include the Conversions module
9
- # if so desired.
10
- #
11
- # @example
12
- # Conversions.ComparableVersion(1.2).to_s # => "1.2"
13
7
  module_function
14
8
 
15
- # Strict conversion method for creating a `ComparableVersion` object out of anything
16
- # that sensibly is a ComparableVersion.
17
- #
18
- # @param [Object] value the object to be converted
19
- #
20
- # @example
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
- case value
27
- when String,
28
- Integer,
29
- Float,
30
- -> val { val.respond_to?(:to_ary) }
31
- ComparableVersion.new(value)
32
- when -> val { val.respond_to?(:to_comparable_version) }
33
- value.to_comparable_version
34
- else
35
- raise TypeError, "Cannot convert #{value.inspect} to ComparableVersion"
9
+ # Strict conversion method for creating a `ComparableVersion` object out of
10
+ # anything that can be interpreted is a ComparableVersion.
11
+ #
12
+ # @param [Object] value the object to be converted
13
+ #
14
+ # @example
15
+ # ComparableVersion(1)
16
+ # # => #<ComparableVersion @major=1, @minor=nil, @tiny=nil, @patch=nil>
17
+ #
18
+ # ComparableVersion(1.2)
19
+ # # => #<ComparableVersion @major=1, @minor=2, @tiny=nil, @patch=nil>
20
+ #
21
+ # ComparableVersion("1.2.3")
22
+ # # => #<ComparableVersion @major=1, @minor=2, @tiny=3, @patch=nil>
23
+ #
24
+ # ComparableVersion(["1", "2", "3", "4"])
25
+ # # => #<ComparableVersion @major=1, @minor=2, @tiny=3, @patch=4>
26
+ def ComparableVersion(value)
27
+ case value
28
+ when String,
29
+ Integer,
30
+ Float,
31
+ -> val { val.respond_to?(:to_ary) }
32
+ ComparableVersion.new(value)
33
+ when -> val { val.respond_to?(:to_comparable_version) }
34
+ value.to_comparable_version
35
+ else
36
+ raise TypeError, "Cannot convert #{value.inspect} to ComparableVersion"
37
+ end
36
38
  end
37
39
  end
38
40
  end
@@ -0,0 +1,3 @@
1
+ module VersionCompare
2
+ VERSION = "0.2.0"
3
+ end
@@ -0,0 +1,40 @@
1
+ lib = File.expand_path("../lib", __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "version_compare/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "version_compare"
7
+ spec.version = VersionCompare::VERSION
8
+ spec.authors = ["Paul Dobbins"]
9
+ spec.email = ["paul.dobbins@icloud.com"]
10
+
11
+ spec.summary = %q{VersionCompare simplifies comparison of version numbers with other version numbers.}
12
+ spec.description = %q{VersionCompare simplifies comparison of version numbers with other version numbers. It aims to be as light and flexible as possible. Inputs can be a String, Integer, Float, Array, or any object that defines `#to_comparable_version`.}
13
+ spec.homepage = "https://github.com/pdobb/version_compare"
14
+ spec.license = "MIT"
15
+
16
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
18
+ # if spec.respond_to?(:metadata)
19
+ # spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
20
+ # else
21
+ # raise "RubyGems 2.0 or newer is required to protect against " \
22
+ # "public gem pushes."
23
+ # end
24
+
25
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
26
+ f.match(%r{^(test|spec|features)/})
27
+ end
28
+ spec.bindir = "exe"
29
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
+ spec.require_paths = ["lib"]
31
+
32
+ spec.add_development_dependency "bundler", "~> 1.16"
33
+ spec.add_development_dependency "rake", "~> 10.0"
34
+ spec.add_development_dependency "minitest", "~> 5.0"
35
+ spec.add_development_dependency "minitest-reporters", "~> 1.2"
36
+ spec.add_development_dependency "simplecov", "~> 0.16"
37
+ spec.add_development_dependency "byebug", "~> 10.0"
38
+ spec.add_development_dependency "pry", "~> 0.11"
39
+ spec.add_development_dependency "pry-byebug", "~> 3.6"
40
+ end
metadata CHANGED
@@ -1,106 +1,151 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: version_compare
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Dobbins
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-04 00:00:00.000000000 Z
11
+ date: 2018-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 3.0.0
19
+ version: '1.16'
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
- version: 3.0.0
26
+ version: '1.16'
27
27
  - !ruby/object:Gem::Dependency
28
- name: sqlite3
28
+ name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '10.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
- version: '0'
40
+ version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: minitest-rails
42
+ name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '5.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
- version: '0'
55
- description: Version Compare allows you to easily compare if one Version is >, >=,
56
- ==, !=, <, or <= to another Version.
54
+ version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest-reporters
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.2'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.2'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.16'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.16'
83
+ - !ruby/object:Gem::Dependency
84
+ name: byebug
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '10.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '10.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.11'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.11'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pry-byebug
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3.6'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.6'
125
+ description: VersionCompare simplifies comparison of version numbers with other version
126
+ numbers. It aims to be as light and flexible as possible. Inputs can be a String,
127
+ Integer, Float, Array, or any object that defines `#to_comparable_version`.
57
128
  email:
58
- - pdobbins@gmail.com
129
+ - paul.dobbins@icloud.com
59
130
  executables: []
60
131
  extensions: []
61
132
  extra_rdoc_files: []
62
133
  files:
63
- - MIT-LICENSE
134
+ - ".gitignore"
135
+ - ".travis.yml"
136
+ - CHANGELOG.md
137
+ - Gemfile
138
+ - Gemfile.lock
139
+ - LICENSE.txt
64
140
  - README.md
65
141
  - Rakefile
142
+ - bin/console
143
+ - bin/setup
66
144
  - lib/version_compare.rb
67
145
  - lib/version_compare/comparable_version.rb
68
146
  - lib/version_compare/conversions.rb
69
- - test/comparable_version_test.rb
70
- - test/conversions_test.rb
71
- - test/dummy/README.rdoc
72
- - test/dummy/Rakefile
73
- - test/dummy/app/assets/javascripts/application.js
74
- - test/dummy/app/assets/stylesheets/application.css
75
- - test/dummy/app/controllers/application_controller.rb
76
- - test/dummy/app/helpers/application_helper.rb
77
- - test/dummy/app/views/layouts/application.html.erb
78
- - test/dummy/bin/bundle
79
- - test/dummy/bin/rails
80
- - test/dummy/bin/rake
81
- - test/dummy/config.ru
82
- - test/dummy/config/application.rb
83
- - test/dummy/config/boot.rb
84
- - test/dummy/config/database.yml
85
- - test/dummy/config/environment.rb
86
- - test/dummy/config/environments/development.rb
87
- - test/dummy/config/environments/production.rb
88
- - test/dummy/config/environments/test.rb
89
- - test/dummy/config/initializers/backtrace_silencers.rb
90
- - test/dummy/config/initializers/filter_parameter_logging.rb
91
- - test/dummy/config/initializers/inflections.rb
92
- - test/dummy/config/initializers/mime_types.rb
93
- - test/dummy/config/initializers/secret_token.rb
94
- - test/dummy/config/initializers/session_store.rb
95
- - test/dummy/config/initializers/wrap_parameters.rb
96
- - test/dummy/config/locales/en.yml
97
- - test/dummy/config/routes.rb
98
- - test/dummy/log/test.log
99
- - test/dummy/public/404.html
100
- - test/dummy/public/422.html
101
- - test/dummy/public/500.html
102
- - test/dummy/public/favicon.ico
103
- - test/test_helper.rb
147
+ - lib/version_compare/version.rb
148
+ - version_compare.gemspec
104
149
  homepage: https://github.com/pdobb/version_compare
105
150
  licenses:
106
151
  - MIT
@@ -111,54 +156,19 @@ require_paths:
111
156
  - lib
112
157
  required_ruby_version: !ruby/object:Gem::Requirement
113
158
  requirements:
114
- - - ! '>='
159
+ - - ">="
115
160
  - !ruby/object:Gem::Version
116
161
  version: '0'
117
162
  required_rubygems_version: !ruby/object:Gem::Requirement
118
163
  requirements:
119
- - - ! '>='
164
+ - - ">="
120
165
  - !ruby/object:Gem::Version
121
166
  version: '0'
122
167
  requirements: []
123
168
  rubyforge_project:
124
- rubygems_version: 2.4.8
169
+ rubygems_version: 2.7.6
125
170
  signing_key:
126
171
  specification_version: 4
127
- summary: Compare versions
128
- test_files:
129
- - test/comparable_version_test.rb
130
- - test/conversions_test.rb
131
- - test/dummy/app/assets/javascripts/application.js
132
- - test/dummy/app/assets/stylesheets/application.css
133
- - test/dummy/app/controllers/application_controller.rb
134
- - test/dummy/app/helpers/application_helper.rb
135
- - test/dummy/app/views/layouts/application.html.erb
136
- - test/dummy/bin/bundle
137
- - test/dummy/bin/rails
138
- - test/dummy/bin/rake
139
- - test/dummy/config/application.rb
140
- - test/dummy/config/boot.rb
141
- - test/dummy/config/database.yml
142
- - test/dummy/config/environment.rb
143
- - test/dummy/config/environments/development.rb
144
- - test/dummy/config/environments/production.rb
145
- - test/dummy/config/environments/test.rb
146
- - test/dummy/config/initializers/backtrace_silencers.rb
147
- - test/dummy/config/initializers/filter_parameter_logging.rb
148
- - test/dummy/config/initializers/inflections.rb
149
- - test/dummy/config/initializers/mime_types.rb
150
- - test/dummy/config/initializers/secret_token.rb
151
- - test/dummy/config/initializers/session_store.rb
152
- - test/dummy/config/initializers/wrap_parameters.rb
153
- - test/dummy/config/locales/en.yml
154
- - test/dummy/config/routes.rb
155
- - test/dummy/config.ru
156
- - test/dummy/log/test.log
157
- - test/dummy/public/404.html
158
- - test/dummy/public/422.html
159
- - test/dummy/public/500.html
160
- - test/dummy/public/favicon.ico
161
- - test/dummy/Rakefile
162
- - test/dummy/README.rdoc
163
- - test/test_helper.rb
164
- has_rdoc:
172
+ summary: VersionCompare simplifies comparison of version numbers with other version
173
+ numbers.
174
+ test_files: []