def configurable( name, *args )
opts = args.last.is_a?( Hash ) ? args.pop : {}
opts = { :locked => false }.merge( opts )
default = args.size <= 1 ? args.pop : args
name = name.to_sym
self.configurables[ name ] = opts
self.configurable_defaults[ name ] = default
class_eval( "def \#{name} # def foo\nif _configurables[:\#{name}].nil? # if _configurables[:foo].nil?\nself.class.configurable_defaults[:\#{name}] # self.class.configurable_defaults[:foo]\nelse # else\n_configurables[:\#{name}] # _configurables[:foo]\nend # end\nend #\n\ndef \#{name}=( value ) # def foo=( value )\nif \#{name}.nil? || # if foo.nil? ||\n!self.class.configurables[:\#{name}][:locked] # !self.class.configurables[:foo][:locked]\n#\n_configurables[:\#{name}] = value # _configurables[:foo] = value\nend # end\nend # end\n", __FILE__, __LINE__ )
end