In several cases, i find myself wanting to create constants for a set of related classes. Each class has a different value, defined once, and then have the methods of the "abstract" class be able to reference the "classes" value.
I've tried doing this thing with methods and class variables and class constants, but the only one that works is methods. Like support_types in the following code from Watir:
class TextField < Element
def locate
if @how == :from_object
ole_object = @what
else
ole_object = @container.getObject(@how, @what, supported_types)
end
@o = ole_object
end
def supported_types
return ["text", "password", "textarea"]
end
private :supported_types
...
class Hidden < TextField
def initialize(container, how, what)
super
end
def supported_types
return ["hidden"]
end
I've found that the only way to get the behavior that i want is to use these kinds of "constant" methods. These seems inelegant, and i am wondering if there is a cleaner way of doing this kind of thing?
Here's another example of where i've done this kind of thing:
class SelectLists < ElementCollections
include CommonCollection
def element_class; SelectList; end
def element_tag; 'SELECT'; end
end
Any suggestions. If i recall correctly, class constants didn't work because it wouldn't get the right scope. And class variables didn't have separate values for each of the classes.
Anyway, it seemed kludgy to have to use a method, when a constant or variable would do. Comments?
Bret
···
_____________________
Bret Pettichord
www.pettichord.com