Class: Golem::DSL::StateMachineDef

Inherits:
Object
  • Object
show all
Defined in:
lib/golem/dsl/state_machine_def.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass, machine_name = nil, &block) ⇒ StateMachineDef

Returns a new instance of StateMachineDef.



12
13
14
15
16
# File 'lib/golem/dsl/state_machine_def.rb', line 12

def initialize(klass, machine_name = nil, &block)
  @klass = klass # this is the Class that we to endow with FSM behaviour
  @machine = Golem::Model::StateMachine.new(machine_name)
  instance_eval(&block) if block
end

Instance Attribute Details

#machine_nameObject (readonly)

Returns the value of attribute machine_name.



10
11
12
# File 'lib/golem/dsl/state_machine_def.rb', line 10

def machine_name
  @machine_name
end

Instance Method Details

#all_statesObject



26
27
28
# File 'lib/golem/dsl/state_machine_def.rb', line 26

def all_states
  @machine.all_states.collect{|state| StateDef.new(@machine, state.name)}
end

#initial_state(state) ⇒ Object



30
31
32
# File 'lib/golem/dsl/state_machine_def.rb', line 30

def initial_state(state)
  @machine.initial_state = @machine.get_or_define_state(state)
end

#machineObject



18
19
20
# File 'lib/golem/dsl/state_machine_def.rb', line 18

def machine
  @machine
end

#on_all_events(callback = nil, &block) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
# File 'lib/golem/dsl/state_machine_def.rb', line 70

def on_all_events(callback = nil, &block)
  raise Golem::DefinitionSyntaxError, "A callback or block must be given for on_all_events" unless
    (callback || block)
  raise Golem::DefinitionSyntaxError, "Either a callback or block, not both, must be given for on_all_events" if
    (callback && block)
  callback ||= block
  unless callback.kind_of?(Golem::Model::Callback)
    callback = Golem::Model::Callback.new(callback)
  end
  @machine.on_all_events = callback
end

#on_all_transitions(callback = nil, &block) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
# File 'lib/golem/dsl/state_machine_def.rb', line 58

def on_all_transitions(callback = nil, &block)
  raise Golem::DefinitionSyntaxError, "A callback or block must be given for on_all_transitions" unless
    (callback || block)
  raise Golem::DefinitionSyntaxError, "Either a callback or block, not both, must be given for on_all_transitions" if
    (callback && block)
  callback ||= block
  unless callback.kind_of?(Golem::Model::Callback)
    callback = Golem::Model::Callback.new(callback)
  end
  @machine.on_all_transitions = callback
end

#state(state_name, options = {}, &block) ⇒ Object



22
23
24
# File 'lib/golem/dsl/state_machine_def.rb', line 22

def state(state_name, options = {}, &block)
  Golem::DSL::StateDef.new(@machine, state_name, options, &block)
end

#state_attribute(attribute = nil) ⇒ Object

Sets or returns the state_attribute name.



35
36
37
38
39
40
41
# File 'lib/golem/dsl/state_machine_def.rb', line 35

def state_attribute(attribute = nil)
  if attribute.nil?
    @state_attribute
  else
    @state_attribute = attribute
  end
end

#state_attribute=(attribute) ⇒ Object

Sets the state_attribute name.



44
45
46
# File 'lib/golem/dsl/state_machine_def.rb', line 44

def state_attribute=(attribute)
  @machine.state_attribute = attribute
end

#state_attribute_reader(reader = nil) ⇒ Object

Sets the state_attribute reader.



49
50
51
# File 'lib/golem/dsl/state_machine_def.rb', line 49

def state_attribute_reader(reader = nil)
  @machine.state_attribute_reader = reader
end

#state_attribute_writer(writer = nil) ⇒ Object

Sets the state_attribute writer.



54
55
56
# File 'lib/golem/dsl/state_machine_def.rb', line 54

def state_attribute_writer(writer = nil)
  @machine.state_attribute_writer = writer
end