tr_semver 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 40fe9afed5b66145f693a920872e6f4ca93548671e6102b1885a9f72190436a7
4
+ data.tar.gz: 80216140c239514135f028f29bd7fe72fcdacad4006de4a43beac3bc7d918274
5
+ SHA512:
6
+ metadata.gz: 8844570d8d93d9e55ec2279caac61aa3899a2d4adae694bf17d25948696f89871c0deb4d714350248f91b2de3bb35a671e5b3f5db0c0036fe28da4e0e8229c24
7
+ data.tar.gz: 6ea280b5031626778783fd2bd341fafe5ff6575b4a2d041bb3655be7ee127f558a7db8aa1008253c530dd9747c0c1496b4b538cd301fa89721c5f93aa0546a40
data/.semver ADDED
@@ -0,0 +1,5 @@
1
+ ---
2
+ :major: 3
3
+ :minor: 0
4
+ :patch: 1
5
+ :special: ""
data/README.md ADDED
@@ -0,0 +1,38 @@
1
+ SemVer2 3.0.x gem, following semver.org 2.0.0-rc.1
2
+ ======
3
+
4
+ quickstart on the command line
5
+ ------------------------------
6
+ install it
7
+
8
+ % gem install semver
9
+
10
+ use it
11
+
12
+ % semver init
13
+ % semver tag # => v0.0.0
14
+ % semver inc minor # => v0.1.0
15
+ % semver special 'alpha.45' # => v0.1.0-alpha.45
16
+ % semver format "%M.%m" # => 0.1
17
+ % git tag -a `semver tag`
18
+ % say 'that was easy'
19
+
20
+ quickstart for ruby
21
+ -------------------
22
+
23
+ require 'semver'
24
+ v = SemVer.find
25
+ v.major # => "0"
26
+ v.major += 1
27
+ v.major # => "1"
28
+ v.special = 'alpha.46'
29
+ v.format "%M.%m.%p%s" # => "1.1.0-alpha.46"
30
+ v.to_s # => "v1.1.0"
31
+ v.save
32
+
33
+ git integration
34
+ ---------------
35
+ % git config --global alias.semtag '!git tag -a $(semver tag) -m "tagging $(semver tag)"'
36
+
37
+ [Franco Lazzarino](mailto:flazzarino@gmail.com)
38
+ [Henrik Feldt](mailto:henrik@haf.se)
data/bin/semver ADDED
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fileutils'
4
+ require 'semver'
5
+
6
+ class CommandError < StandardError; end
7
+
8
+ begin
9
+ command = ARGV.shift || 'tag'
10
+
11
+ case command
12
+ when /^init(ialize)?$/
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
21
+
22
+ when /^inc(rement)?$/
23
+ version = SemVer.find
24
+ dimension = ARGV.shift or raise CommandError, "required: major | minor | patch"
25
+
26
+ case dimension
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"
41
+ end
42
+
43
+ version.special = ''
44
+ version.save
45
+
46
+ when /^spe(cial)?$/
47
+ version = SemVer.find
48
+ special_str = ARGV.shift or raise CommandError, "required: an arbitrary string (beta, alfa, romeo, etc)"
49
+ version.special = special_str
50
+ version.save
51
+
52
+ when 'format'
53
+ version = SemVer.find
54
+ format_str = ARGV.shift or raise CommandError, "required: format string"
55
+ version.format format_str
56
+
57
+ when 'tag'
58
+ version = SemVer.find
59
+ puts version.to_s
60
+
61
+ when 'help'
62
+ puts <<-HELP
63
+ semver commands
64
+ ---------------
65
+
66
+ init[ialze] # initialize semantic version tracking
67
+ inc[rement] major | minor | patch # increment a specific version number
68
+ spe[cial] [STRING] # set a special version suffix
69
+ format # printf like format: %M, %m, %p, %s
70
+ tag # equivalent to format 'v%M.%m.%p%s'
71
+ help
72
+
73
+ PLEASE READ http://semver.org
74
+ HELP
75
+
76
+ else raise CommandError, "invalid command #{command}"
77
+ end
78
+
79
+ rescue CommandError => e
80
+ puts e.message
81
+ puts "#{$0} help for more info"
82
+ exit 1
83
+ end
@@ -0,0 +1,2 @@
1
+ class SemVerMissingError < RuntimeError
2
+ end
data/lib/semver.rb ADDED
@@ -0,0 +1,103 @@
1
+ require 'yaml'
2
+ require 'semver/semvermissingerror'
3
+
4
+ class SemVer
5
+
6
+ FILE_NAME = '.semver'
7
+ TAG_FORMAT = 'v%M.%m.%p%s'
8
+
9
+ def SemVer.find dir=nil
10
+ v = SemVer.new
11
+ f = SemVer.find_file dir
12
+ v.load f
13
+ v
14
+ end
15
+
16
+ def SemVer.find_file dir=nil
17
+ dir ||= Dir.pwd
18
+ raise "#{dir} is not a directory" unless File.directory? dir
19
+ path = File.join dir, FILE_NAME
20
+
21
+ Dir.chdir dir do
22
+ while !File.exists? path do
23
+ raise SemVerMissingError, "#{dir} is not semantic versioned", caller if File.dirname(path).match(/(\w:\/|\/)$/i)
24
+ path = File.join File.dirname(path), ".."
25
+ path = File.expand_path File.join(path, FILE_NAME)
26
+ puts "semver: looking at #{path}"
27
+ end
28
+ return path
29
+ end
30
+
31
+ end
32
+
33
+ attr_accessor :major, :minor, :patch, :special
34
+
35
+ def initialize major=0, minor=0, patch=0, special=''
36
+ major.kind_of? Integer or raise "invalid major: #{major}"
37
+ minor.kind_of? Integer or raise "invalid minor: #{minor}"
38
+ patch.kind_of? Integer or raise "invalid patch: #{patch}"
39
+
40
+ unless special.empty?
41
+ special =~ /^\d+$/ or raise "invalid special: #{special}"
42
+ end
43
+
44
+ @major, @minor, @patch, @special = major, minor, patch, special
45
+ end
46
+
47
+ def load file
48
+ @file = file
49
+ hash = YAML.load_file(file) || {}
50
+ @major = hash[:major] or raise "invalid semver file: #{file}"
51
+ @minor = hash[:minor] or raise "invalid semver file: #{file}"
52
+ @patch = hash[:patch] or raise "invalid semver file: #{file}"
53
+ @special = hash[:special] or raise "invalid semver file: #{file}"
54
+ end
55
+
56
+ def save file=nil
57
+ file ||= @file
58
+
59
+ hash = {
60
+ :major => @major,
61
+ :minor => @minor,
62
+ :patch => @patch,
63
+ :special => @special
64
+ }
65
+
66
+ yaml = YAML.dump hash
67
+ open(file, 'w') { |io| io.write yaml }
68
+ end
69
+
70
+ def format fmt
71
+ fmt = fmt.gsub '%M', @major.to_s
72
+ fmt = fmt.gsub '%m', @minor.to_s
73
+ fmt = fmt.gsub '%p', @patch.to_s
74
+ if @special.nil? or @special.length == 0 then
75
+ fmt = fmt.gsub '%s', ''
76
+ else
77
+ fmt = fmt.gsub '%s', "-" + @special.to_s
78
+ end
79
+ fmt
80
+ end
81
+
82
+ def to_s
83
+ format TAG_FORMAT
84
+ end
85
+
86
+ def <=> other
87
+ maj = major.to_i <=> other.major.to_i
88
+ return maj unless maj == 0
89
+
90
+ min = minor.to_i <=> other.minor.to_i
91
+ return min unless min == 0
92
+
93
+ pat = patch.to_i <=> other.patch.to_i
94
+ return pat unless pat == 0
95
+
96
+ spe = special.to_i <=> other.special.to_i
97
+ return spe unless spe == 0
98
+
99
+ 0
100
+ end
101
+
102
+ include Comparable
103
+ end
data/semver2.gemspec ADDED
@@ -0,0 +1,15 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+ require 'semver'
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = 'tr_semver'
6
+ spec.version = '2.0.0'
7
+ spec.summary = "Semantic Versioning"
8
+ spec.description = "maintain versions as per http://semver.org"
9
+ spec.email = "dan@ofer.to"
10
+ spec.authors = ["Francesco Lazzarino", "Henrik Feldt", "Dan Ofer"]
11
+ spec.homepage = 'https://github.com/ofer987/semver'
12
+ spec.executables << 'semver'
13
+ spec.files = [".semver", "semver2.gemspec", "README.md"] + Dir["lib/**/*.rb"] + Dir['bin/*']
14
+ spec.has_rdoc = true
15
+ end
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tr_semver
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Francesco Lazzarino
8
+ - Henrik Feldt
9
+ - Dan Ofer
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2023-10-05 00:00:00.000000000 Z
14
+ dependencies: []
15
+ description: maintain versions as per http://semver.org
16
+ email: dan@ofer.to
17
+ executables:
18
+ - semver
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - ".semver"
23
+ - README.md
24
+ - bin/semver
25
+ - lib/semver.rb
26
+ - lib/semver/semvermissingerror.rb
27
+ - semver2.gemspec
28
+ homepage: https://github.com/ofer987/semver
29
+ licenses: []
30
+ metadata: {}
31
+ post_install_message:
32
+ rdoc_options: []
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubygems_version: 3.3.3
47
+ signing_key:
48
+ specification_version: 4
49
+ summary: Semantic Versioning
50
+ test_files: []