Class: Stator::Integration

Inherits:
Object
  • Object
show all
Defined in:
lib/stator/integration.rb

Instance Method Summary collapse

Constructor Details

#initialize(machine, record) ⇒ Integration

Returns a new instance of Integration.



8
9
10
11
# File 'lib/stator/integration.rb', line 8

def initialize(machine, record)
  @machine = machine
  @record  = record
end

Instance Method Details

#invalid_state!Object

todo: i18n



54
55
56
# File 'lib/stator/integration.rb', line 54

def invalid_state!
  @record.errors.add(@machine.field, "is not a valid state")
end

#invalid_transition!(was, is) ⇒ Object



58
59
60
# File 'lib/stator/integration.rb', line 58

def invalid_transition!(was, is)
  @record.errors.add(@machine.field, "cannot transition to #{is.inspect} from #{was.inspect}")
end

#stateObject



20
21
22
# File 'lib/stator/integration.rb', line 20

def state
  @record.send(@machine.field)
end

#state=(new_value) ⇒ Object



16
17
18
# File 'lib/stator/integration.rb', line 16

def state=(new_value)
  @record.send("#{@machine.field}=",  new_value)
end

#state_changed?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/stator/integration.rb', line 34

def state_changed?
  @record.send("#{@machine.field}_changed?")
end

#state_was(use_previous = false) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/stator/integration.rb', line 25

def state_was(use_previous = false)
  if use_previous
    @record.previous_changes[@machine.field.to_s].try(:[], 0)
  else
    @record.send("#{@machine.field}_was")
  end
end

#track_transitionObject



62
63
64
65
66
67
# File 'lib/stator/integration.rb', line 62

def track_transition
  self.attempt_to_track_state(self.state_was)
  self.attempt_to_track_state(self.state)

  true
end

#validate_transitionObject



40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/stator/integration.rb', line 40

def validate_transition
  return unless self.state_changed?

  was = self.state_was
  is  = self.state

  if @record.new_record?
    invalid_state! unless @machine.matching_transition(::Stator::Transition::ANY, is)
  else
    invalid_transition!(was, is) unless @machine.matching_transition(was, is)
  end
end