Module: StatePattern::ClassMethods

Defined in:
lib/state_pattern.rb

Instance Method Summary collapse

Instance Method Details

#initial_state_classObject



10
11
12
# File 'lib/state_pattern.rb', line 10

def initial_state_class
  @initial_state_class
end

#set_initial_state(state_class) ⇒ Object



14
15
16
17
# File 'lib/state_pattern.rb', line 14

def set_initial_state(state_class)
  @initial_state_class = state_class
  create_methods
end

#state_classesObject



28
29
30
# File 'lib/state_pattern.rb', line 28

def state_classes
  (transitions_hash.to_a << initial_state_class).flatten.uniq.select{|t| t.respond_to?(:ancestors) && t.ancestors.include?(StatePattern::State)}
end

#state_eventsObject



24
25
26
# File 'lib/state_pattern.rb', line 24

def state_events
  transitions_hash.to_a.flatten.uniq.select{|t| t.respond_to?(:to_sym)}.map{|s| s.to_sym}
end

#state_methodsObject



19
20
21
22
# File 'lib/state_pattern.rb', line 19

def state_methods
  state_classes_with_their_bases = state_classes.map{|c| c.ancestors.select{|a| a.ancestors.include?(StatePattern::State) && a != StatePattern::State}}.flatten.uniq
  (state_classes_with_their_bases.map{|state_class| state_class.public_instance_methods(false)}.flatten.uniq - ["enter", "exit"]).map{|s| s.to_sym}
end

#transitions_hashObject



40
41
42
# File 'lib/state_pattern.rb', line 40

def transitions_hash
  @transitions_hash
end

#valid_transitions(transitions_hash) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/state_pattern.rb', line 32

def valid_transitions(transitions_hash)
  @transitions_hash = transitions_hash
  @transitions_hash.each do |key, value|
    @transitions_hash[key] = [value] if !value.respond_to?(:to_ary)
  end
  create_methods
end