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

Class Method Details

.build(&block) ⇒ Object

Build your own store chain!

Examples:

Moneta builder

Moneta.build do
  use :Expires
  adapter :Memory
end


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)

Parameters:

  • name (Symbol)

    Name of adapter (See Moneta::Adapters)

  • options (Hash) (defaults to: {})

Raises:

  • (ArgumentError)


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, options = {})
  expires = options.delete(: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, :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
    options[: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
    options[: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, options
  end
end