Class: ClosedLoop::Machine::Transition

Inherits:
Base
  • Object
show all
Defined in:
lib/closed_loop/machine/transition.rb

Constant Summary

Constants inherited from Base

Base::ATTRIBUTES

Instance Method Summary collapse

Methods inherited from Base

#initialize

Constructor Details

This class inherits a constructor from ClosedLoop::Machine::Base

Instance Method Details

#available?(target, user) ⇒ Boolean

Returns:

  • (Boolean)


8
9
10
11
12
# File 'lib/closed_loop/machine/transition.rb', line 8

def available?(target, user)
  Array(role).include?(machine.resolve_role(target, user)) &&
    Array(from).include?(target.status.to_sym) &&
    none_constraints?(target, user)
end

#none_constraints?(target, user) ⇒ Boolean

Returns:

  • (Boolean)


14
15
16
17
18
# File 'lib/closed_loop/machine/transition.rb', line 14

def none_constraints?(target, user)
  machine.configuration.select_constraints_for(self).all? do |constraint|
    constraint.allows?(target, user, transition: self)
  end
end

#perform(target, user, attributes) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/closed_loop/machine/transition.rb', line 41

def perform(target, user, attributes)
  target.class.transaction do
    target.assign_attributes(attributes)
    target.status             = to
    target.last_transition_at = Time.current if target.respond_to?(:last_transition_at)

    if target.save
      proc&.call(target, user, transition: self)

      machine.configuration.select_callbacks_for(self).each do |callback|
        callback.perform!(target, user, transition: self)
      end

      yield(target, user, transition: self) if block_given?
    end
  end

  @track_times_used = times_used + 1
end

#perform!(target, user) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/closed_loop/machine/transition.rb', line 20

def perform!(target, user)
  target.class.transaction do
    target.status             = to
    target.last_transition_at = Time.current if target.respond_to?(:last_transition_at)

    proc&.call(target, user, transition: self)

    target.save!

    machine.configuration.select_callbacks_for(self).each do |callback|
      callback.perform!(target, user, transition: self)
    end

    raise 'Callback changes were not saved' if target.changed?

    yield(target, user, transition: self) if block_given?
  end

  @track_times_used = times_used + 1
end

#times_usedObject



4
5
6
# File 'lib/closed_loop/machine/transition.rb', line 4

def times_used
  @track_times_used ||= 0
end