Module: RailsMachine

Extended by:
ActiveSupport::Concern
Defined in:
lib/rails_machine.rb,
lib/rails_machine/version.rb,
lib/rails_machine/configuration.rb

Defined Under Namespace

Modules: ClassMethods Classes: Configuration

Constant Summary collapse

VERSION =
"0.0.5"

Instance Method Summary collapse

Instance Method Details

#allowed_stateObject



14
15
16
17
18
19
20
# File 'lib/rails_machine.rb', line 14

def allowed_state
  if self.new_record?
    validate_init_state
  else
    validate_transition
  end
end

#valid_init_stateObject



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

def valid_init_state
  init_states.empty? || init_states.include?(self.state.to_sym)
end

#validate_init_stateObject



22
23
24
25
26
# File 'lib/rails_machine.rb', line 22

def validate_init_state
  unless valid_init_state
    errors.add(:state,:invalid_init_state)
  end
end

#validate_transitionObject



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

def validate_transition
  from = self.state_was.to_sym
  to = self.state.to_sym

  transitions = (transitions_for(from) + transitions_for(:any)).select { |t| t[:to] == to || t[:to] == :any }
  return errors.add(:state, :transition_not_found) if transitions.empty?

  errors.add(:state, :guard_failed) if transitions.none? { |t| t[:guards].all? { |guard| guard.call(self) } }
end