semver 0.2.2 → 1.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.
- data/.semver +4 -4
- data/README.md +2 -1
- data/bin/semver +25 -11
- data/lib/semver.rb +35 -41
- metadata +7 -7
data/.semver
CHANGED
data/README.md
CHANGED
data/bin/semver
CHANGED
@@ -6,24 +6,38 @@ require 'semver'
|
|
6
6
|
class CommandError < StandardError; end
|
7
7
|
|
8
8
|
begin
|
9
|
-
command = ARGV.shift
|
9
|
+
command = ARGV.shift || 'tag'
|
10
10
|
|
11
11
|
case command
|
12
12
|
when /^init(ialize)?$/
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
file = SemVer::FILE_NAME
|
14
|
+
|
15
|
+
if File.exist? file
|
16
|
+
puts "#{file} already exists"
|
17
|
+
else
|
18
|
+
version = SemVer.new
|
19
|
+
version.save file
|
20
|
+
end
|
17
21
|
|
18
22
|
when /^inc(rement)?$/
|
19
23
|
version = SemVer.find
|
20
24
|
dimension = ARGV.shift or raise CommandError, "required: major | minor | patch"
|
21
25
|
|
22
26
|
case dimension
|
23
|
-
when 'major'
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
+
when 'major'
|
28
|
+
version.major += 1
|
29
|
+
version.minor = 0
|
30
|
+
version.patch = 0
|
31
|
+
|
32
|
+
when 'minor'
|
33
|
+
version.minor += 1
|
34
|
+
version.patch = 0
|
35
|
+
|
36
|
+
when 'patch'
|
37
|
+
version.patch += 1
|
38
|
+
|
39
|
+
else
|
40
|
+
raise CommandError, "#{dimension} is invalid: major | minor | patch"
|
27
41
|
end
|
28
42
|
|
29
43
|
version.special = ''
|
@@ -42,7 +56,7 @@ begin
|
|
42
56
|
|
43
57
|
when 'tag'
|
44
58
|
version = SemVer.find
|
45
|
-
puts version.
|
59
|
+
puts version.to_s
|
46
60
|
|
47
61
|
when 'help'
|
48
62
|
puts <<-HELP
|
@@ -62,7 +76,7 @@ PLEASE READ http://semver.org
|
|
62
76
|
else raise CommandError, "invalid command #{command}"
|
63
77
|
end
|
64
78
|
|
65
|
-
rescue CommandError
|
79
|
+
rescue CommandError => e
|
66
80
|
puts e.message
|
67
81
|
puts "#{$0} help for more info"
|
68
82
|
exit 1
|
data/lib/semver.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
require 'yaml'
|
2
|
-
|
3
|
-
|
2
|
+
require 'ruby-debug'
|
3
|
+
require 'ruby-debug'
|
4
4
|
|
5
5
|
class SemVer
|
6
6
|
|
7
7
|
FILE_NAME = '.semver'
|
8
|
+
TAG_FORMAT = 'v%M.%m.%p%s'
|
8
9
|
|
9
10
|
def SemVer.find dir=nil
|
10
11
|
v = SemVer.new
|
11
|
-
|
12
|
+
f = SemVer.find_file dir
|
13
|
+
v.load f
|
12
14
|
v
|
13
15
|
end
|
14
16
|
|
@@ -20,59 +22,47 @@ class SemVer
|
|
20
22
|
Dir.chdir dir do
|
21
23
|
|
22
24
|
loop do
|
25
|
+
raise "#{dir} is not semantic versioned" if File.dirname(path) == '/'
|
23
26
|
|
24
|
-
if
|
25
|
-
raise NoSemVerError, "#{dir} is not semantic versioned"
|
26
|
-
elsif Dir[FILE_NAME].empty?
|
27
|
+
if Dir[path].empty?
|
27
28
|
path = File.join '..', path
|
29
|
+
path = File.expand_path path
|
28
30
|
next
|
29
31
|
else
|
30
|
-
path = File.expand_path path
|
31
32
|
return path
|
32
33
|
end
|
33
34
|
|
34
35
|
end
|
35
36
|
|
36
37
|
end
|
37
|
-
end
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
def attr_writer_pattern pattern, symbol
|
39
|
+
end
|
42
40
|
|
43
|
-
|
41
|
+
attr_accessor :major, :minor, :patch, :special
|
44
42
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
43
|
+
def initialize major=0, minor=0, patch=0, special=''
|
44
|
+
major.kind_of? Integer or raise "invalid major: #{major}"
|
45
|
+
minor.kind_of? Integer or raise "invalid minor: #{minor}"
|
46
|
+
patch.kind_of? Integer or raise "invalid patch: #{patch}"
|
52
47
|
|
48
|
+
unless special.empty?
|
49
|
+
special =~ /[A-Za-z][0-9A-Za-z-]+/ or raise "invalid special: #{special}"
|
53
50
|
end
|
54
51
|
|
52
|
+
@major, @minor, @patch, @special = major, minor, patch, special
|
55
53
|
end
|
56
54
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
self.major, self.minor, self.patch, self.special = major.to_s, minor.to_s, patch.to_s, special.to_s
|
55
|
+
def load file
|
56
|
+
@file = file
|
57
|
+
hash = YAML.load_file(file) || {}
|
58
|
+
@major = hash[:major] or raise "invalid semver file: #{file}"
|
59
|
+
@minor = hash[:minor] or raise "invalid semver file: #{file}"
|
60
|
+
@patch = hash[:patch] or raise "invalid semver file: #{file}"
|
61
|
+
@special = hash[:special] or raise "invalid semver file: #{file}"
|
65
62
|
end
|
66
63
|
|
67
|
-
def
|
68
|
-
|
69
|
-
self.major = hash[:major] || '0'
|
70
|
-
self.minor = hash[:minor] || '0'
|
71
|
-
self.patch = hash[:patch] || '0'
|
72
|
-
self.special = hash[:special] || ''
|
73
|
-
end
|
74
|
-
|
75
|
-
def save file=SemVer.find_file
|
64
|
+
def save file=nil
|
65
|
+
file ||= @file
|
76
66
|
|
77
67
|
hash = {
|
78
68
|
:major => @major,
|
@@ -81,18 +71,22 @@ class SemVer
|
|
81
71
|
:special => @special
|
82
72
|
}
|
83
73
|
|
84
|
-
yaml = YAML
|
74
|
+
yaml = YAML.dump hash
|
85
75
|
open(file, 'w') { |io| io.write yaml }
|
86
76
|
end
|
87
77
|
|
88
78
|
def format fmt
|
89
|
-
fmt.gsub! '%M', @major
|
90
|
-
fmt.gsub! '%m', @minor
|
91
|
-
fmt.gsub! '%p', @patch
|
92
|
-
fmt.gsub! '%s', @special
|
79
|
+
fmt.gsub! '%M', @major.to_s
|
80
|
+
fmt.gsub! '%m', @minor.to_s
|
81
|
+
fmt.gsub! '%p', @patch.to_s
|
82
|
+
fmt.gsub! '%s', @special.to_s
|
93
83
|
fmt
|
94
84
|
end
|
95
85
|
|
86
|
+
def to_s
|
87
|
+
format TAG_FORMAT
|
88
|
+
end
|
89
|
+
|
96
90
|
def <=> other
|
97
91
|
maj = major.to_i <=> other.major.to_i
|
98
92
|
return maj unless maj == 0
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: semver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 23
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
-
|
9
|
-
|
10
|
-
version: 0.2.2
|
9
|
+
- 0
|
10
|
+
version: 1.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Francesco Lazzarino
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-01-26 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -63,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
63
|
requirements: []
|
64
64
|
|
65
65
|
rubyforge_project:
|
66
|
-
rubygems_version: 1.
|
66
|
+
rubygems_version: 1.4.2
|
67
67
|
signing_key:
|
68
68
|
specification_version: 3
|
69
69
|
summary: Semantic Versioning
|