Module: Moneta
- Defined in:
- lib/moneta.rb,
lib/moneta/net.rb,
lib/moneta/base.rb,
lib/moneta/lock.rb,
lib/moneta/cache.rb,
lib/moneta/proxy.rb,
lib/moneta/stack.rb,
lib/moneta/logger.rb,
lib/moneta/mixins.rb,
lib/moneta/server.rb,
lib/moneta/shared.rb,
lib/moneta/builder.rb,
lib/moneta/expires.rb,
lib/moneta/version.rb,
lib/moneta/wrapper.rb,
lib/moneta/transformer.rb,
lib/moneta/adapters/dbm.rb,
lib/moneta/adapters/fog.rb,
lib/moneta/optionmerger.rb,
lib/moneta/adapters/file.rb,
lib/moneta/adapters/gdbm.rb,
lib/moneta/adapters/null.rb,
lib/moneta/adapters/riak.rb,
lib/moneta/adapters/sdbm.rb,
lib/moneta/adapters/yaml.rb,
lib/moneta/adapters/couch.rb,
lib/moneta/adapters/hbase.rb,
lib/moneta/adapters/mongo.rb,
lib/moneta/adapters/redis.rb,
lib/moneta/adapters/client.rb,
lib/moneta/adapters/cookie.rb,
lib/moneta/adapters/memory.rb,
lib/moneta/adapters/pstore.rb,
lib/moneta/adapters/sequel.rb,
lib/moneta/adapters/sqlite.rb,
lib/moneta/adapters/leveldb.rb,
lib/moneta/adapters/lruhash.rb,
lib/moneta/adapters/cassandra.rb,
lib/moneta/adapters/memcached.rb,
lib/moneta/transformer/config.rb,
lib/moneta/transformer/helper.rb,
lib/moneta/adapters/datamapper.rb,
lib/moneta/adapters/activerecord.rb,
lib/moneta/adapters/tokyocabinet.rb,
lib/moneta/adapters/localmemcache.rb,
lib/moneta/adapters/memcached_dalli.rb,
lib/moneta/adapters/memcached_native.rb
Defined Under Namespace
Modules: Adapters, Mixins, Net Classes: Base, Builder, Cache, Expires, Lock, Logger, OptionMerger, Proxy, Server, Shared, Stack, Transformer, Wrapper
Constant Summary collapse
- VERSION =
Moneta version number
'0.7.0'
Class Method Summary collapse
-
.build(&block) ⇒ Object
Build your own store chain!.
-
.new(name, options = {}) ⇒ Object
Create new Moneta store with default proxies which works in most cases if you don’t want fine control over the proxy chain.
Class Method Details
.build(&block) ⇒ Object
Build your own store chain!
127 128 129 |
# File 'lib/moneta.rb', line 127 def self.build(&block) Builder.new(&block).build.last end |
.new(name, options = {}) ⇒ Object
Create new Moneta store with default proxies which works in most cases if you don’t want fine control over the proxy chain. It uses Marshal on the keys and values. Use Moneta#build if you want to have fine control!
Options:
-
:expires - If true or integer, ensure that store supports expiration by inserting Moneta::Expires if the underlying adapter doesn’t support it natively
-
:threadsafe - If true, ensure that the store is thread safe by inserting Moneta::Lock
-
:logger - If true or Hash, add logger to chain (Hash is passed to logger as options)
-
:compress - If true, compress value with zlib, or specify custom compress, e.g. :quicklz
-
:serializer - Serializer used for key and value, disable with nil (default :marshal)
-
:key_serializer - Serializer used for key, disable with nil (default options if not provided)
-
:value_serializer - Serializer used for key, disable with nil (default options if not provided)
-
:prefix - Key prefix used for namespacing (default none)
-
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)
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/moneta.rb', line 74 def self.new(name, = {}) expires = .delete(:expires) logger = .delete(:logger) threadsafe = .delete(:threadsafe) compress = .delete(:compress) serializer = .include?(:serializer) ? .delete(:serializer) : :marshal key_serializer = .include?(:key_serializer) ? .delete(:key_serializer) : serializer value_serializer = .include?(:value_serializer) ? .delete(:value_serializer) : serializer transformer = { :key => [key_serializer, :prefix], :value => [value_serializer], :prefix => .delete(:prefix) } transformer[:value] << (Symbol === compress ? compress : :zlib) if compress raise ArgumentError, 'Name must be Symbol' unless Symbol === name case name when :Sequel, :ActiveRecord, :Couch, :DataMapper # Sequel accept only base64 keys and values # FIXME: Couch should work only with :marshal but this raises an error on 1.9 transformer[:key] << :base64 transformer[:value] << :base64 when :Memcached, :MemcachedDalli, :MemcachedNative # Memcached accept only base64 keys, expires already supported [:expires] = expires if Integer === expires expires = false transformer[:key] << :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 # Use escaping transformer[:key] << :escape when :Cassandra, :Redis # Expires already supported [:expires] = expires if Integer === expires expires = false end build do use :Logger, Hash === logger ? logger : {} if logger use :Expires, :expires => (Integer === expires ? expires : nil) if expires use :Transformer, transformer use :Lock if threadsafe adapter name, end end |