Sha256: 647f88b316c82b1f8953e650f5cf3f9c2d98e9b4fe9580665db23c7e67e644e9

Contents?: true

Size: 1005 Bytes

Versions: 10

Compression:

Stored size: 1005 Bytes

Contents

# -*- encoding : utf-8 -*-
module LoyalCore
  module ActiveModel
    module FixCounterCache
      def self.included base
        base.class_eval do
          extend ClassMethods
        end
      end

      module ClassMethods
        #
        # usage:
        #   self.loyal_core_fix_counter_cache :folder_id => {
        #     :counter => :articles_count,
        #     :class   => ::Ruby800::Juice::Folder
        #   }
        #
        def loyal_core_fix_counter_cache *args
          options = args.extract_options!

          options.each do |key, opts|
            before_save do |r|
              _id = key
              _counter = opts[:counter]
              _class   = opts[:class]

              if !(r.new_record?) && r.send(:"#{_id}_changed?")
                _class.decrement_counter(:"#{_counter}", r.send(:"#{_id}_was"))
                _class.increment_counter(:"#{_counter}", r.send(:"#{_id}"))
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
loyal_core-0.0.11 lib/loyal_core/active_model/fix_counter_cache.rb
loyal_core-0.0.10 lib/loyal_core/active_model/fix_counter_cache.rb
loyal_core-0.0.8 lib/loyal_core/active_model/fix_counter_cache.rb
loyal_core-0.0.7 lib/loyal_core/active_model/fix_counter_cache.rb
loyal_core-0.0.6 lib/loyal_core/active_model/fix_counter_cache.rb
loyal_core-0.0.5 lib/loyal_core/active_model/fix_counter_cache.rb
loyal_core-0.0.4 lib/loyal_core/active_model/fix_counter_cache.rb
loyal_core-0.0.3 lib/loyal_core/active_model/fix_counter_cache.rb
loyal_core-0.0.2 lib/loyal_core/active_model/fix_counter_cache.rb
loyal_core-0.0.1 lib/loyal_core/active_model/fix_counter_cache.rb