[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Syntactic sugar for common idiom

George Moschovitis

12/6/2004 10:22:00 AM

Hello everyone,

the following idiom is very useful:

module MyModule
def self.append_features(base)
super; base.extend(ClassMethods)
end

module ClassMethods

def a_class_method
puts 'class'
end
end
end

class MyClass
include MyModule
end

MyClass.a_class_method # => 'class'

I think it would be a good idea to have some form of syntactic sugar
for this idiom in Ruby 1.9/2.0

Any ideas ?

-g.


--
www.navel.gr | tel: +30 2106898050 | fax: +30 2106898437

web appliction engine: http://www.nave...
have fun: http://...
1 Answer

Joel VanderWerf

12/7/2004 6:05:00 AM

0

George Moschovitis wrote:
> Hello everyone,
>
> the following idiom is very useful:
>
> module MyModule
> def self.append_features(base)
> super; base.extend(ClassMethods)
> end
>
> module ClassMethods
>
> def a_class_method
> puts 'class'
> end
> end
> end
>
> class MyClass
> include MyModule
> end
>
> MyClass.a_class_method # => 'class'
>
> I think it would be a good idea to have some form of syntactic sugar
> for this idiom in Ruby 1.9/2.0
>
> Any ideas ?

Don't wait :)

class Module
private
def when_included_provide_class_methods(&bl)
unless @__class_methods_module
@__class_methods_module = Module.new

def self.append_features(base)
super
base.extend(@__class_methods_module)
end
end

@__class_methods_module.class_eval(&bl)
end
end

module MyModule
when_included_provide_class_methods {
def a_class_method
puts 'class'
end
}
end

class MyClass
include MyModule
end

MyClass.a_class_method # => 'class'