[#4858] Build fails on OSX Tiger 10.4 — noreply@...

Bugs item #1883, was opened at 2005-05-06 14:55

21 messages 2005/05/06
[#4862] Re: [ ruby-Bugs-1883 ] Build fails on OSX Tiger 10.4 — Yukihiro Matsumoto <matz@...> 2005/05/07

Hi,

[#4865] Re: [ ruby-Bugs-1883 ] Build fails on OSX Tiger 10.4 — Ryan Davis <ryand-ruby@...> 2005/05/07

[#4868] Re: [ ruby-Bugs-1883 ] Build fails on OSX Tiger 10.4 — nobu.nokada@... 2005/05/07

Hi,

[#5053] Re: [ ruby-Bugs-1883 ] Build fails on OSX Tiger 10.4 — Shugo Maeda <shugo@...> 2005/05/19

Hi,

[#5056] Re: [ ruby-Bugs-1883 ] Build fails on OSX Tiger 10.4 — Mark Hubbart <discordantus@...> 2005/05/19

On 5/19/05, Shugo Maeda <shugo@ruby-lang.org> wrote:

[#4874] - Need to reduce Ruby Sources to the Minimal — Ilias Lazaridis <ilias@...>

Hello all,

31 messages 2005/05/10
[#4879] Re: [THIN] - Need to reduce Ruby Sources to the Minimal — Pit Capitain <pit@...> 2005/05/11

Ilias Lazaridis schrieb:

[#4883] Re: [THIN] - Need to reduce Ruby Sources to the Minimal — Ilias Lazaridis <ilias@...> 2005/05/12

Pit Capitain wrote:

[#4884] Re: [THIN] - Need to reduce Ruby Sources to the Minimal — Ryan Davis <ryand-ruby@...> 2005/05/12

[#4888] Re: [THIN] - Need to reduce Ruby Sources to the Minimal — Ilias Lazaridis <ilias@...> 2005/05/12

Ryan Davis wrote:

[#4889] Re: [THIN] - Need to reduce Ruby Sources to the Minimal — ES <ruby-ml@...> 2005/05/12

[#4890] Re: [THIN] - Need to reduce Ruby Sources to the Minimal — Ilias Lazaridis <ilias@...> 2005/05/12

ES wrote:

[#4891] Re: [THIN] - Need to reduce Ruby Sources to the Minimal — Alexander Kellett <ruby-lists@...> 2005/05/12

On May 12, 2005, at 3:13 PM, Ilias Lazaridis wrote:

[#4911] Pointless argc check in Array#select — noreply@...

Patches item #1900, was opened at 2005-05-12 09:33

11 messages 2005/05/12

[#4919] - Hierarchical/Modular Directory Structure — Ilias Lazaridis <ilias@...>

The source-code structure should be simplified, lowering barriers for

20 messages 2005/05/12

[ ruby-Patches-1923 ] Forwardable, reworked

From: noreply@...
Date: 2005-05-17 14:58:04 UTC
List: ruby-core #5033
Patches item #1923, was opened at 2005-05-17 07:50
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1700&aid=1923&group_id=426

Category: Ruby1.8
Group: None
Status: Open
Resolution: None
Priority: 3
Submitted By: Daniel Berger (djberg96)
Assigned to: Nobody (None)
Summary: Forwardable, reworked

Initial Comment:
The following code is a reworked version of the current Forwardable module.  It eliminates SingleForwardable altogther and adds the "delegate" method, at the suggestion of Florian Gross.

I didn't provide a unified diff because I wasn't sure what additional documentation folks would want to include at the top of the file (and because there are so many code and doc changes).

Attached is a corresponding test suite that should probably go under test/forwardable (which would need to be created).

Regards,

Dan

# forwardable.rb
#
# == Synopsis
# Provides a mechanism to allow classes to delegate named method calls
# to other objects.
#
# == Usage
#    class Foo
#       extend Forwardable
#       delegate :length => :@str
#       delegate [:first, :last] => :@arr
#       def initialize
#          @arr = ["foo","bar","baz"]
#          @str = "hello"
#       end
#    end
#
#    f = Foo.new
#    puts f.length # 5, length of @str
#    puts f.first  # "foo", first element of @arr
#    puts f.last   # "baz", last element of @arr
#
# == Author
# Keiju Ishitsuka
#
# Revised by: Daniel J. Berger with suggestions from Florian Gross.
#
module Forwardable
   FORWARDABLE_VERSION = "1.0.0"

   # 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.
   #
   # :call-seq:
   #    delegate method => accessor
   #    delegate [method, method, ...] => accessor
   #
   def delegate(hash)
      hash.each{ |methods, accessor|
         methods = methods.to_s unless methods.respond_to?(:each)
         methods.each{ |method|
            def_instance_delegator(accessor, method)
         }
      }
   end

   # Delegates +methods+ to the given +accessor+.
   #
   # :call-seq:
   #     def_delegators(accessor, *methods)
   #
   def def_instance_delegators(accessor, *methods)
      methods.delete("__send__")
      methods.delete("__id__")
      methods.each{ |method|
         def_instance_delegator(accessor, method)
      }
   end

   # Delegates a single +method+ to the given +accessor+.
   #
   # :call-seq:
   #     def_delegator(accessor, method, alias=nil)
   #
   # If an alias is provided, the accessor will respond to that alias instead
   # of the original method.
   def def_instance_delegator(accessor, method, ali = method)
      str = %Q{
         def #{ali}(*args, &block)
            #{accessor}.send(:#{method}, *args, &block)
         end
      }

      # If it's not a class or module, it's an instance
      begin
         module_eval(str)
      rescue
         instance_eval(str)
      end
  end

  alias def_delegators def_instance_delegators
  alias def_delegator def_instance_delegator
end


----------------------------------------------------------------------

You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1700&aid=1923&group_id=426

In This Thread

Prev Next