Defining attr like methods

C

Chad Murphy

Here is what I'm trying to do

class List
# Method item
# Pushes an item into an array @items
# Method to_s
# returns elements within @items into a string
end

class Groceries < List
item :lettuce
item :potato
item :ham
end

print Groceries.new

The trouble I'm having is figuring out how to go about adding an
instance variable, which is an array, and will be updated using these
attr like methods (I don't know what these are called which is giving me
some trouble). Is this possible to pull off?
 
R

Robert Klemme

Here is what I'm trying to do

class List
# Method item
# Pushes an item into an array @items
# Method to_s
# returns elements within @items into a string
end

class Groceries < List
item :lettuce
item :potato
item :ham
end

print Groceries.new

The trouble I'm having is figuring out how to go about adding an
instance variable, which is an array, and will be updated using these
attr like methods (I don't know what these are called which is giving me
some trouble).

You are looking for class methods.
Is this possible to pull off?

Yes, but I doubt it is what you want: you are asking for class methods
to add items but you create an instance (Groceries.new). Where is the
point in defining a list of items on class level and instantiate it
multiple times?

If you describe what you want to achieve, i.e. what (business) problem
you are trying to solve we can come up with other suggestions that may
be more appropriate.

For example: this looks like a case for inheritance:

class Grocery
end

class Lettuce < Grocery
end

class Potato < Grocery
end
....

With a little bit of meta programming you can then get all the
subclasses of Grocery.

Kind regards

robert
 
C

Chad Murphy

Robert said:
You are looking for class methods.
Thanks.


Yes, but I doubt it is what you want: you are asking for class methods
to add items but you create an instance (Groceries.new). Where is the
point in defining a list of items on class level and instantiate it
multiple times?

If you describe what you want to achieve, i.e. what (business) problem
you are trying to solve we can come up with other suggestions that may
be more appropriate.

For example: this looks like a case for inheritance:

class Grocery
end

class Lettuce < Grocery
end

class Potato < Grocery
end
...

With a little bit of meta programming you can then get all the
subclasses of Grocery.

I saw some code like this and tried playing around it. I think the
problem was that I had no idea whether it was something you could do in
order to abstract things from the sub class or something completely
different, but I realized you could do that with a method.
Kind regards

robert

Thanks again.
 
D

Daniel Finnie

Hi,

You might want to check out the Doodle rubygem at http://doodle.rubyforge.org/ .

Here's an example of its use:

daniel@daniel-desktop:~$ cat /tmp/doodle.rb
require 'rubygems'
require 'doodle'

class List < Doodle::Base
has :items, :collect => :item
end

class GroceryList < List
# nothing added here.
end

my_list = GroceryList do
item "Chunky bacon"
item "Lettuce"
item "Tomato"
end

p my_list.items

daniel@daniel-desktop:~$ ruby /tmp/doodle.rb
["Chunky bacon", "Lettuce", "Tomato"]
daniel@daniel-desktop:~$

Dan
 

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

No members online now.

Forum statistics

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

Latest Threads

Top