Extract state query method definition and quiet method redefinition warning.

This commit is contained in:
Jeremy Kemper 2008-11-22 18:37:08 -08:00
parent 0492759db3
commit 0e2d18e415
2 changed files with 8 additions and 5 deletions

@ -31,6 +31,12 @@ def state_machine(name = nil, options = {}, &block)
state_machines[name] ||= Machine.new(self, name)
block ? state_machines[name].update(options, &block) : state_machines[name]
end
def define_state_query_method(state_name)
name = "#{state_name}?"
undef_method(name) if method_defined?(name)
class_eval "def #{name}; current_state.to_s == %(#{state_name}) end"
end
end
def current_state(name = nil, new_state = nil, persist = false)

@ -5,11 +5,8 @@ class State
def initialize(name, options = {})
@name = name
machine = options.delete(:machine)
if machine
machine.klass.send(:define_method, "#{name}?") do
current_state.to_s == name.to_s
end
if machine = options.delete(:machine)
machine.klass.define_state_query_method(name)
end
update(options)
end