--- /dev/null
+module ActiveSupport
+ module Cache
+ # A cache store implementation which stores everything into memory in the
+ # same process. If you're running multiple Ruby on Rails server processes
+ # (which is the case if you're using mongrel_cluster or Phusion Passenger),
+ # then this means that your Rails server process instances won't be able
+ # to share cache data with each other. If your application never performs
+ # manual cache item expiry (e.g. when you're using generational cache keys),
+ # then using MemoryStore is ok. Otherwise, consider carefully whether you
+ # should be using this cache store.
+ #
+ # MemoryStore is not only able to store strings, but also arbitrary Ruby
+ # objects.
+ #
+ # MemoryStore is not thread-safe. Use SynchronizedMemoryStore instead
+ # if you need thread-safety.
+ class MemoryStore < Store
+ def initialize
+ @data = {}
+ end
+
+ def read(name, options = nil)
+ super
+ @data[name]
+ end
+
+ def write(name, value, options = nil)
+ super
+ @data[name] = value.freeze
+ end
+
+ def delete(name, options = nil)
+ super
+ @data.delete(name)
+ end
+
+ def delete_matched(matcher, options = nil)
+ super
+ @data.delete_if { |k,v| k =~ matcher }
+ end
+
+ def exist?(name,options = nil)
+ super
+ @data.has_key?(name)
+ end
+
+ def clear
+ @data.clear
+ end
+ end
+ end
+end