Sha256: cc9d8f93f7b6925d3d76c0dea4428ff02f4af2829ecb08c109e55c9355b07c89

Contents?: true

Size: 1.52 KB

Versions: 21

Compression:

Stored size: 1.52 KB

Contents

module StateMachine
  module Integrations #:nodoc:
    module ActiveModel
      # Adds support for invoking callbacks on ActiveModel observers with more
      # than one argument (e.g. the record *and* the state transition).  By
      # default, ActiveModel only supports passing the record into the
      # callbacks.
      # 
      # For example:
      # 
      #   class VehicleObserver < ActiveModel::Observer
      #     # The default behavior: only pass in the record
      #     def after_save(vehicle)
      #     end
      #     
      #     # Custom behavior: allow the transition to be passed in as well
      #     def after_transition(vehicle, transition)
      #       Audit.log(vehicle, transition)
      #     end
      #   end
      module Observer
        def self.included(base) #:nodoc:
          base.class_eval do
            alias_method :update_without_multiple_args, :update
            alias_method :update, :update_with_multiple_args
          end
        end
        
        # Allows additional arguments other than the object to be passed to the
        # observed methods
        def update_with_multiple_args(observed_method, object, *args) #:nodoc:
          if args.any?
            send(observed_method, object, *args) if respond_to?(observed_method)
          else
            update_without_multiple_args(observed_method, object)
          end
        end
      end
    end
  end
end

ActiveModel::Observer.class_eval do
  include StateMachine::Integrations::ActiveModel::Observer
end if defined?(ActiveModel::Observer)

Version data entries

21 entries across 21 versions & 3 rubygems

Version Path
hsume2-state_machine-1.0.5 lib/state_machine/integrations/active_model/observer.rb
state_machine-1.0.2 lib/state_machine/integrations/active_model/observer.rb
hsume2-state_machine-1.0.4 lib/state_machine/integrations/active_model/observer.rb
hsume2-state_machine-1.0.3 lib/state_machine/integrations/active_model/observer.rb
hsume2-state_machine-1.0.2 lib/state_machine/integrations/active_model/observer.rb
hsume2-state_machine-1.0.1 lib/state_machine/integrations/active_model/observer.rb
state_machine-1.0.1 lib/state_machine/integrations/active_model/observer.rb
state_machine-1.0.0 lib/state_machine/integrations/active_model/observer.rb
state_machine-0.10.4 lib/state_machine/integrations/active_model/observer.rb
state_machine-0.10.3 lib/state_machine/integrations/active_model/observer.rb
state_machine-0.10.2 lib/state_machine/integrations/active_model/observer.rb
state_machine-0.10.1 lib/state_machine/integrations/active_model/observer.rb
state_machine-0.10.0 lib/state_machine/integrations/active_model/observer.rb
verborghs-state_machine-0.9.6 lib/state_machine/integrations/active_model/observer.rb
verborghs-state_machine-0.9.5 lib/state_machine/integrations/active_model/observer.rb
verborghs-state_machine-0.9.4 lib/state_machine/integrations/active_model/observer.rb
state_machine-0.9.4 lib/state_machine/integrations/active_model/observer.rb
state_machine-0.9.3 lib/state_machine/integrations/active_model/observer.rb
state_machine-0.9.2 lib/state_machine/integrations/active_model/observer.rb
state_machine-0.9.1 lib/state_machine/integrations/active_model/observer.rb