module DaemonKit::Configurable::ClassMethods
Public Instance Methods
configurable( name, *args )
click to toggle source
Create a configurable value on any instance, which can contain a default value, and/or be locked.
Create a standard getter/setter without a default value
configurable :foo
Create a getter/setter with a default value
configurable :foo, true
The final argument can be an options hash, which currently respects only one key: locked
(false by default). Locking a configurable means the value can only be set once by the setter method.
configurable :foo, :locked => true
As long as the getter method (foo
) returns nil, the standard setter method will work. As soon as the getter returns a non-nil value the setter won't set a new value. To set a new value you'll have to explicitly use the set instance method.
# File lib/daemon_kit/core_ext/configurable.rb, line 44 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( <<-EOF, __FILE__, __LINE__ ) def #{name} # def foo if _configurables[:#{name}].nil? # if _configurables[:foo].nil? self.class.configurable_defaults[:#{name}] # self.class.configurable_defaults[:foo] else # else _configurables[:#{name}] # _configurables[:foo] end # end end # def #{name}=( value ) # def foo=( value ) if #{name}.nil? || # if foo.nil? || !self.class.configurables[:#{name}][:locked] # !self.class.configurables[:foo][:locked] # _configurables[:#{name}] = value # _configurables[:foo] = value end # end end # end EOF end