Sha256: b34f381172de4abadb256ad8a1e9e4e4af0b92d0b79b9124bd66cceea84b74f9

Contents?: true

Size: 1.49 KB

Versions: 2

Compression:

Stored size: 1.49 KB

Contents

module Catche
  module Tag
    class Collect

      class << self

        # Collects resource tags for a given resource
        #
        #   Catche::Tag::Collect.resource_tags(@task)
        #   => { :set => ["tasks_1"], :expire => ["tasks_1"] }
        def resource(resource)
          set_tags    = []
          expire_tags = []

          set_tags    << resource.catche_tag
          expire_tags << resource.catche_tag

          {
            :set    => set_tags.uniq,
            :expire => expire_tags.uniq
          }
        end

        # Collects collection tags for a given context, for example a controller
        #
        #   Catche::Tag::Collect.collection_tags(controller, Task)
        #   => { :set => ["projects_1_tasks"], :expire => ["tasks", "projects_1_tasks"] }
        def collection(context, resource_class, include_base=true)
          associations      = Catche::ResourceLoader.fetch(context, *resource_class.catche_associations)
          association_tags  = associations.map { |a| a.catche_tag }

          set_tags    = []
          expire_tags = []

          association_tags.each do |tag|
            set_tags  << Tag.join(tag, resource_class.catche_tag)
          end

          set_tags    << resource_class.catche_tag if association_tags.blank?

          expire_tags << resource_class.catche_tag if include_base
          expire_tags += set_tags

          {
            :set    => set_tags.uniq,
            :expire => expire_tags.uniq
          }
        end

      end

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
catche-0.2.3 lib/catche/tag/collect.rb
catche-0.2.2 lib/catche/tag/collect.rb