Sha256: 39db126f182db7fb145f78e1c7b62e96747baba580ca55936a3b78a5728a7170

Contents?: true

Size: 1.11 KB

Versions: 26

Compression:

Stored size: 1.11 KB

Contents

module ApiResource
  
  module Observing
    
    extend ActiveSupport::Concern
    include ActiveModel::Observing
    
    # Redefine these methods to 
    included do

      %w( create save update destroy ).each do |method|
        alias_method_chain method, :observers
      end
    end
    
    %w( create save update destroy ).each do |method|
      module_eval <<-EOE, __FILE__, __LINE__ + 1
        def #{method}_with_observers(*args)
          unless notify_observers(:before_#{method})
            return false
          end
          result = #{method}_without_observers(*args)
          notify_observers(:after_#{method}) if result
          return result
        end
      EOE
    end

    # also need to override notify_observers to return false if
    # ANY of the observers return false, however it will ALWAYS run them all
    def notify_observers(method)
      self.class.observer_instances.inject(true) do |accum, obs|
        obs.update(method, self) && accum
      end
    end
    
  end

  # Blank class here for ease of use, might need
  # some methods some day
  class Observer < ActiveModel::Observer
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
api_resource-0.6.25 lib/api_resource/observing.rb
api_resource-0.6.24 lib/api_resource/observing.rb
api_resource-0.6.23 lib/api_resource/observing.rb
api_resource-0.6.22 lib/api_resource/observing.rb
api_resource-0.6.21 lib/api_resource/observing.rb
api_resource-0.6.20 lib/api_resource/observing.rb
api_resource-0.6.19 lib/api_resource/observing.rb
api_resource-0.6.18 lib/api_resource/observing.rb
api_resource-0.6.17 lib/api_resource/observing.rb
api_resource-0.6.16 lib/api_resource/observing.rb
api_resource-0.6.15 lib/api_resource/observing.rb
api_resource-0.6.14 lib/api_resource/observing.rb
api_resource-0.6.13 lib/api_resource/observing.rb
api_resource-0.6.12 lib/api_resource/observing.rb
api_resource-0.6.11 lib/api_resource/observing.rb
api_resource-0.6.9 lib/api_resource/observing.rb
api_resource-0.6.10 lib/api_resource/observing.rb
api_resource-0.6.8 lib/api_resource/observing.rb
api_resource-0.6.7 lib/api_resource/observing.rb
api_resource-0.6.6 lib/api_resource/observing.rb