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
-
#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
48 49 50 |
# File 'lib/closed_loop/machine/instance.rb', line 48 def configure_all raise '#configure_all not implemented yet' end |
#resolve_role(*args) ⇒ Object
44 45 46 |
# File 'lib/closed_loop/machine/instance.rb', line 44 def resolve_role(*args) self.class.const_get('RoleResolver').new(*args).call end |
#transit(target, user, to:, attributes: {}, &block) ⇒ Object
34 35 36 37 38 39 40 41 42 |
# File 'lib/closed_loop/machine/instance.rb', line 34 def transit(target, user, to:, attributes: {}, &block) available_transition = available_transitions(target, user).find do |transition| transition.from == target.status.to_sym && transition.to == to.to_sym end if available_transition&.available?(target, user) available_transition.perform(target, user, attributes, &block) end end |
#transit!(target, user, to:, &block) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/closed_loop/machine/instance.rb', line 22 def transit!(target, user, to:, &block) available_transition = available_transitions(target, user).find do |transition| transition.from == target.status.to_sym && transition.to == to.to_sym end if available_transition&.available?(target, user) available_transition.perform!(target, user, &block) else raise("Transition #{self.class} #{target.status}->#{to} for #{target.id} by #{user} not available!") end end |