semver2 3.0.1 → 3.1.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 (5) hide show
  1. data/.semver +5 -5
  2. data/README.md +1 -1
  3. data/bin/semver +0 -0
  4. data/lib/semver.rb +37 -0
  5. metadata +3 -3
data/.semver CHANGED
@@ -1,5 +1,5 @@
1
- ---
2
- :major: 3
3
- :minor: 0
4
- :patch: 1
5
- :special: ""
1
+ ---
2
+ :major: 3
3
+ :minor: 1
4
+ :patch: 0
5
+ :special: ''
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- SemVer 3.0.0-rc.1 gem, following semver.org 2.0.0-rc.1
1
+ SemVer2 3.0.x gem, following semver.org 2.0.0-rc.1
2
2
  ======
3
3
 
4
4
  quickstart on the command line
data/bin/semver CHANGED
File without changes
data/lib/semver.rb CHANGED
@@ -100,4 +100,41 @@ class SemVer
100
100
  end
101
101
 
102
102
  include Comparable
103
+
104
+ # Parses a semver from a string and format.
105
+ def self.parse(version_string, format = nil, allow_missing = true)
106
+ format ||= TAG_FORMAT
107
+ regex_str = Regexp.escape format
108
+
109
+ # Convert all the format characters to named capture groups
110
+ regex_str = regex_str.gsub('%M', '(?<major>\d+)').
111
+ gsub('%m', '(?<minor>\d+)').
112
+ gsub('%p', '(?<patch>\d+)').
113
+ gsub('%s', '(?:-(?<special>[A-Za-z][0-9A-Za-z\.]+))?')
114
+
115
+ regex = Regexp.new(regex_str)
116
+ match = regex.match version_string
117
+
118
+ if match
119
+ major = minor = patch = nil
120
+ special = ''
121
+
122
+ # Extract out the version parts
123
+ major = match[:major].to_i if match.names.include? 'major'
124
+ minor = match[:minor].to_i if match.names.include? 'minor'
125
+ patch = match[:patch].to_i if match.names.include? 'patch'
126
+ special = match[:special] || '' if match.names.include? 'special'
127
+
128
+ # Failed parse if major, minor, or patch wasn't found
129
+ # and allow_missing is false
130
+ return nil if !allow_missing and [major, minor, patch].any? {|x| x.nil? }
131
+
132
+ # Otherwise, allow them to default to zero
133
+ major ||= 0
134
+ minor ||= 0
135
+ patch ||= 0
136
+
137
+ SemVer.new major, minor, patch, special
138
+ end
139
+ end
103
140
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semver2
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-02-13 00:00:00.000000000Z
13
+ date: 2013-02-04 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: maintain versions as per http://semver.org
16
16
  email: henrik@haf.se
@@ -45,7 +45,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
45
45
  version: '0'
46
46
  requirements: []
47
47
  rubyforge_project:
48
- rubygems_version: 1.8.15
48
+ rubygems_version: 1.8.24
49
49
  signing_key:
50
50
  specification_version: 3
51
51
  summary: Semantic Versioning