but it is kinda ugly. Then I realize that extend keyword exists, but it
is possible to extend only modules not classes. So this realy nice
example would work only if User is a module.
I don't know if my tip applies for you (haven't worked with neither Rails nor Mongoid), but your scenario looks like subclassing is the way to go; you have a UserForForum class, which is a more specialized form of User.
A way of extending a class like a module doesn't exist in Ruby afaik.
Regards,
Calvin
···
On 09.01.2013 23:12, Damjan Rems wrote:
In my scenario somewhere in the future someone would make a gem, which
would need to extend User class. I found out that it can be done this
way:
but it is kinda ugly. Then I realize that extend keyword exists, but it
is possible to extend only modules not classes. So this realy nice
example would work only if User is a module.
I don't know if my tip applies for you (haven't worked with neither Rails
nor Mongoid), but your scenario looks like subclassing is the way to go; you
have a UserForForum class, which is a more specialized form of User.
I also believe that is what is called for here.
A way of extending a class like a module doesn't exist in Ruby afaik.
Well, it does because you can extend *anything*:
irb(main):001:0> module M; def honk; puts "---"; end end
=> nil
irb(main):002:0> o = Object.new
=> #<Object:0x8004cf9c>
irb(main):003:0> o.extend M
=> #<Object:0x8004cf9c>
irb(main):004:0> o.honk
···
On Wed, Jan 9, 2013 at 11:33 PM, Calvin Bornhofen <calvin.bornhofen@web.de> wrote:
---
=> nil
1.9.3p327 :001 > class M; def honk; puts "---"; end end
=> nil
1.9.3p327 :002 > o = Object.new
=> #<Object:0x007fb679293268>
1.9.3p327 :003 > o.extend M
TypeError: wrong argument type Class (expected Module)
On Thu, Jan 10, 2013 at 10:35 PM, Henry Maddocks <hmaddocks@me.com> wrote:
On 10/01/2013, at 8:29 PM, Robert Klemme wrote:
Well, it does because you can extend *anything*:
Pretty sure the OP wants to do this
1.9.3p327 :001 > class M; def honk; puts "---"; end end
=> nil
1.9.3p327 :002 > o = Object.new
=> #<Object:0x007fb679293268>
1.9.3p327 :003 > o.extend M
TypeError: wrong argument type Class (expected Module)