Class: ClosedLoop::Machine::Instance

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/closed_loop/machine/instance.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeInstance

Returns a new instance of Instance.



12
13
14
15
16
# File 'lib/closed_loop/machine/instance.rb', line 12

def initialize
  @configuration = ClosedLoop::Machine::Configuration.new(self)

  configure_all
end

Instance Attribute Details

#configurationObject (readonly)

Returns the value of attribute configuration.



8
9
10
# File 'lib/closed_loop/machine/instance.rb', line 8

def configuration
  @configuration
end

Instance Method Details

#available_transitions(target, user) ⇒ Object



18
19
20
# File 'lib/closed_loop/machine/instance.rb', line 18

def available_transitions(target, user)
  configuration.transitions.select { |transition| transition.available?(target, user) }
end

#configure_allObject



45
46
47
# File 'lib/closed_loop/machine/instance.rb', line 45

def configure_all
  raise '#configure_all not implemented yet'
end

#find_transition(target, user, to:) ⇒ Object



37
38
39
# File 'lib/closed_loop/machine/instance.rb', line 37

def find_transition(target, user, to:)
  available_transitions(target, user).find { |transition| transition.to == to.to_sym }
end

#resolve_role(*args) ⇒ Object



41
42
43
# File 'lib/closed_loop/machine/instance.rb', line 41

def resolve_role(*args)
  self.class.const_get('RoleResolver').new(*args).call
end

#transit(target, user, to:, attributes: {}, &block) ⇒ Object



32
33
34
35
# File 'lib/closed_loop/machine/instance.rb', line 32

def transit(target, user, to:, attributes: {}, &block)
  transition = find_transition(target, user, to:)
  transition&.perform(target, user, attributes, &block)
end

#transit!(target, user, to:, &block) ⇒ Object



22
23
24
25
26
27
28
29
30
# File 'lib/closed_loop/machine/instance.rb', line 22

def transit!(target, user, to:, &block)
  transition = find_transition(target, user, to:)

  unless transition
    raise("Transition #{self.class} #{target.status}->#{to} for #{target.id} by #{user} not available!")
  end

  transition.perform!(target, user, &block)
end