require 'singleton' module Shellac class Cache include ::Singleton if ::File.exist?("#{File.expand_path(Rails.root.to_s)}/config/varnish.yml") VARNISH_CONFIGURATION = YAML.load_file("#{Rails.root.to_s}/config/varnish.yml")[::Rails.env] end # return client instance def client @client ||= ::Varnish::Client.new "#{config("server")}:#{config("port")}", :timeout => config("timeout"), :keep_alive => config("keep_alive") end # purge a regular expression of url def purge path, recursive=false, hosts=nil # fall back to configuration and convert to array hosts ||= config('hosts').delete(' ').split(',') # purge any page starting with regex regex = "^#{path}#{'$' unless recursive}" # purge with client.purge "req.http.host ~ ^(#{hosts.join('|')}) && req.url ~ #{regex}" end protected def config attr begin VARNISH_CONFIGURATION[attr] rescue raise "Shellac was not properly configured for #{::Rails.env} environment. Did you run rails generate shellac:install?" end end end end