tr_semver 2.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.
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: []