sem_version 1.3.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/README.md +26 -23
- data/lib/sem_version.rb +20 -23
- metadata +5 -7
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZTBhNmE0MGMxY2ExYzg2NzFiMjIxYjE4ODJjOTNjMGVmZDM4MzNiMw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
OTcxOTA2ZWNmZTU3NzYxYzM5MzY4ODBhNzM0ZDIzMmRhZDkwYzk1ZA==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MmIxMGM1ODRkNTUxM2Q2MDAxNGUwOGEwMDlhNWU0MmQ1ODM5NGQ3YjU4ZmVm
|
10
|
+
ZDJmNDVkN2JkNzc1ZDdlZGYyN2U5MjI2YzVlODU5MzU3YmYxY2YwZDgwZDcw
|
11
|
+
ZTUwNDkwODc0OTRiMDMxNDdlNWU2YjMyNjc4NGU2MDk3YTY3NmM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZjI3ZGUxZDc5Y2NiNzBmNjkxNTRiN2JlZWYyYTI5NGRmOGI1OTMxYzVkYWYz
|
14
|
+
YTA4MjZhYTY4MjIxMzIwZjc2NGZhNjhiNTNmYzJmNWEzZTNkNWM2NDU5ZGQ2
|
15
|
+
MWM4NDA3NzRmMzM1MzJkNzI0MWUwMDIwYzc0NDc3YzNhYTJkZWQ=
|
data/README.md
CHANGED
@@ -3,13 +3,16 @@ SemVersion
|
|
3
3
|
|
4
4
|
SemVersion is a gem to help parse, validate, modify, and compare [Semantic Versions](http://semver.org).
|
5
5
|
|
6
|
+
Note that this version of the gem adheres to SemVer v2.0.0.
|
7
|
+
If you want v1.0.0 behaviour, use the `semver-v1.0.0` branch.
|
8
|
+
|
6
9
|
Parsing
|
7
10
|
-------
|
8
11
|
|
9
12
|
Parsing is easy:
|
10
13
|
|
11
14
|
```ruby
|
12
|
-
v = SemVersion.new('1.2.3-pre.4+
|
15
|
+
v = SemVersion.new('1.2.3-pre.4+metadata.5')
|
13
16
|
|
14
17
|
v.major # => 1
|
15
18
|
v.minor # => 2
|
@@ -17,9 +20,9 @@ v.patch # => 3
|
|
17
20
|
|
18
21
|
v.pre # => 'pre.4'
|
19
22
|
v.prerelease # => 'pre.4'
|
20
|
-
v.
|
23
|
+
v.metadata # => 'metadata.5'
|
21
24
|
|
22
|
-
v.to_s # => '1.2.3-pre.4+
|
25
|
+
v.to_s # => '1.2.3-pre.4+metadata.5'
|
23
26
|
```
|
24
27
|
|
25
28
|
You can pass any valid semantic version string, as specified by [Semantic Versions](http://semver.org).
|
@@ -28,20 +31,20 @@ Invalid versions will raise an ArgumentError.
|
|
28
31
|
You can also create a new SemVersion from an array or a hash, and serialise back to arrays and hashes.
|
29
32
|
|
30
33
|
```ruby
|
31
|
-
v1 = SemVersion.new([1, 2, 3, 'pre.4', '
|
32
|
-
v1.to_s # => '1.2.3-pre.4+
|
33
|
-
v1.to_a # => [1, 2, 3, 'pre.4', '
|
34
|
+
v1 = SemVersion.new([1, 2, 3, 'pre.4', 'metadata.5'])
|
35
|
+
v1.to_s # => '1.2.3-pre.4+metadata.5'
|
36
|
+
v1.to_a # => [1, 2, 3, 'pre.4', 'metadata.5']
|
34
37
|
|
35
|
-
v2 = SemVersion.new(1, 2, 3, nil, '
|
36
|
-
v2.to_s # => '1.2.3+
|
37
|
-
v2.to_a # => [1, 2, 3, nil, '
|
38
|
+
v2 = SemVersion.new(1, 2, 3, nil, 'metadata.5')
|
39
|
+
v2.to_s # => '1.2.3+metadata.5'
|
40
|
+
v2.to_a # => [1, 2, 3, nil, 'metadata.5']
|
38
41
|
|
39
|
-
v3 = SemVersion.new(:major => 1, :minor => 2, :patch => 3, :pre => 'pre.4', :
|
40
|
-
v.to_s # => '1.2.3-pre.4+
|
41
|
-
v.to_h # => {:major => 1, :minor => 2, :patch => 3, :pre => 'pre.4', :
|
42
|
+
v3 = SemVersion.new(:major => 1, :minor => 2, :patch => 3, :pre => 'pre.4', :metadata => 'metadata.5')
|
43
|
+
v.to_s # => '1.2.3-pre.4+metadata.5'
|
44
|
+
v.to_h # => {:major => 1, :minor => 2, :patch => 3, :pre => 'pre.4', :metadata => 'metadata.5'}
|
42
45
|
|
43
|
-
v4 = SemVersion.new(:major => 1, :minor => 2, :patch => 3, :
|
44
|
-
v4.to_h # => {:major => 1, :minor => 2, :patch => 3, :
|
46
|
+
v4 = SemVersion.new(:major => 1, :minor => 2, :patch => 3, :metadata => 'metadata.6')
|
47
|
+
v4.to_h # => {:major => 1, :minor => 2, :patch => 3, :metadata => 'metadata.6'}
|
45
48
|
```
|
46
49
|
|
47
50
|
You can also use `SemVersion()` as an alias for `SemVersion.new()`.
|
@@ -72,9 +75,9 @@ v = SemVersion.new('1.2.3')
|
|
72
75
|
v.major = 3
|
73
76
|
v.minor = 5
|
74
77
|
v.pre = 'pre.2'
|
75
|
-
v.
|
78
|
+
v.metadata = 'metadata.x.7'
|
76
79
|
|
77
|
-
v.to_s # => '3.5.1-pre.2+
|
80
|
+
v.to_s # => '3.5.1-pre.2+metadata.x.7'
|
78
81
|
|
79
82
|
v.major = -1 # => ArgumentError
|
80
83
|
v.major = 'a' # => ArgumentError
|
@@ -88,9 +91,9 @@ Comparing
|
|
88
91
|
You can compare semantic versions using `<`, `>`, `<=`, `>=`, `==`, and `<=>`
|
89
92
|
|
90
93
|
```ruby
|
91
|
-
SemVersion.new('1.2.3') < SemVersion.new('1.2.2')
|
92
|
-
SemVersion.new('1.2.3-pre.1') <= SemVersion.new('1.2.3-pre')
|
93
|
-
SemVersion.new('1.2.3+
|
94
|
+
SemVersion.new('1.2.3') < SemVersion.new('1.2.2') # => true
|
95
|
+
SemVersion.new('1.2.3-pre.1') <= SemVersion.new('1.2.3-pre') # => false
|
96
|
+
SemVersion.new('1.2.3+metadata.11') > SemVersion.new('1.2.3+metadata.2') # => false
|
94
97
|
```
|
95
98
|
|
96
99
|
Satisfying constraints
|
@@ -101,8 +104,8 @@ Constraints are in the form `"<comparison> <version>"`, e.g. ">= 1.2.2", "= 1.3"
|
|
101
104
|
|
102
105
|
When using the pessimistic operation, `~>`, versions may be specified in the form `"x.y"` or `"x.y.z"` (with `"~> x.y"` meaning `">= x.y.0" && "< x+1.0.0"`, and `"~> x.y.z"` meaning `">= x.y.z" && "< x.y+1.0"`).
|
103
106
|
|
104
|
-
When using the other operations, versions may be in the form `"x"`, `"x.y"`, or a full semantic version (including optional pre-release and
|
105
|
-
In the former two cases, the missing versions out of minor and patch will be filled in with 0's, and the pre-release and
|
107
|
+
When using the other operations, versions may be in the form `"x"`, `"x.y"`, or a full semantic version (including optional pre-release and metadata).
|
108
|
+
In the former two cases, the missing versions out of minor and patch will be filled in with 0's, and the pre-release and metadata ignored.
|
106
109
|
|
107
110
|
```ruby
|
108
111
|
SemVersion.new('1.2.3').satisfies?('>= 1.2') # => true
|
@@ -142,5 +145,5 @@ You can also load a set of core extensions using an optional require.
|
|
142
145
|
require 'sem_version'
|
143
146
|
require 'sem_version/core_ext'
|
144
147
|
|
145
|
-
"1.2.3+pre.4-
|
146
|
-
```
|
148
|
+
"1.2.3+pre.4-metadata.5".to_version
|
149
|
+
```
|
data/lib/sem_version.rb
CHANGED
@@ -1,31 +1,31 @@
|
|
1
1
|
class SemVersion
|
2
2
|
include Comparable
|
3
3
|
|
4
|
-
VERSION = '
|
4
|
+
VERSION = '2.0.0'
|
5
5
|
|
6
6
|
# Pattern allows min and patch to be skipped. We have to do extra checking if we want them
|
7
7
|
SEMVER_REGEX = /^(\d+)(?:\.(\d+)(?:\.(\d+)(?:-([\dA-Za-z\-]+(?:\.[\dA-Za-z\-]+)*))?(?:\+([\dA-Za-z\-]+(?:\.[\dA-Za-z\-]+)*))?)?)?$/
|
8
|
-
|
8
|
+
PRE_METADATA_REGEX = /^[\dA-Za-z\-]+(\.[\dA-Za-z\-]+)*$/
|
9
9
|
|
10
|
-
attr_reader :major, :minor, :patch, :pre, :
|
10
|
+
attr_reader :major, :minor, :patch, :pre, :metadata
|
11
11
|
alias_method :prerelease, :pre
|
12
12
|
|
13
13
|
# Format were raw bits are passed in is undocumented, and not validity checked
|
14
14
|
def initialize(*args)
|
15
15
|
if args.first.is_a?(String)
|
16
|
-
@major, @minor, @patch, @pre, @
|
16
|
+
@major, @minor, @patch, @pre, @metadata = self.class.parse(args.first)
|
17
17
|
# Validation should be handled at a string level by self.parse, but validate anyway
|
18
18
|
validate
|
19
19
|
elsif args.first.is_a?(Hash)
|
20
|
-
@major, @minor, @patch, @pre, @
|
20
|
+
@major, @minor, @patch, @pre, @metadata = args.first.values_at(:major, :minor, :patch, :pre, :metadata)
|
21
21
|
# Allow :prerelease as well
|
22
22
|
@pre ||= args.first[:prerelease]
|
23
23
|
validate
|
24
24
|
elsif args.first.is_a?(Array)
|
25
|
-
@major, @minor, @patch, @pre, @
|
25
|
+
@major, @minor, @patch, @pre, @metadata = *args.first
|
26
26
|
validate
|
27
27
|
else
|
28
|
-
@major, @minor, @patch, @pre, @
|
28
|
+
@major, @minor, @patch, @pre, @metadata = *args
|
29
29
|
validate
|
30
30
|
end
|
31
31
|
end
|
@@ -65,10 +65,7 @@ class SemVersion
|
|
65
65
|
pre = compare_sep(@pre, other.pre, true)
|
66
66
|
return pre unless pre == 0
|
67
67
|
|
68
|
-
|
69
|
-
return bui unless bui == 0
|
70
|
-
|
71
|
-
0
|
68
|
+
return 0
|
72
69
|
end
|
73
70
|
|
74
71
|
def satisfies?(constraint)
|
@@ -122,33 +119,33 @@ class SemVersion
|
|
122
119
|
end
|
123
120
|
|
124
121
|
def pre=(val)
|
125
|
-
unless val.nil? || (val.is_a?(String) && val =~
|
122
|
+
unless val.nil? || (val.is_a?(String) && val =~ PRE_METADATA_REGEX)
|
126
123
|
raise ArgumentError, "#{val} is not a valid pre-release version (must be nil, or a string following http://semver.org constraints)"
|
127
124
|
end
|
128
125
|
@pre = val
|
129
126
|
end
|
130
127
|
alias_method :prerelease=, :pre=
|
131
128
|
|
132
|
-
def
|
133
|
-
unless val.nil? || (val.is_a?(String) && val =~
|
134
|
-
raise ArgumentError, "#{val} is not a valid
|
129
|
+
def metadata=(val)
|
130
|
+
unless val.nil? || (val.is_a?(String) && val =~ PRE_METADATA_REGEX)
|
131
|
+
raise ArgumentError, "#{val} is not a valid metadata string (must be nil, or a string following http://semver.org constraints)"
|
135
132
|
end
|
136
|
-
@
|
133
|
+
@metadata = val
|
137
134
|
end
|
138
135
|
|
139
136
|
def to_s
|
140
137
|
r = "#{@major}.#{@minor}.#{@patch}"
|
141
138
|
r << "-#{@pre}" if @pre
|
142
|
-
r << "+#{@
|
139
|
+
r << "+#{@metadata}" if @metadata
|
143
140
|
r
|
144
141
|
end
|
145
142
|
|
146
143
|
def to_a
|
147
|
-
[@major, @minor, @patch, @pre, @
|
144
|
+
[@major, @minor, @patch, @pre, @metadata]
|
148
145
|
end
|
149
146
|
|
150
147
|
def to_h
|
151
|
-
h = [:major, :minor, :patch, :pre, :
|
148
|
+
h = [:major, :minor, :patch, :pre, :metadata].zip(to_a)
|
152
149
|
Hash[h.reject{ |k,v| v.nil? }]
|
153
150
|
end
|
154
151
|
|
@@ -188,15 +185,15 @@ class SemVersion
|
|
188
185
|
raise ArgumentError, "Invalid version (major is not an int >= 0)" unless @major.is_a?(Fixnum) && @major >= 0
|
189
186
|
raise ArgumentError, "Invalid version (minor is not an int >= 0)" unless @minor.is_a?(Fixnum) && @minor >= 0
|
190
187
|
raise ArgumentError, "Invalid version (patch is not an int >= 0)" unless @patch.is_a?(Fixnum) && @patch >= 0
|
191
|
-
unless @pre.nil? || (@pre.is_a?(String) && @pre =~
|
188
|
+
unless @pre.nil? || (@pre.is_a?(String) && @pre =~ PRE_METADATA_REGEX)
|
192
189
|
raise ArgumentError, "Invalid version (pre must be nil, or a string following http://semver.org contraints)"
|
193
190
|
end
|
194
|
-
unless @
|
195
|
-
raise ArgumentError, "Invalid version (
|
191
|
+
unless @metadata.nil? || (@metadata.is_a?(String) && @metadata =~ PRE_METADATA_REGEX)
|
192
|
+
raise ArgumentError, "Invalid version (metadata must be nil, or a string following http://semver.org contraints)"
|
196
193
|
end
|
197
194
|
end
|
198
195
|
end
|
199
196
|
|
200
197
|
def SemVersion(*args)
|
201
198
|
SemVersion.new(*args)
|
202
|
-
end
|
199
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sem_version
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Antony Male
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-07-24 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description: Semantic Version parsing, comparison, and constraint checking utility
|
15
14
|
(e.g. ~> 1.2), as specified by http://semver.org/
|
@@ -25,27 +24,26 @@ files:
|
|
25
24
|
homepage: https://github.com/canton7/sem_version
|
26
25
|
licenses:
|
27
26
|
- MIT
|
27
|
+
metadata: {}
|
28
28
|
post_install_message:
|
29
29
|
rdoc_options: []
|
30
30
|
require_paths:
|
31
31
|
- lib
|
32
32
|
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
33
|
requirements:
|
35
34
|
- - ! '>='
|
36
35
|
- !ruby/object:Gem::Version
|
37
36
|
version: 1.9.2
|
38
37
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
38
|
requirements:
|
41
39
|
- - ! '>='
|
42
40
|
- !ruby/object:Gem::Version
|
43
41
|
version: '0'
|
44
42
|
requirements: []
|
45
43
|
rubyforge_project:
|
46
|
-
rubygems_version:
|
44
|
+
rubygems_version: 2.0.5
|
47
45
|
signing_key:
|
48
|
-
specification_version:
|
46
|
+
specification_version: 4
|
49
47
|
summary: ! 'SemVersion: Semantic version parsing and comparison, and constraint checking.
|
50
48
|
See http://semver.org/'
|
51
49
|
test_files: []
|