In Files

  • forwardable.rb

Class/Module Index [+]

Quicksearch

SingleForwardable

SingleForwardable can be used to setup delegation at the object level as well.

printer = String.new
printer.extend SingleForwardable        # prepare object for delegation
printer.def_delegator "STDOUT", "puts"  # add delegation for STDOUT.puts()
printer.puts "Howdy!"

Also, SingleForwardable can be used to set up delegation for a Class or Module.

class Implementation
  def self.service
    puts "serviced!"
  end
end

module Facade
  extend SingleForwardable
  def_delegator :Implementation, :service
end

Facade.service #=> serviced!

If you want to use both Forwardable and SingleForwardable, you can use methods def_instance_delegator and #def_single_delegator, etc.

Public Instance Methods

def_delegator(accessor, method, ali = method) click to toggle source
def_delegators(accessor, *methods) click to toggle source
def_single_delegator(accessor, method, new_name=method) click to toggle source

Defines a method method which delegates to accessor (i.e. it calls the method of the same name in accessor). If new_name is provided, it is used as the name for the delegate method.

 
               # File forwardable.rb, line 259
def def_single_delegator(accessor, method, ali = method)
  str = %Q{
    def #{ali}(*args, &block)
      begin
        #{accessor}.__send__(:#{method}, *args, &block)
      rescue Exception
        $@.delete_if{|s| %r"#{Regexp.quote(__FILE__)}"o =~ s} unless Forwardable::debug
        ::Kernel::raise
      end
    end
  }

  instance_eval(str, __FILE__, __LINE__)
end
            
Also aliased as: def_delegator
def_single_delegators(accessor, *methods) click to toggle source

Shortcut for defining multiple delegator methods, but with no provision for using a different name. The following two code samples have the same effect:

def_delegators :@records, :size, :<<, :map

def_delegator :@records, :size
def_delegator :@records, :<<
def_delegator :@records, :map
 
               # File forwardable.rb, line 245
def def_single_delegators(accessor, *methods)
  methods.delete("__send__")
  methods.delete("__id__")
  for method in methods
    def_single_delegator(accessor, method)
  end
end
            
Also aliased as: def_delegators
delegate(hash) click to toggle source
Alias for: single_delegate
delegate method => accessor click to toggle source
delegate [method, method, ...] => accessor

Takes a hash as its argument. The key is a symbol or an array of symbols. These symbols correspond to method names. The value is the accessor to which the methods will be delegated.

 
               # File forwardable.rb, line 225
def single_delegate(hash)
  hash.each{ |methods, accessor|
    methods = [methods] unless methods.respond_to?(:each)
    methods.each{ |method|
      def_single_delegator(accessor, method)
    }
  }
end
            
Also aliased as: delegate

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus