Simple version-numbering encoding and helper methods
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib Added required version arguments to commit_message Apr 21, 2017
spec Updated comparisons to rspec 3 Apr 21, 2017
.gitignore Modernize project structure (and make compatible with Travis) Nov 19, 2012
.rspec generated new version_spec.rb for rspec 3 Apr 21, 2017
Gemfile Use HTTPS to connect to Rubygems Sep 24, 2014
History.rdoc History update to reflect actual version releases Feb 23, 2010
License.txt
README.rdoc Update README to show off `rake -T version` May 2, 2011
Rakefile Fix project structure and gem lints Apr 22, 2017
TODO.rdoc New TODO Feb 15, 2010
VERSION Version bump to 1.1.1 Apr 22, 2017
version.gemspec Version bump to 1.1.1 Apr 22, 2017

README.rdoc

Version

Description

Version is a simple wrapper around the concept of version-numbering schemes.

Features

  • Rake::VersionTask provides tasks for simple version bumping

  • Version smartly handles several versioning schemes, abstracting the details

Examples

Screencast

For a quick introduction, watch the screencast of my presentation at the Atlanta Ruby Users’ Group.

Rake Tasks

Version comes with a Rake::VersionTask that lets you manage version numbering automatically. Place the following in a Rakefile:

require 'rake/version_task'
Rake::VersionTask.new

You're all set up.

$ rake version:create VERSION=0.1.0 # => 0.1.0

Now `rake -T version` will tell you what all you can do.

$ version [master *$%]$ rake -T version
rake version                    # Print the current version number (0.1.0)
rake version:bump               # Bump to 0.1.1
rake version:bump:major         # Bump to 1.0.0
rake version:bump:minor         # Bump to 0.2.0
rake version:bump:pre           # Bump to 0.1.1a
rake version:bump:pre:major     # Bump to 1.0.0a
rake version:bump:pre:minor     # Bump to 0.2.0a
rake version:bump:pre:revision  # Bump to 0.1.1a
rake version:bump:revision      # Bump to 0.1.1
rake version:create             # Creates a version file with an optional VERSION parameter

$ rake version                      # => 0.1.0
$ rake version:bump                 # => 0.1.1
$ rake version:bump:minor           # => 0.2.0
$ rake version:bump:revision        # => 0.2.1
$ rake version:bump:pre             # => 0.2.2a
$ rake version:bump                 # => 0.2.2
$ rake version:bump:major           # => 1.0.0
$ rake version:bump:minor           # => 1.1.0
$ cat VERSION                       # => 1.1.0

The VersionTask can automatically manage git tagging for you, too.

Rake::VersionTask.new do |task|
  task.with_git_tag = true
end

And if you want the VersionTask to automatically emit updated gemspecs on version-bumps, use the with_gemspec flag.

spec = Gem::Specification.new do |s|
  ...
end

Rake::VersionTask.new do |task|
  task.with_gemspec = spec
end

Version also supports a .yml VERSION file. See the VersionTask rdoc for details.

Library Versioning

Version lets you automatically keep an in-class VERSION constant in sync with the contents of the version file on disk. Version also provides a class-level current method which lets you get the current version without setting a class-level constant.

require 'version'

Version.current # => 1.0.1

class Foo
  is_versioned
end

Foo::VERSION # => 1.0.1

The Version.current and Class::is_versioned methods both take a filename parameter if you use a different location for the VERSION file. See the Version.current rdoc for details.

Manipulation in Code

All the above functionality is performed behind-the-scenes by the Version library. It's simple to use, but I'll be surprised if there's much point beyond doing the legwork for the Rake task and class versioning.

v = "1.2.0".to_version
v.to_s                       # => 1.2.0
v.bump!                      # => 1.2.1
v.bump!(:major)              # => 2.0.0
v.bump!(:minor, false, true) # => 2.1
v.major = 3                  # => 3.0
v.to_a                       # => ['3', '0']

Install

[sudo] gem install version