version icon indicating copy to clipboard operation
version copied to clipboard

Simple version-numbering encoding and helper methods

= Version

  • http://github.com/stouset/version
  • http://rdoc.info/gems/version/
  • http://atlruby.org/stouset/posts/138-version-task

== 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[http://blip.tv/file/get/Tkadom-ATLRUGSteveTousetPresentingVersion277.mov] of my presentation[http://atlruby.org/stouset/posts/138-version-task] at the {Atlanta Ruby Users' Group}[http://atlruby.org/].

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