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



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

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

#invalid_transition!(was, is) ⇒ Object



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

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?(use_previous = false) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
37
38
39
40
# File 'lib/stator/integration.rb', line 34

def state_changed?(use_previous = false)
  if use_previous
    !!@record.previous_changes[@machine.field.to_s]
  else
    @record.send("#{@machine.field}_changed?")
  end
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



67
68
69
70
71
72
# File 'lib/stator/integration.rb', line 67

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

  true
end

#validate_transitionObject



44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/stator/integration.rb', line 44

def validate_transition
  return unless self.state_changed?
  return if @machine.skip_validations

  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