At Scotland On Rails a few months ago, I was shown a nice way to put
class methods in a module, alongside instance methods, in such a way as
they will get added as class methods automatically, without any work
required on the part of the person including the module.
Unfortunately i failed to make a note of how to do this and i've since
forgotten. Can anyone show me?
It was something along these lines...(the following doesn't work btw)
module Mappable
#instance methods
def foo
"foo"
end
#class methods
class << self.class
def bar
"bar"
end
end
end
can anyone set me straight?
thanks
max
···
--
Posted via http://www.ruby-forum.com/.
I'm not sure if you can pick up the singleton methods from the module and
automatically copy them to the class -- I've got type errors before when
trying to move and rebind methods. I did come up with this, though, which is
more expressive than writing an included() hook on every module:
···
2009/5/25 Max Williams <toastkid.williams@gmail.com>
At Scotland On Rails a few months ago, I was shown a nice way to put
class methods in a module, alongside instance methods, in such a way as
they will get added as class methods automatically, without any work
required on the part of the person including the module.
Unfortunately i failed to make a note of how to do this and i've since
forgotten. Can anyone show me?
The usual way is to use the hook method Module#included, something like:
module Mappable
#instance methods
def foo
"foo"
end
#class methods
module ClassMethods
def bar
"bar"
end
end
def self.included(other)
other.extend(ClassMethods)
end
end
By the way this nesting of a Module inside a module is another variant
on something discussed in another recent ruby-talk thread.
···
On Mon, May 25, 2009 at 11:07 AM, Max Williams <toastkid.williams@gmail.com> wrote:
At Scotland On Rails a few months ago, I was shown a nice way to put
class methods in a module, alongside instance methods, in such a way as
they will get added as class methods automatically, without any work
required on the part of the person including the module.
Unfortunately i failed to make a note of how to do this and i've since
forgotten. Can anyone show me?
It was something along these lines...(the following doesn't work btw)
module Mappable
#instance methods
def foo
"foo"
end
#class methods
class << self.class
def bar
"bar"
end
end
end
can anyone set me straight?
thanks
max
--
Rick DeNatale
Blog: http://talklikeaduck.denhaven2.com/
Twitter: http://twitter.com/RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale
Max Williams wrote:
At Scotland On Rails a few months ago, I was shown a nice way to put
class methods in a module, alongside instance methods, in such a way as
they will get added as class methods automatically, without any work
required on the part of the person including the module.
Unfortunately i failed to make a note of how to do this and i've since
forgotten. Can anyone show me?
It was something along these lines...(the following doesn't work btw)
module Stuff
module ClassMethods
def biff(*args)
# ...
end
def baz(*args)
# ...
end
end
def self.included(base)
base.extend(ClassMethods)
end
end
The methods defined in Stuff::ClassMethods are added as class methods when
include Stuff
is called
···
--
James Britt
www.jamesbritt.com - Playing with Better Toys
www.ruby-doc.org - Ruby Help & Documentation
www.rubystuff.com - The Ruby Store for Ruby Stuff
www.neurogami.com - Smart application development