Class: ClosedLoop::Machine::Instance
- Inherits:
-
Object
- Object
- ClosedLoop::Machine::Instance
- Extended by:
- Forwardable
- Defined in:
- lib/closed_loop/machine/instance.rb
Instance Attribute Summary collapse
-
#configuration ⇒ Object
readonly
Returns the value of attribute configuration.
Instance Method Summary collapse
- #available_transitions(target, user) ⇒ Object
- #configure_all ⇒ Object
- #find_transition(target, user, to:) ⇒ Object
-
#initialize ⇒ Instance
constructor
A new instance of Instance.
- #resolve_role(*args) ⇒ Object
- #transit(target, user, to:, attributes: {}, &block) ⇒ Object
- #transit!(target, user, to:, &block) ⇒ Object
Constructor Details
#initialize ⇒ Instance
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
#configuration ⇒ Object (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_all ⇒ Object
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 |