Issue #4978 has been updated by Benoit Daloze.


Motohiro KOSAKI wrote:
> I believe this is new feature, not bug. However if Keiju will accept and commit it _before_ preview1, I have no objection.
> Otherwise I'll change it 'Feature' for 1.9.4. I'm sorry this is very short time limit, but the proposal seems too late.
> 
> Thanks.

My mistake, I meant it as a feature.
The delay is fine, this is not urgent at all (but I'd like feedback from Keiji one day).
Thanks for looking in this issue.
----------------------------------------
Bug #4978: forwardable: support for 'delegate :method => :accessor'
http://redmine.ruby-lang.org/issues/4978

Author: Benoit Daloze
Status: Assigned
Priority: Normal
Assignee: Keiju Ishitsuka
Category: lib
Target version: 1.9.3
ruby -v: ruby 1.9.3dev (2011-06-27 trunk 32247) [x86_64-darwin10.7.0]


Hello,

A few months ago, I met a bug with lib/forwardable.rb:

  delegate :method => :accessor

would not work, although mentioned in the documentation.

Keiju solved this at r31507, being faster than me :)

However, I would still like to propose my solution.

#instance_delegate and #single_delegate both accept
a Symbol-Symbol pair (:method => :accessor)
and a Array-Symbol pair ([:method1, :method2] => :accessor).

The current code looks like:

  methods = [methods] unless methods.respond_to?(:each)
  methods.each{ |method|
    def_instance_delegator(accessor, method)
  }

I propose:

  Array(methods).each{ |method|
    def_instance_delegator(accessor, method)
  }

I believe this is a good use for Kernel#Array, and it does not depend on #each being defined on Symbol/String.

While I am at it, I would like to advise to not use the fact String#each for a single line String used to yield the whole String.
This is likely not what #each is intended for, and broke with 1.9, which undefined String#each.

I began to write a few tests for forwardable, is it better to add them in test/ or RubySpec ?


-- 
http://redmine.ruby-lang.org