0.0
Repository is archived
No commit activity in last 3 years
No release in over 3 years
Versionable lets a ruby module or class declare multiple numbered versions of itself, and provides a way to select one based on a gem-like requirement.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 1.2.9
 Project Readme

Versionable¶ ↑

Versionable lets a ruby module or class declare multiple numbered versions of itself, and provides a way to select one based on a gem-like requirement.

The jist:

class Versioned
  include Versionable

  def foo; :past_foo; end
  def baz; :baz; end

  version "0.5"

  def foo; :foo; end
  def self.bar; :bar; end

  version "1" do
    def foo; :future_foo; end
  end

  version "2" do
    def foo; :far_future_foo; end
  end
end

And then:

Versioned['0'].new.foo                  # => :past_foo
Versioned['0.5'].new.foo                # => :foo
Versioned['1'].new.foo                  # => :future_foo
Versioned['2'].new.foo                  # => :far_future_foo
Versioned == Versioned['0.5']           # => true
Versioned['>= 1'] == Versioned['2']     # => true
Versioned['< 1'] == Versioned['0.5']    # => true

It turns out Class#dup can do some crazy things. Each version is cloned from the previous and then includes its own changes. This means def self.class_methods() and @@class_variables end up versioned as well; not just instance methods.

The default version (the one you get without a [requirement]) is determined by the use of blocks passed to the version calls. The last call without a block is the default one.

Note on Patches/Pull Requests¶ ↑

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don’t break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)

  • Send me a pull request. Bonus points for topic branches.

Thanks¶ ↑

Thanks to SEOmoz (seomoz.org) for letting me build this at my desk in the afternoons instead of on the couch in the middle of the night ^_^.

Copyright © 2010 Phil Smith. See LICENSE for details.