G
Gavin Kistner
Background:
As part of the home automation core I'm writing, I need a way to have
introspection on methods which are exposed to the UI by various
author-created 'plugins'. I've created the majority of the code for
describing methods, but one problem is preventing me from continuing,
and I'd appreciate your input:
Summary:
How would you store information about a class, which exposes that
information in an inherited manner that matches the inheritance
hierarchy of the class?
Details:
Consider the following simple case:
require 'DescribeMethods.rb'
class LightSwitch
def turn_on
#...
end
def turn_off
#...
end
describe_method :turn_on, "Turn the switch on"
describe_method :turn_off, "Turn the switch off"
end
class Dimmer < LightSwitch
def set_level( n )
#...
end
describe_method :set_level, "Set the brightness level of the light",
...
end
I'd like to be able to know that a Dimmer instance has three methods
which are described. How should I do it?
a) Require the user to copy/paste descriptions from ancestor classes
into the child?
b) Copy the methods from an ancestor class into the storage for the
subclass when it is inherited? (Failing to add new methods if they're
later described in the parent and duplicating storage.)
c) Store each method in a collection for that class, and every time I
inspect the described methods for a class, iterate up the #superclass
tree and look at ancestors?
d) Store the description as a custom property in the method itself?
e) ???
As part of the home automation core I'm writing, I need a way to have
introspection on methods which are exposed to the UI by various
author-created 'plugins'. I've created the majority of the code for
describing methods, but one problem is preventing me from continuing,
and I'd appreciate your input:
Summary:
How would you store information about a class, which exposes that
information in an inherited manner that matches the inheritance
hierarchy of the class?
Details:
Consider the following simple case:
require 'DescribeMethods.rb'
class LightSwitch
def turn_on
#...
end
def turn_off
#...
end
describe_method :turn_on, "Turn the switch on"
describe_method :turn_off, "Turn the switch off"
end
class Dimmer < LightSwitch
def set_level( n )
#...
end
describe_method :set_level, "Set the brightness level of the light",
...
end
I'd like to be able to know that a Dimmer instance has three methods
which are described. How should I do it?
a) Require the user to copy/paste descriptions from ancestor classes
into the child?
b) Copy the methods from an ancestor class into the storage for the
subclass when it is inherited? (Failing to add new methods if they're
later described in the parent and duplicating storage.)
c) Store each method in a collection for that class, and every time I
inspect the described methods for a class, iterate up the #superclass
tree and look at ancestors?
d) Store the description as a custom property in the method itself?
e) ???