module Moneta autoload :Builder, 'moneta/builder' autoload :Cache, 'moneta/cache' autoload :CreateSupport, 'moneta/mixins' autoload :Defaults, 'moneta/mixins' autoload :ExpiresSupport, 'moneta/mixins' autoload :Expires, 'moneta/expires' autoload :HashAdapter, 'moneta/mixins' autoload :IncrementSupport, 'moneta/mixins' autoload :Lock, 'moneta/lock' autoload :Logger, 'moneta/logger' autoload :Mutex, 'moneta/synchronize' autoload :OptionMerger, 'moneta/optionmerger' autoload :OptionSupport, 'moneta/mixins' autoload :Pool, 'moneta/pool' autoload :Proxy, 'moneta/proxy' autoload :Semaphore, 'moneta/synchronize' autoload :Server, 'moneta/server' autoload :Shared, 'moneta/shared' autoload :Stack, 'moneta/stack' autoload :Transformer, 'moneta/transformer' autoload :Utils, 'moneta/utils' autoload :WeakCreate, 'moneta/weak' autoload :WeakIncrement, 'moneta/weak' autoload :Wrapper, 'moneta/wrapper' module Adapters autoload :ActiveRecord, 'moneta/adapters/activerecord' autoload :Cassandra, 'moneta/adapters/cassandra' autoload :Client, 'moneta/adapters/client' autoload :Cookie, 'moneta/adapters/cookie' autoload :Couch, 'moneta/adapters/couch' autoload :Daybreak, 'moneta/adapters/daybreak' autoload :DBM, 'moneta/adapters/dbm' autoload :DataMapper, 'moneta/adapters/datamapper' autoload :File, 'moneta/adapters/file' autoload :Fog, 'moneta/adapters/fog' autoload :GDBM, 'moneta/adapters/gdbm' autoload :HBase, 'moneta/adapters/hbase' autoload :LRUHash, 'moneta/adapters/lruhash' autoload :LevelDB, 'moneta/adapters/leveldb' autoload :LMDB, 'moneta/adapters/lmdb' autoload :LocalMemCache, 'moneta/adapters/localmemcache' autoload :Memcached, 'moneta/adapters/memcached' autoload :MemcachedDalli, 'moneta/adapters/memcached/dalli' autoload :MemcachedNative, 'moneta/adapters/memcached/native' autoload :Memory, 'moneta/adapters/memory' autoload :Mongo, 'moneta/adapters/mongo' autoload :MongoMoped, 'moneta/adapters/mongo/moped' autoload :MongoOfficial, 'moneta/adapters/mongo/official' autoload :Null, 'moneta/adapters/null' autoload :PStore, 'moneta/adapters/pstore' autoload :Redis, 'moneta/adapters/redis' autoload :RestClient, 'moneta/adapters/restclient' autoload :Riak, 'moneta/adapters/riak' autoload :SDBM, 'moneta/adapters/sdbm' autoload :Sequel, 'moneta/adapters/sequel' autoload :Sqlite, 'moneta/adapters/sqlite' autoload :TDB, 'moneta/adapters/tdb' autoload :TokyoCabinet, 'moneta/adapters/tokyocabinet' autoload :TokyoTyrant, 'moneta/adapters/tokyotyrant' autoload :YAML, 'moneta/adapters/yaml' end # Create new Moneta store with default proxies # # This works in most cases if you don't want fine # control over the proxy stack. It uses Marshal on the # keys and values. Use Moneta#build if you want to have fine control! # # @param [Symbol] name Name of adapter (See Moneta::Adapters) # @param [Hash] options # @return [Moneta store] newly created Moneta store # @option options [Boolean/Integer] :expires Ensure that store supports expiration by inserting # {Expires} if the underlying adapter doesn't support it natively # and set default expiration time # @option options [Boolean] :threadsafe (false) Ensure that the store is thread safe by inserting Moneta::Lock # @option options [Boolean/Hash] :logger (false) Add logger to proxy stack (Hash is passed to logger as options) # @option options [Boolean/Symbol] :compress (false) If true, compress value with zlib, or specify custom compress, e.g. :quicklz # @option options [Symbol] :serializer (:marshal) Serializer used for key and value, disable with nil # @option options [Symbol] :key_serializer (options[:serializer]) Serializer used for key, disable with nil # @option options [Symbol] :value_serializer (options[:serializer]) Serializer used for value, disable with nil # @option options [String] :prefix Key prefix used for namespacing (default none) # @option options All other options passed to the adapter # # Supported adapters: # * :HashFile (Store which spreads the entries using a md5 hash, e.g. cache/42/391dd7535aebef91b823286ac67fcd) # * :File (normal file store) # * :Memcached (Memcached store) # * ... (All other adapters from Moneta::Adapters) # # @api public def self.new(name, options = {}) expires = options[:expires] options.delete(:expires) unless Integer === expires logger = options.delete(:logger) threadsafe = options.delete(:threadsafe) compress = options.delete(:compress) serializer = options.include?(:serializer) ? options.delete(:serializer) : :marshal key_serializer = options.include?(:key_serializer) ? options.delete(:key_serializer) : serializer value_serializer = options.include?(:value_serializer) ? options.delete(:value_serializer) : serializer transformer = { key: [key_serializer, :prefix], value: [value_serializer], prefix: options.delete(:prefix) } transformer[:value] << (Symbol === compress ? compress : :zlib) if compress raise ArgumentError, 'Name must be Symbol' unless Symbol === name case name when :Sequel # Sequel accept only base64 keys transformer[:key] << :base64 when :ActiveRecord, :DataMapper, :Couch # DataMapper and AR accept only base64 keys and values transformer[:key] << :base64 transformer[:value] << :base64 when :PStore, :YAML, :Null # For PStore and YAML only the key has to be a string transformer.delete(:value) if transformer[:value] == [:marshal] when :HashFile # Use spreading hashes transformer[:key] << :md5 << :spread name = :File when :File, :Riak, :RestClient # Use escaping for file and HTTP interfaces transformer[:key] << :escape end a = Adapters.const_get(name).new(options) build do use :Logger, Hash === logger ? logger : {} if logger use :Expires, expires: options[:expires] if !a.supports?(:expires) && expires use :Transformer, transformer use :Lock if threadsafe adapter a end end # Configure your own Moneta proxy stack # # @yieldparam Builder block # @return [Moneta store] newly created Moneta store # # @example Moneta builder # Moneta.build do # use :Expires # adapter :Memory # end # # @api public def self.build(&block) Builder.new(&block).build.last end end