Sha256: b2a412fb0cd8d45f85f5250009345d491fac72a97f47feefad0371c954bd6d6b

Contents?: true

Size: 1.32 KB

Versions: 4

Compression:

Stored size: 1.32 KB

Contents

module IdentityCache
  module ParentModelExpiration # :nodoc:
    def expire_parent_cache_on_changes(parent_name, foreign_key, parent_class, only_on_foreign_key_change)
      new_parent = send(parent_name)

      if new_parent && new_parent.respond_to?(:expire_primary_index, true)
        if should_expire_identity_cache_parent?(foreign_key, only_on_foreign_key_change)
          new_parent.expire_primary_index
          new_parent.expire_parent_cache if new_parent.respond_to?(:expire_parent_cache)
        end
      end

      if transaction_changed_attributes[foreign_key].present?
        begin
          old_parent = parent_class.find(transaction_changed_attributes[foreign_key])
          old_parent.expire_primary_index if old_parent.respond_to?(:expire_primary_index)
          old_parent.expire_parent_cache  if old_parent.respond_to?(:expire_parent_cache)
        rescue ActiveRecord::RecordNotFound => e
          # suppress errors finding the old parent if its been destroyed since it will have expired itself in that case
        end
      end

      true
    end

    def should_expire_identity_cache_parent?(foreign_key, only_on_foreign_key_change)
      if only_on_foreign_key_change
        destroyed? || was_new_record? || transaction_changed_attributes[foreign_key].present?
      else
        true
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
identity_cache-0.0.6 lib/identity_cache/parent_model_expiration.rb
identity_cache-0.0.5 lib/identity_cache/parent_model_expiration.rb
identity_cache-0.0.4 lib/identity_cache/parent_model_expiration.rb
identity_cache-0.0.3 lib/identity_cache/parent_model_expiration.rb