Singleton aliases

Hello all.
I have a class with instance method "each" and i want to add variable
aliases for it based on some preferences of the generated objects.
Did some one know how i can achieve this?

···

--

- Best regards, Nikolay Pavlov. <<<-----------------------------------

class Foo
  def each
    p "each called for #{self}"
    yield
  end
end

f1 = Foo.new

def f1.some(&block)
  each(&block)
end

f1.each{ p 'hi!' }
#=> "each called for #<Foo:0x7ffa72cc>"
#=> "hi!"

f1.some{ p 'aliased' }
#=> "each called for #<Foo:0x7ffa72cc>"
#=> "aliased"

f2 = Foo.new
class << f2
  alias_method :yow, :each
end

f2.yow{ p 'simpler' }
#=> "each called for #<Foo:0x7ffa6e30>"
#=> "simpler"

···

On Sep 7, 12:06 pm, Nikolay Pavlov <qpa...@gmail.com> wrote:

I have a class with instance method "each" and i want to add variable
aliases for it based on some preferences of the generated objects.

This is one way. There are several.
I am assuming you mean that only that particular instance should have
this method, and not other instances of the same class.

metaclass = class << self;self;end
sym = :some_name_you_generated
metaclass.send :alias_method, sym, :each

More traditionally, this is usually a good place to consider using
inheritance. :slight_smile:

···

On 9/7/07, Nikolay Pavlov <qpadla@gmail.com> wrote:

Hello all.
I have a class with instance method "each" and i want to add variable
aliases for it based on some preferences of the generated objects.
Did some one know how i can achieve this?

Adding one more option to my last post:

class Foo
  def each
    p "each called for #{self}"
    yield
  end
end

f1 = Foo.new

def f1.some(&block)
  each(&block)
end

f1.each{ p 'hi!' }
#=> "each called for #<Foo:0x7ffa72cc>"
#=> "hi!"

f1.some{ p 'aliased' }
#=> "each called for #<Foo:0x7ffa72cc>"
#=> "aliased"

f2 = Foo.new
class << f2
  alias_method :yow, :each
end

f2.yow{ p 'simpler' }
#=> "each called for #<Foo:0x7ffa6e30>"
#=> "simpler"

module BonkerTime
  def go_bonkers( &block ); each( &block ); end
end

f3 = Foo.new
f3.extend( BonkerTime )
f3.go_bonkers{ p "w00t" }
#=> "each called for #<Foo:0x7ffa6908>"
#=> "w00t"

···

On Sep 7, 12:06 pm, Nikolay Pavlov <qpa...@gmail.com> wrote:

I have a class with instance method "each" and i want to add variable
aliases for it based on some preferences of the generated objects.

Wow. Thanks for all suggestions. But that one was really helpful and simple
to me and i've come up to this implementation:

def singleton_alias(alias_name, name)
  klass = class << self; self; end
  klass.send :alias_method, alias_name.to_sym, name.to_sym
end

···

On Friday 07 September 2007 21:19:04 Wilson Bilkovich wrote:

On 9/7/07, Nikolay Pavlov <qpadla@gmail.com> wrote:
> Hello all.
> I have a class with instance method "each" and i want to add variable
> aliases for it based on some preferences of the generated objects.
> Did some one know how i can achieve this?
This is one way. There are several.
I am assuming you mean that only that particular instance should have
this method, and not other instances of the same class.

metaclass = class << self;self;end
sym = :some_name_you_generated
metaclass.send :alias_method, sym, :each

More traditionally, this is usually a good place to consider using
inheritance. :slight_smile:

--

- Best regards, Nikolay Pavlov. <<<-----------------------------------