Sha256: b6d0321a2a7849a845cbf101a4ff1f26459b4bbe83495ca76b3658aa212ef32c
Contents?: true
Size: 1.78 KB
Versions: 1
Compression:
Stored size: 1.78 KB
Contents
module ClosedLoop module Machine class Transition < Base def times_used @track_times_used ||= 0 end def available?(target, user) role == machine.resolve_role(target, user) && target.status.to_sym == from && none_constraints?(target, user) end def none_constraints?(target, user) machine.configuration.select_constraints_for(self).all? do |constraint| constraint.allows?(target, user, transition: self) end end 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 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 end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
closed_loop-0.3.0 | lib/closed_loop/machine/transition.rb |