Sha256: f0aee05f16fb817a35a4c01502b013716904f4e02a338437cb1a56513e54e701

Contents?: true

Size: 1.25 KB

Versions: 6

Compression:

Stored size: 1.25 KB

Contents

require 'fileutils'

require 'glue/attribute'
require 'nitro/caching/stores'

module Nitro

# Adds support for caching.

module Caching

  # Action caching.

  module Fragments

    @@store = FileStore.new # MemoryStore.new

    def self.store 
      @@store 
    end
    
    def self.store=(store) 
      @@store = store
    end
    
    def self.get(name, options = {})
      return @@store.read(name, options)
    end
    
    def self.put(name, content = nil, options = {})
      @@store.write(name, content, options)
      return content
    end
    
    def self.append_features(base) # :nodoc: 
      super
    end

    private

    def cache(name = nil, options = {}, &block)
      name = @action_name unless name  
      cache_fragment(block, "#{name}#{options}", options)
    end

    def cache_fragment(block, name, options = {})
      unless caching_enabled?
        block.call
        return
      end

      if fragment = Fragments.get(name, options)
        @out << fragment
      else
        pos = @out.length        
        block.call
        Fragments.put(name, @out[pos..-1], options)
      end
    end

    def expire_fragment(name, options = {})
      Fragments.store.delete(name, options)
    end
  end
  
end

end

# * George Moschovitis  <gm@navel.gr>

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
nitro-0.21.0 lib/nitro/caching/fragments.rb
nitro-0.21.2 lib/nitro/caching/fragments.rb
nitro-0.22.0 lib/nitro/caching/fragments.rb
nitro-0.23.0 lib/nitro/caching/fragments.rb
nitro-0.24.0 lib/nitro/caching/fragments.rb
nitro-0.25.0 lib/nitro/caching/fragments.rb