semver 0.2.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/.semver +4 -4
  2. data/README.md +2 -1
  3. data/bin/semver +25 -11
  4. data/lib/semver.rb +35 -41
  5. metadata +7 -7
data/.semver CHANGED
@@ -1,5 +1,5 @@
1
- ---
2
- :minor: "2"
3
- :patch: "2"
1
+ ---
2
+ :patch: 0
4
3
  :special: ""
5
- :major: "0"
4
+ :major: 1
5
+ :minor: 0
data/README.md CHANGED
@@ -20,9 +20,10 @@ quickstart for ruby
20
20
  require 'semver'
21
21
  v = SemVer.find
22
22
  v.major # => "0"
23
- v.major.next!
23
+ v.major += 1
24
24
  v.major # => "1"
25
25
  v.format "%M.%m.%p" # => "1.1.0"
26
+ v.to_s # => "v1.1.0"
26
27
  v.save
27
28
 
28
29
  git integration
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 or raise CommandError, "no command given"
9
+ command = ARGV.shift || 'tag'
10
10
 
11
11
  case command
12
12
  when /^init(ialize)?$/
13
- FileUtils.touch SemVer::FILE_NAME
14
- version = SemVer.find
15
- version
16
- version.save
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' then version.major.next!
24
- when 'minor' then version.minor.next!
25
- when 'patch' then version.patch.next!
26
- else raise CommandError, "#{dimension} is invalid: major | minor | patch"
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.format "v%M.%m.%p%s"
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, NoSemVerError => e
79
+ rescue CommandError => e
66
80
  puts e.message
67
81
  puts "#{$0} help for more info"
68
82
  exit 1
@@ -1,14 +1,16 @@
1
1
  require 'yaml'
2
-
3
- class NoSemVerError < StandardError; end
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
- v.load
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 File.dirname(File.expand_path(path)) == '/'
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
- class << self
40
-
41
- def attr_writer_pattern pattern, symbol
39
+ end
42
40
 
43
- define_method("#{symbol}=".to_sym) do |str|
41
+ attr_accessor :major, :minor, :patch, :special
44
42
 
45
- if str =~ pattern || str.empty?
46
- instance_variable_set "@#{symbol}".to_sym, str
47
- else
48
- raise "#{symbol}: #{str} does not match pattern #{pattern}"
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
- attr_writer_pattern /\d+/, :major
58
- attr_writer_pattern /\d+/, :minor
59
- attr_writer_pattern /\d+/, :patch
60
- attr_writer_pattern /[A-Za-z][0-9A-Za-z-]+/, :special
61
- attr_reader :major, :minor, :patch, :special
62
-
63
- def initialize major='0', minor='0', patch='0', special=''
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 load file=SemVer.find_file
68
- hash = open(file) { |io| YAML::load io.read } || {}
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::dump hash
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: 19
5
- prerelease: false
4
+ hash: 23
5
+ prerelease:
6
6
  segments:
7
+ - 1
7
8
  - 0
8
- - 2
9
- - 2
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: 2010-08-02 00:00:00 -04:00
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.3.7
66
+ rubygems_version: 1.4.2
67
67
  signing_key:
68
68
  specification_version: 3
69
69
  summary: Semantic Versioning