gversion 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/gversion.rb +74 -0
  3. metadata +44 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c6cf84397949f276be5090aa83d623e5853bf8fb
4
+ data.tar.gz: b06b08391f522a8d6bc1ffbe912884cd57ef8a35
5
+ SHA512:
6
+ metadata.gz: 6e706233e41dcb4ab12790ca715db751532666ddd272c96049b1f69baa1334e7aa17fdfe2308ac195ae013c96766986f9eeb42ed87862394426e2a50c9d06802
7
+ data.tar.gz: a655c57533cc41dd5c42dba0f302ab0839d54a6ddb4a526f7cff593a12946601d5f722d6348dd227fd603ed95e4219493a7c5f4b4c9b409f0ba5ecc39774a639
@@ -0,0 +1,74 @@
1
+ class Gversion
2
+ include Comparable
3
+
4
+ PATTERN = /^(?<major>0|[0-9][0-9]*)(\.(?<minor>0|[0-9][0-9]*))?(\.(?<revision>0|[0-9][0-9]*))?$/
5
+
6
+ attr_reader :major, :minor, :revision
7
+
8
+ def initialize(options)
9
+ [:major, :minor, :revision].each do |field|
10
+ validate_field(field, options[field])
11
+ instance_variable_set("@#{field}", options[field] || 0)
12
+ end
13
+ end
14
+
15
+ def self.parse(string)
16
+ match = PATTERN.match(string)
17
+ return nil unless match
18
+
19
+ self[match[:major], match[:minor], match[:revision]]
20
+ end
21
+
22
+ def self.[](*array)
23
+ new(major: array[0].to_i,
24
+ minor: array[1].to_i,
25
+ revision: array[2].to_i)
26
+ end
27
+
28
+ def self.parse!(string, _options = {})
29
+ parse(string) || (fail ArgumentError, 'invalid version format')
30
+ end
31
+
32
+ def <=>(other)
33
+ comparison = 0
34
+ [:major, :minor, :revision].each do |field|
35
+ comparison = send(field) <=> other.send(field)
36
+ break if comparison != 0
37
+ end
38
+
39
+ comparison
40
+ end
41
+
42
+ def to_s
43
+ @as_string ||= [major, minor, revision].join('.')
44
+ end
45
+
46
+ def to_f
47
+ # Will be wrong float number if minor > 9
48
+ @as_float ||= [major, minor].join('.').to_f
49
+ end
50
+
51
+ def self.greater_or_equal_than_version?(version, from_version)
52
+ self.parse!(version) >= self.parse(from_version)
53
+ end
54
+
55
+ def self.lesser_than_version?(version, from_version)
56
+ !self.greater_or_equal_than_version?(version, from_version)
57
+ end
58
+
59
+ def self.in_version_range?(version, from_version, to_version)
60
+ v = self.parse!(version)
61
+ min = self.parse!(from_version)
62
+ max = self.parse!(to_version)
63
+
64
+ v.between?(min, max)
65
+ end
66
+
67
+ private
68
+
69
+ def validate_field(field, value)
70
+ return unless value
71
+
72
+ fail ArgumentError, "#{field} field must be an integer" unless value.is_a?(Integer)
73
+ end
74
+ end
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gversion
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - konfortes@gmail.com
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-02-27 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Versions validations and comparisons!!!
14
+ email: konfortes@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/gversion.rb
20
+ homepage: http://rubygems.org/gems/gversion
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.4.8
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: Versions validations and comparisons
44
+ test_files: []