lib/cashier.rb in cashier-0.1.0 vs lib/cashier.rb in cashier-0.2.0

- old
+ new

@@ -1,77 +1,78 @@ # Cashier module Cashier extend self - # used to track all the tags Cashier is storing - STORAGE_KEY = 'cashier-tags' + CACHE_KEY = 'cashier-tags' def perform_caching? ::ApplicationController.perform_caching end - # shamefully taken straight from Resque. - # Thanks Defunkt :D + def store_fragment(fragment, *tags) + return unless perform_caching? - # Accepts: - # 1. A 'hostname:port' string - # 2. A 'hostname:port:db' string (to select the Redis db) - # 3. A 'hostname:port/namespace' string (to set the Redis namespace) - # 4. A redis URL string 'redis://host:port' - # 5. An instance of `Redis`, `Redis::Client`, `Redis::DistRedis`, - # or `Redis::Namespace`. - def redis=(server) - if server.respond_to? :split - if server =~ /redis\:\/\// - redis = Redis.connect(:url => server) - else - server, namespace = server.split('/', 2) - host, port, db = server.split(':') - redis = Redis.new(:host => host, :port => port, - :thread_safe => true, :db => db) - end - namespace ||= :cashier - - @redis = Redis::Namespace.new(namespace, :redis => redis) - elsif server.respond_to? :namespace= - @redis = server - else - @redis = Redis::Namespace.new(:cashier, :redis => server) + tags.each do |tag| + # store the fragment + fragments = Rails.cache.fetch(tag) || [] + Rails.cache.write(tag, fragments + [fragment]) end - end - # Returns the current Redis connection. If none has been created, will - # create a new one. - def redis - return @redis if @redis - self.redis = 'localhost:6379' - self.redis + # now store the tag for book keeping + cashier_tags = Rails.cache.fetch(CACHE_KEY) || [] + cashier_tags = (cashier_tags + tags).uniq + Rails.cache.write(CACHE_KEY, cashier_tags) end def expire(*tags) return unless perform_caching? + # delete them from the cache tags.each do |tag| - # check to see if the tag exsists - # some redis versions return nil or [] - members = redis.smembers(tags) - if members.is_a?(Array) - members.each do |cache_key| - Rails.cache.delete(cache_key) + if fragment_keys = Rails.cache.fetch(tag) + fragment_keys.each do |fragment_key| + Rails.cache.delete(fragment_key) end - redis.del(tag) - redis.srem(STORAGE_KEY, tag) end + Rails.cache.delete(tag) end + + # now remove them from the list + # of stored tags + cashier_tags = Rails.cache.fetch(CACHE_KEY) || [] + cashier_tags = (cashier_tags - tags).uniq + Rails.cache.write(CACHE_KEY, cashier_tags) end def tags - redis.smembers STORAGE_KEY + Rails.cache.fetch(CACHE_KEY) || [] end - def wipe + def clear expire(*tags) + Rails.cache.delete(CACHE_KEY) end -end + def wipe + clear + end + + def keys + tags.inject([]) do |arry, tag| + arry += Rails.cache.fetch(tag) + end.compact + end + + def keys_for(tag) + Rails.cache.fetch(tag) || [] + end +end + require 'cashier/controller_helper' +require 'cashier/matchers' + +if defined?(::Rails) + if Rails::VERSION::MAJOR == 3 + require 'cashier/railtie' + end +end