public
Description: Rails plugin which adds two options to delegate to make it more flexible and support two frequent patterns in delegation.
Homepage:
Clone URL: git://github.com/porras/hyperdelegate.git
porras (author)
Sat Sep 20 05:48:02 -0700 2008
name age message
file MIT-LICENSE Sat Sep 20 05:48:02 -0700 2008 Initial commit [porras]
file README.markdown Sat Sep 20 05:48:02 -0700 2008 Initial commit [porras]
file Rakefile Sat Sep 20 05:48:02 -0700 2008 Initial commit [porras]
file init.rb Sat Sep 20 05:48:02 -0700 2008 Initial commit [porras]
file install.rb Sat Sep 20 05:48:02 -0700 2008 Initial commit [porras]
directory lib/ Sat Sep 20 05:48:02 -0700 2008 Initial commit [porras]
directory tasks/ Sat Sep 20 05:48:02 -0700 2008 Initial commit [porras]
directory test/ Sat Sep 20 05:48:02 -0700 2008 Initial commit [porras]
file uninstall.rb Sat Sep 20 05:48:02 -0700 2008 Initial commit [porras]

Hyperdelegate

Implementation as a plugin of this patch for Rails.

[PATCH] More options to make delegate more flexible

Adds two options to delegate to make it more flexible and support two frequent patterns in delegation.

You can specify a target if you don't want your method to have the same name:

class Foo < ActiveRecord::Base
  belongs_to :greeter
  delegate :hi, :to => :greeter, :target => :hello
end

Foo.new.hi # returns Foo.new.greeter.hello

If the object in which you delegate can be nil, you may want to use the :allow_nil option. In that case, it returns nil instead of raising a NoMethodError exception:

class Foo
  def initialize(bar = nil)
    @bar = bar
  end
  delegate :zoo, :to => :bar
end

Foo.new.zoo   # raises NoMethodError exception (you called nil.zoo)

class Foo
  def initialize(bar = nil)
    @bar = bar
  end
  delegate :zoo, :to => :bar, :allow_nil => true
end

Foo.new.zoo   # returns nil

Copyright (c) 2008 Sergio Gil, released under the MIT license