Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
A port of Scala's implicits, this is an alternative to open classes that allows for easier testing.
Ruby
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
test
.gitignore
LICENSE
README.rdoc
Rakefile
implicitly.gemspec

README.rdoc

Synopsis

Implicits in Ruby, based on Scala. Works like:

implicitly.from(BaseClass).to(WrapperClass).via do |base_object|
  WrapperClass.new(base_object)
end

Example

For example, to extend Fixnum with #seconds, #minutes, and #hours:

class FixnumWithTime
  def initialize(n)
    @n = n
  end

  def minutes
    seconds * 60
  end

  def hours
    minutes * 60
  end

  def seconds
    @n
  end
end

class Person
  implicitly.from(Fixnum).to(FixnumWithTime).via do |fixnum|
    FixnumWithTime.new(fixnum)
  end

  def age_in_seconds
    37.minutes
  end
end

Why

By using a wrapping class the extension can be tested independently of the base class.

Author

Mike Burns mburns@thoughtbot.com mike-burns.com/

Something went wrong with that request. Please try again.