version 0.5.0 → 0.6.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/History.rdoc +27 -0
- data/README.rdoc +72 -0
- data/Rakefile +5 -4
- data/TODO.rdoc +4 -0
- data/VERSION +1 -0
- data/lib/ext/class.rb +28 -0
- data/lib/rake/version_task.rb +97 -1
- data/lib/version.rb +16 -3
- metadata +7 -2
data/History.rdoc
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
=== Version 0.6.0 / 2010-02-04
|
|
2
|
+
|
|
3
|
+
* bug fixes
|
|
4
|
+
* when autozeroing version components, use strings, not integers
|
|
5
|
+
|
|
6
|
+
* enhancements
|
|
7
|
+
* readme and history files
|
|
8
|
+
* extended documentation
|
|
9
|
+
* support for easy version-file management through rake
|
|
10
|
+
* see rdoc for Rake::VersionTask
|
|
11
|
+
* support auto-setting VERSION constant in classes
|
|
12
|
+
* see rdoc for Class::Versioned()
|
|
13
|
+
* eating own dogfood with Rake::VersionTask
|
|
14
|
+
* make Version#to_hash exclude keys with nil values
|
|
15
|
+
|
|
16
|
+
* todo for 1.0.0
|
|
17
|
+
* full suite of specs
|
|
18
|
+
* remove duplication in Class::Version() and Rake::VersionTask
|
|
19
|
+
* get rid of gem task warnings
|
|
20
|
+
|
|
21
|
+
=== Version 0.5.0 / 2010-02-04
|
|
22
|
+
|
|
23
|
+
* initial release
|
|
24
|
+
|
|
25
|
+
* todo for 1.0.0
|
|
26
|
+
* full suite of specs
|
|
27
|
+
* version-bumping rake tasks
|
data/README.rdoc
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
= Version
|
|
2
|
+
|
|
3
|
+
* http://github.com/stouset/version
|
|
4
|
+
* http://rdoc.info/projects/stouset/version
|
|
5
|
+
* http://getcaliper.com/caliper/project?repo=git%3A%2F%2Fgithub.com%2Fstouset%2Fversion.git
|
|
6
|
+
|
|
7
|
+
== Description
|
|
8
|
+
|
|
9
|
+
Version is a simple wrapper around the concept of version-numbering schemes.
|
|
10
|
+
|
|
11
|
+
== Features
|
|
12
|
+
|
|
13
|
+
* Rake::VersionTask provides tasks for simple version bumping
|
|
14
|
+
* Version smartly handles several versioning schemes, abstracting the details
|
|
15
|
+
|
|
16
|
+
== Examples
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
=== Rake Tasks
|
|
20
|
+
|
|
21
|
+
Version comes with a Rake::VersionTask that lets you manage version numbering
|
|
22
|
+
automatically. Place the following in a Rakefile:
|
|
23
|
+
|
|
24
|
+
require 'rake/version_task'
|
|
25
|
+
Rake::VersionTask.new
|
|
26
|
+
|
|
27
|
+
You're all set up.
|
|
28
|
+
|
|
29
|
+
$ rake version:create VERSION=0.1.0 # => 0.1.0
|
|
30
|
+
$ rake version # => 0.1.0
|
|
31
|
+
$ rake version:bump # => 0.1.1
|
|
32
|
+
$ rake version:bump:minor # => 0.2.0
|
|
33
|
+
$ rake version:bump:revision # => 0.2.1
|
|
34
|
+
$ rake version:bump:major # => 1.0.0
|
|
35
|
+
$ cat VERSION # => 1.0.0
|
|
36
|
+
|
|
37
|
+
Version also supports a .yml VERSION file. See the VersionTask rdoc for
|
|
38
|
+
details.
|
|
39
|
+
|
|
40
|
+
=== Library Versioning
|
|
41
|
+
|
|
42
|
+
Version lets you automatically keep an in-class VERSION constant in sync with
|
|
43
|
+
the contents of the version file on disk.
|
|
44
|
+
|
|
45
|
+
require 'version'
|
|
46
|
+
|
|
47
|
+
class Foo
|
|
48
|
+
Version()
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
Foo::VERSION # => 1.0.0
|
|
52
|
+
|
|
53
|
+
The Class::Version method takes a filename parameter if you use a different
|
|
54
|
+
location for the VERSION file. See the Class::Version rdoc for details.
|
|
55
|
+
|
|
56
|
+
=== Manipulation in Code
|
|
57
|
+
|
|
58
|
+
All the above functionality is performed behind-the-scenes by the Version
|
|
59
|
+
library. It's simple to use, but I'll be surprised if there's much point
|
|
60
|
+
beyond doing the legwork for the Rake task and class versioning.
|
|
61
|
+
|
|
62
|
+
v = "1.2.0".to_version
|
|
63
|
+
v.to_s # => 1.2.0
|
|
64
|
+
v.bump! # => 1.2.1
|
|
65
|
+
v.bump!(1) # => 1.3.0
|
|
66
|
+
v.bump!(1, true) # => 1.3
|
|
67
|
+
v.major = 2 # => 2.0
|
|
68
|
+
v.to_a # => ['2', '0']
|
|
69
|
+
|
|
70
|
+
== Install
|
|
71
|
+
|
|
72
|
+
[sudo] gem install version
|
data/Rakefile
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
$: << 'lib'
|
|
2
2
|
|
|
3
3
|
require 'version'
|
|
4
|
+
require 'rake/version_task'
|
|
4
5
|
|
|
5
6
|
require 'rubygems'
|
|
6
7
|
require 'rake/gempackagetask'
|
|
@@ -12,7 +13,7 @@ spec = Gem::Specification.new do |s|
|
|
|
12
13
|
s.author = 'Stephen Touset'
|
|
13
14
|
s.email = 'stephen@touset.org'
|
|
14
15
|
s.summary = 'simple version-number encapsulation'
|
|
15
|
-
s.version =
|
|
16
|
+
s.version = Version::VERSION
|
|
16
17
|
s.files = FileList['[A-Z]*', 'lib/**/*.rb', 'spec/**/*']
|
|
17
18
|
|
|
18
19
|
s.add_development_dependency 'rspec'
|
|
@@ -23,9 +24,7 @@ Rake::GemPackageTask.new(spec) do |gem|
|
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
Rake::RDocTask.new do |doc|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
doc.title = 'emcien-engine #{version}'
|
|
27
|
+
doc.title = "emcien-engine #{Version::VERSION}"
|
|
29
28
|
doc.rdoc_dir = 'doc'
|
|
30
29
|
doc.rdoc_files.include('README*')
|
|
31
30
|
doc.rdoc_files.include('lib/**/*.rb')
|
|
@@ -35,4 +34,6 @@ Spec::Rake::SpecTask.new(:spec) do |spec|
|
|
|
35
34
|
spec.spec_files = FileList['spec/**/*_spec.rb']
|
|
36
35
|
end
|
|
37
36
|
|
|
37
|
+
Rake::VersionTask.new
|
|
38
|
+
|
|
38
39
|
task :default => :spec
|
data/TODO.rdoc
ADDED
data/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.6.0
|
data/lib/ext/class.rb
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'pathname'
|
|
2
|
+
|
|
3
|
+
class Class
|
|
4
|
+
#
|
|
5
|
+
# Automagically sets a VERSION constant in the current class, populated by
|
|
6
|
+
# the Version in +filename+. Attempts to guess the filename if none given.
|
|
7
|
+
# Can read both .yml files and plain text.
|
|
8
|
+
#
|
|
9
|
+
def Version(filename = nil)
|
|
10
|
+
# attempt to guess the filename if none given
|
|
11
|
+
if filename.nil?
|
|
12
|
+
filename = Pathname.new('.').expand_path.ascend do |d|
|
|
13
|
+
break d.join('VERSION') if d.join('VERSION').exist?
|
|
14
|
+
break d.join('VERSION.yml') if d.join('VERSION.yml').exist?
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
raise 'no VERSION or VERSION.yml found' unless filename
|
|
19
|
+
|
|
20
|
+
path = Pathname.new(filename)
|
|
21
|
+
contents = path.read
|
|
22
|
+
|
|
23
|
+
const_set :VERSION, case path.extname
|
|
24
|
+
when '' then contents.strip.to_version
|
|
25
|
+
when '.yml' then YAML::load(contents).to_version
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
data/lib/rake/version_task.rb
CHANGED
|
@@ -1,2 +1,98 @@
|
|
|
1
|
-
require 'rake'
|
|
1
|
+
require 'rake/tasklib'
|
|
2
|
+
require 'pathname'
|
|
2
3
|
|
|
4
|
+
class Rake::VersionTask < Rake::TaskLib
|
|
5
|
+
attr_accessor :filename
|
|
6
|
+
attr_writer :filetype
|
|
7
|
+
|
|
8
|
+
#
|
|
9
|
+
# Creates a new VersionTask with the given +filename+. Attempts to
|
|
10
|
+
# autodetect the +filetype+.
|
|
11
|
+
#
|
|
12
|
+
def initialize(filename = 'VERSION')
|
|
13
|
+
self.filename = filename
|
|
14
|
+
|
|
15
|
+
yield(self) if block_given?
|
|
16
|
+
|
|
17
|
+
self.define
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
#
|
|
21
|
+
# The +filetype+ of the file to be generated. Is determined automatically
|
|
22
|
+
# if not set.
|
|
23
|
+
#
|
|
24
|
+
def filetype
|
|
25
|
+
@filetype || self.path.extname[1..-1]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
protected
|
|
29
|
+
|
|
30
|
+
#
|
|
31
|
+
# The path for the +filename+.
|
|
32
|
+
#
|
|
33
|
+
def path
|
|
34
|
+
Pathname.new(self.filename)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
# Defines the rake tasks.
|
|
39
|
+
#
|
|
40
|
+
def define
|
|
41
|
+
fail 'Filename required' if self.filename.nil?
|
|
42
|
+
|
|
43
|
+
file filename
|
|
44
|
+
|
|
45
|
+
desc 'Print the current version number'
|
|
46
|
+
task(:version => filename) { puts read }
|
|
47
|
+
|
|
48
|
+
namespace :version do
|
|
49
|
+
desc 'Creates a version file with an optional VERSION parameter'
|
|
50
|
+
task(:create ) do
|
|
51
|
+
version = (ENV['VERSION'] || '0.0.0').to_version
|
|
52
|
+
puts write(version)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
desc 'Bump the least-significant version number'
|
|
56
|
+
task(:bump => filename) { puts write(read.bump!) }
|
|
57
|
+
|
|
58
|
+
namespace :bump do
|
|
59
|
+
desc 'Bump the major version number'
|
|
60
|
+
task(:major => filename) { puts write(read.bump!(0)) }
|
|
61
|
+
|
|
62
|
+
desc 'Bump the minor version number'
|
|
63
|
+
task(:minor => filename) { puts write(read.bump!(1)) }
|
|
64
|
+
|
|
65
|
+
desc 'Bump the revision number'
|
|
66
|
+
task(:revision => filename) { puts write(read.bump!(2)) }
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
private
|
|
72
|
+
|
|
73
|
+
#
|
|
74
|
+
# Returns the Version contained in the file at +filename+.
|
|
75
|
+
#
|
|
76
|
+
def read
|
|
77
|
+
contents = path.read
|
|
78
|
+
|
|
79
|
+
case filetype.to_s
|
|
80
|
+
when '' then contents.chomp.to_version
|
|
81
|
+
when 'yml' then YAML::load(contents).to_version
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
#
|
|
86
|
+
# Writes out +version+ to the file at +filename+ with the correct format.
|
|
87
|
+
#
|
|
88
|
+
def write(version)
|
|
89
|
+
path.open('w') do |io|
|
|
90
|
+
io << case filetype.to_s
|
|
91
|
+
when '' then version.to_s + "\n"
|
|
92
|
+
when 'yml' then version.to_yaml
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
version
|
|
97
|
+
end
|
|
98
|
+
end
|
data/lib/version.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'ext/array'
|
|
2
|
+
require 'ext/class'
|
|
2
3
|
require 'ext/hash'
|
|
3
4
|
require 'ext/string'
|
|
4
5
|
|
|
@@ -56,13 +57,13 @@ class Version
|
|
|
56
57
|
|
|
57
58
|
if index < self.length
|
|
58
59
|
length = self.length - index
|
|
59
|
-
zeroes = Array.new(length, 0)
|
|
60
|
+
zeroes = Array.new(length, '0')
|
|
60
61
|
|
|
61
62
|
self.components[index, length] = zeroes
|
|
62
63
|
self.components[index] = value
|
|
63
64
|
else
|
|
64
65
|
length = index - self.length
|
|
65
|
-
zeroes = Array.new(length, 0)
|
|
66
|
+
zeroes = Array.new(length, '0')
|
|
66
67
|
|
|
67
68
|
self.components += zeroes
|
|
68
69
|
self.components << value
|
|
@@ -121,7 +122,8 @@ class Version
|
|
|
121
122
|
{ :major => self.major,
|
|
122
123
|
:minor => self.minor,
|
|
123
124
|
:revision => self.revision,
|
|
124
|
-
:rest => self.length > 3 ? self.components.drop(3) : nil }
|
|
125
|
+
:rest => self.length > 3 ? self.components.drop(3) : nil }.
|
|
126
|
+
delete_if {|k,v| v.nil? }
|
|
125
127
|
end
|
|
126
128
|
|
|
127
129
|
#
|
|
@@ -138,6 +140,13 @@ class Version
|
|
|
138
140
|
self
|
|
139
141
|
end
|
|
140
142
|
|
|
143
|
+
#
|
|
144
|
+
# Returns a YAML representation of the version number.
|
|
145
|
+
#
|
|
146
|
+
def to_yaml
|
|
147
|
+
YAML::dump(self.to_hash)
|
|
148
|
+
end
|
|
149
|
+
|
|
141
150
|
#
|
|
142
151
|
# Aliased from +to_s+.
|
|
143
152
|
#
|
|
@@ -147,3 +156,7 @@ class Version
|
|
|
147
156
|
|
|
148
157
|
attr_accessor :components
|
|
149
158
|
end
|
|
159
|
+
|
|
160
|
+
class Version
|
|
161
|
+
Version()
|
|
162
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: version
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Stephen Touset
|
|
@@ -9,7 +9,7 @@ autorequire:
|
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
11
|
|
|
12
|
-
date: 2010-02-
|
|
12
|
+
date: 2010-02-05 00:00:00 -05:00
|
|
13
13
|
default_executable:
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
@@ -31,8 +31,13 @@ extensions: []
|
|
|
31
31
|
extra_rdoc_files: []
|
|
32
32
|
|
|
33
33
|
files:
|
|
34
|
+
- History.rdoc
|
|
34
35
|
- Rakefile
|
|
36
|
+
- README.rdoc
|
|
37
|
+
- TODO.rdoc
|
|
38
|
+
- VERSION
|
|
35
39
|
- lib/ext/array.rb
|
|
40
|
+
- lib/ext/class.rb
|
|
36
41
|
- lib/ext/hash.rb
|
|
37
42
|
- lib/ext/string.rb
|
|
38
43
|
- lib/rake/version_task.rb
|