module StateMachines::AuditTrail::TransitionAuditing
This module inserts hooks into the state machine. The transition_class is the class (optionally specified with the :class option) for the model which records audit information from one single transition i.e. SubscriptionStateTransition.
Multiple `SubscriptionStateTransition`s compose the 'audit_trail'.
Public Instance Methods
audit_trail(options = {})
click to toggle source
Hook for audit_trail
inside a a state_machine declaration.
options:
- :class - custom state transition class - :owner_class - the class which is to own the persisted transition objects - :context - methods to call/store in field of same name in the state transition class - :initial - if false, won't log null => initial state transition upon instantiation
# File lib/state_machines/audit_trail/transition_auditing.rb, line 19 def audit_trail(options = {}) state_machine = self if options[:class].presence raise ":class option[#{options[:class]}] must be a class (not a string)." unless options[:class].is_a? Class end transition_class = options[:class] || default_transition_class owner_class = options[:owner_class] || self.owner_class # backend implements #log to store transition information @backend = StateMachines::AuditTrail::Backend.create_for(transition_class, owner_class, options.slice(:context, :as)) # Initial state logging can be turned off. Very useful for a model with multiple state_machines using a single TransitionState object for logging unless options[:initial] == false unless state_machine.action == nil # Log the initial transition from null => initial (upon object instantiation) state_machine.owner_class.after_initialize do |object| if state_machine.backend.new_record? object current_state = object.send(state_machine.attribute) if !current_state.nil? state_machine.backend.log(object, OpenStruct.new(namespace: state_machine.namespace, to: current_state)) end end end end end # Log any transition (other than initial) state_machine.after_transition do |object, transition| state_machine.backend.log(object, transition) end end
backend()
click to toggle source
Public returns an instance of the class which does the actual audit trail logging
# File lib/state_machines/audit_trail/transition_auditing.rb, line 52 def backend @backend end
Private Instance Methods
default_transition_class()
click to toggle source
# File lib/state_machines/audit_trail/transition_auditing.rb, line 58 def default_transition_class owner_class_or_base_class = owner_class.respond_to?(:base_class) ? owner_class.base_class : owner_class name = "#{owner_class_or_base_class.name}#{attribute.to_s.camelize}Transition" name.constantize end