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.
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