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