Mixin of class methods?

M

Michael Roth

Hello all,

I'm a little bit new to the wonderful world of ruby and have a small
problem. I would like to mixin a module method:

module M
def M.foobar id
puts "Hello Ruby: #{id}"
end
end

class C
include M
foobar :example
end

But that doesn't work. I'm trying to write some helper class methods
like attr_accessor and friends.

I don't like to write

class C
include M
M.foobar :example
end

because 'M' has to many chars to type...
My helper class methods should look like attr_accessor and friends.

What is the right way to solve this problem?


Michael Roth
 
K

Kevin Ballard

module M
def foobar(id)
puts "Hello Ruby: #{id}"
end
end

class C
class << self
include M
end
foobar :example
end
 
J

Jeremy Kemper

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

I'm a little bit new to the wonderful world of ruby and have a small
problem. I would like to mixin a module method:

module M
def M.foobar id
puts "Hello Ruby: #{id}"
end
end

class C
include M
foobar :example
end

module M
def foobar id
puts "Hello Ruby: #{id}"
end
end

class C
extend M
foobar :example
end

OR if you'd like M to have both instance and class methods:

module M
def self.included(base)
super
base.extend ClassMethods
end

def baz
# ...
end

module ClassMethods
def foobar id
# ...
end
end
end

class C
include M
foobar :example
end

C.new.baz

Modules are pleasant little beasts.

Best,
jeremy
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (Darwin)

iD8DBQFDNcDfAQHALep9HFYRAsQNAKCG5eMkzpBIjNkc0Tk4qDcMI/UEHQCg1HF2
rpdtYLov7fyKH9+SC24VU2c=
=4RK9
-----END PGP SIGNATURE-----
 
M

Michael Roth

Kevin said:
class C
class << self
include M
end
foobar :example
end

Thank you very much.

Hmm, the 'class <<' thing creates an singleton class. Looks like I
should take some time to read some more pages from the ruby book...


Michael Roth
 
A

Ara.T.Howard

Hello all,

I'm a little bit new to the wonderful world of ruby and have a small
problem. I would like to mixin a module method:

module M
def M.foobar id
puts "Hello Ruby: #{id}"
end
end

class C
include M
foobar :example
end

But that doesn't work. I'm trying to write some helper class methods
like attr_accessor and friends.

I don't like to write

class C
include M
M.foobar :example
end

because 'M' has to many chars to type...
My helper class methods should look like attr_accessor and friends.

What is the right way to solve this problem?

i think this is clearest for people reading your code:

module M
module InstanceMethods
end
module ClassMethods
end
def self::included other
other.module_eval{ include InstanceMethods }
other.extend ClassMethods
other
end
end

class C
include M
end

but it's an opinion...

-a
--
===============================================================================
| email :: ara [dot] t [dot] howard [at] noaa [dot] gov
| phone :: 303.497.6469
| Your life dwells amoung the causes of death
| Like a lamp standing in a strong breeze. --Nagarjuna
===============================================================================
 
M

michele

How about:

class Module
def foobar id
puts "Hello Ruby: #{id}"
end
end

class C
foobar :example
end

my_c = C.new
 
S

Sean O'Halpin

How about:

class Module
def foobar id
puts "Hello Ruby: #{id}"
end
end

class C
foobar :example
end

my_c =3D C.new
This is fine if you want to add the foobar method to ~all~ classes and
modules. I'd recommend Ara's way if you want to be more selective
about which classes get the methods.

Sean
 
M

michele

module M
module InstanceMethods
end
module ClassMethods
end
def self::included other
other.module_eval{ include InstanceMethods }
other.extend ClassMethods
other <------------------?
end
end

class C
include M
end

Why the "other" return (see question mark above)? It seems to work
without.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,968
Messages
2,570,150
Members
46,697
Latest member
AugustNabo

Latest Threads

Top