Sha256: a28112fc5cb41c52a0edb2504032cc02719351d986dad6f226731e5c0371490c

Contents?: true

Size: 1.64 KB

Versions: 12

Compression:

Stored size: 1.64 KB

Contents

module Lacquer
  def self.cache_control
    @cache_control ||= CacheControl.new
  end

  class CacheControl
    include Lacquer::CacheUtils
    attr_accessor :store

    def initialize
      self.store = []
    end

    def register(group, options = {})
      options[:group]  = group
      options[:args]   = Array(options[:args]).compact
      store            << options
    end

    def configure
      yield self
    end

    def purge(group, *args)
      clear_cache_for(*urls_for(group, *args))      
    end

    def urls_for(group, *args)
      args.map! { |arg| arg.to_param }
      urls_by(group).map { |options| options[:url] % args }
    end

    def to_vcl_conditions(urls = store)
      urls.map { |opt| %Q[req.url ~ "#{(opt[:url] % opt[:args])}"] }.join(" || ")
    end

    def to_vcl_override_ttl_urls
      urls_grouped_by_expires.map do |expires_in, list|
        <<-CODE.gsub(/^[ \t]{4}*/, '')
        if(#{to_vcl_conditions(list)}) {
          unset beresp.http.Set-Cookie;
          set beresp.ttl = #{expires_in};
          return(deliver);
        }
        CODE
      end.join("\n")
    end

    def to_vcl_pass_urls
      <<-CODE.gsub(/^[ \t]{4}*/, '')
      if(#{to_vcl_conditions(urls_by(:pass))}) {
        return(pass);
      }
      CODE
    end

    def to_vcl_pipe_urls
      <<-CODE.gsub(/^[ \t]{4}*/, '')
      if(#{to_vcl_conditions(urls_by(:pipe))}) {
        return(pipe);
      }
      CODE
    end

    protected

    def urls_grouped_by_expires
      store.group_by { |opt| opt[:expires_in] }.select { |expires_in, list| expires_in }
    end

    def urls_by(group)
      store.select { |opt| opt[:group] == group }
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
lacquer-0.6.7.pre.alpha1 lib/lacquer/cache_control.rb
lacquer-0.6.7.pre.alpha lib/lacquer/cache_control.rb
lacquer-0.6.6 lib/lacquer/cache_control.rb
lacquer-0.6.5 lib/lacquer/cache_control.rb
lacquer-0.6.4 lib/lacquer/cache_control.rb
lacquer-0.6.3 lib/lacquer/cache_control.rb
lacquer-0.6.2 lib/lacquer/cache_control.rb
lacquer-0.6.1 lib/lacquer/cache_control.rb
lacquer-0.6.0 lib/lacquer/cache_control.rb
lacquer-0.5.8 lib/lacquer/cache_control.rb
lacquer-0.5.7 lib/lacquer/cache_control.rb
lacquer-0.5.6 lib/lacquer/cache_control.rb