moneta 0.7.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (179) hide show
  1. data/.gitignore +4 -0
  2. data/.travis.yml +39 -6
  3. data/CHANGES +18 -0
  4. data/README.md +69 -31
  5. data/Rakefile +1 -1
  6. data/SPEC.md +6 -0
  7. data/benchmarks/run.rb +235 -133
  8. data/lib/active_support/cache/moneta_store.rb +1 -0
  9. data/lib/moneta.rb +29 -19
  10. data/lib/moneta/adapters/activerecord.rb +18 -26
  11. data/lib/moneta/adapters/cassandra.rb +5 -7
  12. data/lib/moneta/adapters/client.rb +3 -5
  13. data/lib/moneta/adapters/cookie.rb +2 -0
  14. data/lib/moneta/adapters/couch.rb +1 -3
  15. data/lib/moneta/adapters/datamapper.rb +4 -6
  16. data/lib/moneta/adapters/dbm.rb +1 -3
  17. data/lib/moneta/adapters/file.rb +4 -0
  18. data/lib/moneta/adapters/fog.rb +2 -4
  19. data/lib/moneta/adapters/gdbm.rb +1 -3
  20. data/lib/moneta/adapters/hbase.rb +5 -7
  21. data/lib/moneta/adapters/leveldb.rb +2 -4
  22. data/lib/moneta/adapters/localmemcache.rb +1 -3
  23. data/lib/moneta/adapters/lruhash.rb +1 -3
  24. data/lib/moneta/adapters/memcached.rb +2 -2
  25. data/lib/moneta/adapters/{memcached_dalli.rb → memcached/dalli.rb} +4 -6
  26. data/lib/moneta/adapters/{memcached_native.rb → memcached/native.rb} +8 -7
  27. data/lib/moneta/adapters/mongo.rb +8 -9
  28. data/lib/moneta/adapters/pstore.rb +1 -3
  29. data/lib/moneta/adapters/redis.rb +2 -4
  30. data/lib/moneta/adapters/riak.rb +3 -5
  31. data/lib/moneta/adapters/sdbm.rb +1 -13
  32. data/lib/moneta/adapters/sequel.rb +3 -5
  33. data/lib/moneta/adapters/sqlite.rb +2 -4
  34. data/lib/moneta/adapters/tokyocabinet.rb +2 -4
  35. data/lib/moneta/base.rb +22 -2
  36. data/lib/moneta/builder.rb +3 -3
  37. data/lib/moneta/cache.rb +1 -1
  38. data/lib/moneta/expires.rb +27 -35
  39. data/lib/moneta/lock.rb +1 -3
  40. data/lib/moneta/logger.rb +3 -5
  41. data/lib/moneta/net.rb +7 -3
  42. data/lib/moneta/proxy.rb +2 -1
  43. data/lib/moneta/server.rb +33 -21
  44. data/lib/moneta/shared.rb +11 -7
  45. data/lib/moneta/stack.rb +1 -1
  46. data/lib/moneta/transformer.rb +15 -13
  47. data/lib/moneta/transformer/config.rb +33 -31
  48. data/lib/moneta/version.rb +1 -1
  49. data/lib/rack/cache/moneta.rb +6 -0
  50. data/lib/rack/moneta_cookies.rb +1 -0
  51. data/lib/rack/session/moneta.rb +1 -0
  52. data/moneta.gemspec +1 -1
  53. data/spec/generate.rb +403 -232
  54. data/spec/helper.rb +23 -2
  55. data/spec/moneta/adapter_activerecord_spec.rb +3 -2
  56. data/spec/moneta/adapter_cassandra_spec.rb +4 -3
  57. data/spec/moneta/adapter_client_spec.rb +4 -3
  58. data/spec/moneta/adapter_cookie_spec.rb +3 -2
  59. data/spec/moneta/adapter_couch_spec.rb +3 -2
  60. data/spec/moneta/adapter_datamapper_spec.rb +3 -2
  61. data/spec/moneta/adapter_dbm_spec.rb +3 -2
  62. data/spec/moneta/adapter_file_spec.rb +3 -2
  63. data/spec/moneta/adapter_fog_spec.rb +3 -2
  64. data/spec/moneta/adapter_gdbm_spec.rb +3 -2
  65. data/spec/moneta/adapter_hbase_spec.rb +3 -2
  66. data/spec/moneta/adapter_leveldb_spec.rb +3 -2
  67. data/spec/moneta/adapter_localmemcache_spec.rb +3 -2
  68. data/spec/moneta/adapter_lruhash_spec.rb +3 -2
  69. data/spec/moneta/adapter_memcached_dalli_spec.rb +4 -3
  70. data/spec/moneta/adapter_memcached_native_spec.rb +4 -3
  71. data/spec/moneta/adapter_memcached_spec.rb +4 -3
  72. data/spec/moneta/adapter_memory_spec.rb +50 -1
  73. data/spec/moneta/adapter_mongo_spec.rb +3 -2
  74. data/spec/moneta/adapter_pstore_spec.rb +124 -4
  75. data/spec/moneta/adapter_redis_spec.rb +4 -3
  76. data/spec/moneta/adapter_riak_spec.rb +3 -2
  77. data/spec/moneta/adapter_sdbm_spec.rb +3 -2
  78. data/spec/moneta/adapter_sequel_spec.rb +3 -2
  79. data/spec/moneta/adapter_sqlite_spec.rb +3 -2
  80. data/spec/moneta/adapter_tokyocabinet_bdb_spec.rb +3 -2
  81. data/spec/moneta/adapter_tokyocabinet_hdb_spec.rb +3 -2
  82. data/spec/moneta/adapter_yaml_spec.rb +32 -5
  83. data/spec/moneta/cache_file_memory_spec.rb +3 -2
  84. data/spec/moneta/cache_memory_null_spec.rb +3 -2
  85. data/spec/moneta/expires_file_spec.rb +23 -41
  86. data/spec/moneta/expires_memory_spec.rb +69 -13
  87. data/spec/moneta/lock_spec.rb +50 -1
  88. data/spec/moneta/null_adapter_spec.rb +26 -0
  89. data/spec/moneta/proxy_expires_memory_spec.rb +51 -12
  90. data/spec/moneta/proxy_redis_spec.rb +4 -3
  91. data/spec/moneta/shared_spec.rb +4 -3
  92. data/spec/moneta/simple_activerecord_spec.rb +105 -12
  93. data/spec/moneta/simple_activerecord_with_expires_spec.rb +106 -13
  94. data/spec/moneta/simple_cassandra_spec.rb +106 -13
  95. data/spec/moneta/simple_client_tcp_spec.rb +106 -13
  96. data/spec/moneta/simple_client_unix_spec.rb +106 -14
  97. data/spec/moneta/simple_couch_spec.rb +105 -12
  98. data/spec/moneta/simple_couch_with_expires_spec.rb +106 -13
  99. data/spec/moneta/simple_datamapper_spec.rb +105 -12
  100. data/spec/moneta/simple_datamapper_with_expires_spec.rb +106 -13
  101. data/spec/moneta/simple_datamapper_with_repository_spec.rb +105 -12
  102. data/spec/moneta/simple_dbm_spec.rb +105 -12
  103. data/spec/moneta/simple_dbm_with_expires_spec.rb +106 -13
  104. data/spec/moneta/simple_file_spec.rb +105 -12
  105. data/spec/moneta/simple_file_with_expires_spec.rb +106 -13
  106. data/spec/moneta/simple_fog_spec.rb +105 -12
  107. data/spec/moneta/simple_fog_with_expires_spec.rb +106 -13
  108. data/spec/moneta/simple_gdbm_spec.rb +105 -12
  109. data/spec/moneta/simple_gdbm_with_expires_spec.rb +106 -13
  110. data/spec/moneta/simple_hashfile_spec.rb +105 -12
  111. data/spec/moneta/simple_hashfile_with_expires_spec.rb +106 -13
  112. data/spec/moneta/simple_hbase_spec.rb +105 -12
  113. data/spec/moneta/simple_hbase_with_expires_spec.rb +106 -13
  114. data/spec/moneta/simple_leveldb_spec.rb +105 -12
  115. data/spec/moneta/simple_leveldb_with_expires_spec.rb +106 -13
  116. data/spec/moneta/simple_localmemcache_spec.rb +105 -12
  117. data/spec/moneta/simple_localmemcache_with_expires_spec.rb +106 -13
  118. data/spec/moneta/simple_lruhash_spec.rb +70 -12
  119. data/spec/moneta/simple_lruhash_with_expires_spec.rb +71 -13
  120. data/spec/moneta/simple_memcached_dalli_spec.rb +106 -13
  121. data/spec/moneta/simple_memcached_native_spec.rb +106 -13
  122. data/spec/moneta/simple_memcached_spec.rb +106 -13
  123. data/spec/moneta/simple_memory_spec.rb +70 -12
  124. data/spec/moneta/simple_memory_with_compress_spec.rb +70 -12
  125. data/spec/moneta/simple_memory_with_expires_spec.rb +71 -13
  126. data/spec/moneta/simple_memory_with_json_key_serializer_spec.rb +41 -15
  127. data/spec/moneta/simple_memory_with_json_serializer_spec.rb +24 -11
  128. data/spec/moneta/simple_memory_with_json_value_serializer_spec.rb +45 -14
  129. data/spec/moneta/simple_memory_with_prefix_spec.rb +70 -12
  130. data/spec/moneta/simple_memory_with_snappy_compress_spec.rb +70 -12
  131. data/spec/moneta/simple_mongo_spec.rb +105 -12
  132. data/spec/moneta/simple_mongo_with_expires_spec.rb +106 -13
  133. data/spec/moneta/simple_null_spec.rb +36 -1
  134. data/spec/moneta/simple_pstore_spec.rb +105 -12
  135. data/spec/moneta/simple_pstore_with_expires_spec.rb +106 -13
  136. data/spec/moneta/simple_redis_spec.rb +106 -13
  137. data/spec/moneta/simple_riak_spec.rb +105 -12
  138. data/spec/moneta/simple_riak_with_expires_spec.rb +106 -13
  139. data/spec/moneta/simple_sdbm_spec.rb +105 -12
  140. data/spec/moneta/simple_sdbm_with_expires_spec.rb +106 -13
  141. data/spec/moneta/simple_sequel_spec.rb +105 -12
  142. data/spec/moneta/simple_sequel_with_expires_spec.rb +106 -13
  143. data/spec/moneta/simple_sqlite_spec.rb +105 -12
  144. data/spec/moneta/simple_sqlite_with_expires_spec.rb +106 -13
  145. data/spec/moneta/simple_tokyocabinet_spec.rb +105 -12
  146. data/spec/moneta/simple_tokyocabinet_with_expires_spec.rb +106 -13
  147. data/spec/moneta/simple_yaml_spec.rb +104 -11
  148. data/spec/moneta/simple_yaml_with_expires_spec.rb +105 -12
  149. data/spec/moneta/stack_file_memory_spec.rb +3 -2
  150. data/spec/moneta/stack_memory_file_spec.rb +3 -1
  151. data/spec/moneta/transformer_bencode_spec.rb +23 -10
  152. data/spec/moneta/transformer_bert_spec.rb +23 -10
  153. data/spec/moneta/transformer_bson_spec.rb +23 -10
  154. data/spec/moneta/transformer_bzip2_spec.rb +13 -3
  155. data/spec/moneta/transformer_json_spec.rb +23 -10
  156. data/spec/moneta/transformer_lzma_spec.rb +13 -3
  157. data/spec/moneta/transformer_lzo_spec.rb +13 -3
  158. data/spec/moneta/transformer_marshal_base64_spec.rb +70 -12
  159. data/spec/moneta/transformer_marshal_escape_spec.rb +70 -12
  160. data/spec/moneta/transformer_marshal_hmac_spec.rb +70 -12
  161. data/spec/moneta/transformer_marshal_md5_spec.rb +70 -12
  162. data/spec/moneta/transformer_marshal_md5_spread_spec.rb +70 -12
  163. data/spec/moneta/transformer_marshal_prefix_spec.rb +70 -12
  164. data/spec/moneta/transformer_marshal_rmd160_spec.rb +70 -12
  165. data/spec/moneta/transformer_marshal_sha1_spec.rb +70 -12
  166. data/spec/moneta/transformer_marshal_sha256_spec.rb +70 -12
  167. data/spec/moneta/transformer_marshal_sha384_spec.rb +70 -12
  168. data/spec/moneta/transformer_marshal_sha512_spec.rb +70 -12
  169. data/spec/moneta/transformer_marshal_truncate_spec.rb +70 -12
  170. data/spec/moneta/transformer_marshal_uuencode_spec.rb +70 -12
  171. data/spec/moneta/transformer_msgpack_spec.rb +23 -10
  172. data/spec/moneta/transformer_ox_spec.rb +67 -9
  173. data/spec/moneta/transformer_quicklz_spec.rb +13 -3
  174. data/spec/moneta/transformer_snappy_spec.rb +13 -3
  175. data/spec/moneta/transformer_tnet_spec.rb +23 -10
  176. data/spec/moneta/transformer_yaml_spec.rb +67 -9
  177. data/spec/moneta/transformer_zlib_spec.rb +13 -3
  178. data/spec/monetaspecs.rb +4649 -1096
  179. metadata +8 -5
@@ -1,5 +1,6 @@
1
1
  module ActiveSupport
2
2
  module Cache
3
+ # @api public
3
4
  class MonetaStore < Store
4
5
  def initialize(options = nil)
5
6
  raise ArgumentError, 'Option :store is required' unless @store = options.delete(:store)
data/lib/moneta.rb CHANGED
@@ -31,8 +31,8 @@ module Moneta
31
31
  autoload :LocalMemCache, 'moneta/adapters/localmemcache'
32
32
  autoload :LRUHash, 'moneta/adapters/lruhash'
33
33
  autoload :Memcached, 'moneta/adapters/memcached'
34
- autoload :MemcachedDalli, 'moneta/adapters/memcached_dalli'
35
- autoload :MemcachedNative, 'moneta/adapters/memcached_native'
34
+ autoload :MemcachedDalli, 'moneta/adapters/memcached/dalli'
35
+ autoload :MemcachedNative, 'moneta/adapters/memcached/native'
36
36
  autoload :Memory, 'moneta/adapters/memory'
37
37
  autoload :Mongo, 'moneta/adapters/mongo'
38
38
  autoload :Null, 'moneta/adapters/null'
@@ -47,30 +47,33 @@ module Moneta
47
47
  end
48
48
 
49
49
  # Create new Moneta store with default proxies
50
- # which works in most cases if you don't want fine
51
- # control over the proxy chain. It uses Marshal on the
50
+ #
51
+ # This works in most cases if you don't want fine
52
+ # control over the proxy stack. It uses Marshal on the
52
53
  # keys and values. Use Moneta#build if you want to have fine control!
53
54
  #
54
55
  # @param [Symbol] name Name of adapter (See Moneta::Adapters)
55
56
  # @param [Hash] options
56
- #
57
- # Options:
58
- # * :expires - If true or integer, ensure that store supports expiration by inserting
59
- # Moneta::Expires if the underlying adapter doesn't support it natively
60
- # * :threadsafe - If true, ensure that the store is thread safe by inserting Moneta::Lock
61
- # * :logger - If true or Hash, add logger to chain (Hash is passed to logger as options)
62
- # * :compress - If true, compress value with zlib, or specify custom compress, e.g. :quicklz
63
- # * :serializer - Serializer used for key and value, disable with nil (default :marshal)
64
- # * :key_serializer - Serializer used for key, disable with nil (default options[:serializer] if not provided)
65
- # * :value_serializer - Serializer used for key, disable with nil (default options[:serializer] if not provided)
66
- # * :prefix - Key prefix used for namespacing (default none)
67
- # * All other options passed to the adapter
57
+ # @return [Moneta store] newly created Moneta store
58
+ # @option options [Boolean/Integer] :expires Ensure that store supports expiration by inserting
59
+ # `Moneta::Expires` if the underlying adapter doesn't support it natively
60
+ # and set default expiration time
61
+ # @option options [Boolean] :threadsafe (false) Ensure that the store is thread safe by inserting Moneta::Lock
62
+ # @option options [Boolean/Hash] :logger (false) Add logger to proxy stack (Hash is passed to logger as options)
63
+ # @option options [Boolean/Symbol] :compress (false) If true, compress value with zlib, or specify custom compress, e.g. :quicklz
64
+ # @option options [Symbol] :serializer (:marshal) Serializer used for key and value, disable with nil
65
+ # @option options [Symbol] :key_serializer (options[:serializer]) Serializer used for key, disable with nil
66
+ # @option options [Symbol] :value_serializer (options[:serializer]) Serializer used for value, disable with nil
67
+ # @option options [String] :prefix Key prefix used for namespacing (default none)
68
+ # @option options All other options passed to the adapter
68
69
  #
69
70
  # Supported adapters:
70
71
  # * :HashFile (Store which spreads the entries using a md5 hash, e.g. cache/42/391dd7535aebef91b823286ac67fcd)
71
72
  # * :File (normal file store)
72
73
  # * :Memcached (Memcached store)
73
74
  # * ... (All other adapters from Moneta::Adapters)
75
+ #
76
+ # @api public
74
77
  def self.new(name, options = {})
75
78
  expires = options.delete(:expires)
76
79
  logger = options.delete(:logger)
@@ -88,11 +91,14 @@ module Moneta
88
91
  # FIXME: Couch should work only with :marshal but this raises an error on 1.9
89
92
  transformer[:key] << :base64
90
93
  transformer[:value] << :base64
94
+ when :Riak
95
+ # Riak accepts only utf-8 keys over the http interface
96
+ # We use base64 encoding therefore.
97
+ transformer[:key] << :base64
91
98
  when :Memcached, :MemcachedDalli, :MemcachedNative
92
- # Memcached accept only base64 keys, expires already supported
99
+ # Memcached supports expires already
93
100
  options[:expires] = expires if Integer === expires
94
101
  expires = false
95
- transformer[:key] << :base64
96
102
  when :PStore, :YAML, :Null
97
103
  # For PStore and YAML only the key has to be a string
98
104
  transformer.delete(:value) if transformer[:value] == [:marshal]
@@ -117,13 +123,17 @@ module Moneta
117
123
  end
118
124
  end
119
125
 
120
- # Build your own store chain!
126
+ # Configure your own Moneta proxy stack!
127
+ #
128
+ # @return [Moneta store] newly created Moneta store
121
129
  #
122
130
  # @example Moneta builder
123
131
  # Moneta.build do
124
132
  # use :Expires
125
133
  # adapter :Memory
126
134
  # end
135
+ #
136
+ # @api public
127
137
  def self.build(&block)
128
138
  Builder.new(&block).build.last
129
139
  end
@@ -14,10 +14,8 @@ module Moneta
14
14
  # Constructor
15
15
  #
16
16
  # @param [Hash] options
17
- #
18
- # Options:
19
- # * :table - Table name (default moneta)
20
- # * :connection - ActiveRecord connection
17
+ # @option options [String] :table ('moneta') Table name
18
+ # @option options [Hash] :connection ActiveRecord connection configuration
21
19
  def initialize(options = {})
22
20
  table = options[:table] || 'moneta'
23
21
  @table = self.class.tables[table] ||=
@@ -43,39 +41,33 @@ module Moneta
43
41
  end
44
42
 
45
43
  def load(key, options = {})
46
- record = @table.where(:k => key).first
44
+ record = @table.select(:v).where(:k => key).first
47
45
  record && record.v
48
46
  end
49
47
 
50
48
  def store(key, value, options = {})
51
- @table.transaction do
52
- record = @table.where(:k => key).first_or_initialize
53
- record.update_attributes(:v => value)
54
- value
55
- end
49
+ record = @table.select(:k).where(:k => key).first_or_initialize
50
+ record.v = value
51
+ record.save
52
+ value
56
53
  end
57
54
 
58
55
  def delete(key, options = {})
59
- @table.transaction do
60
- if record = @table.where(:k => key).first
61
- record.destroy
62
- record.v
63
- end
56
+ if record = @table.where(:k => key).first
57
+ record.destroy
58
+ record.v
64
59
  end
65
60
  end
66
61
 
67
62
  def increment(key, amount = 1, options = {})
68
- @table.transaction do
69
- record = @table.where(:k => key).first_or_initialize
70
- record.lock!
71
- value = record.v
72
- intvalue = value.to_i
73
- raise 'Tried to increment non integer value' unless value == nil || intvalue.to_s == value.to_s
74
- intvalue += amount
75
- record.v = intvalue.to_s
76
- record.save!
77
- intvalue
78
- end
63
+ record = @table.where(:k => key).lock.first_or_initialize
64
+ value = record.v
65
+ intvalue = value.to_i
66
+ raise 'Tried to increment non integer value' unless value == nil || intvalue.to_s == value.to_s
67
+ intvalue += amount
68
+ record.v = intvalue.to_s
69
+ record.save
70
+ intvalue
79
71
  end
80
72
 
81
73
  def clear(options = {})
@@ -11,13 +11,11 @@ module Moneta
11
11
  # Constructor
12
12
  #
13
13
  # @param [Hash] options
14
- #
15
- # Options:
16
- # * :keyspace - Cassandra keyspace (default 'moneta')
17
- # * :column_family - Cassandra column family (default 'moneta')
18
- # * :host - Server host name (default 127.0.0.1)
19
- # * :port - Server port (default 9160)
20
- # * :expires - Default expiration time (default none)
14
+ # @option options [String] :keyspace ('moneta') Cassandra keyspace
15
+ # @option options [String] :column_family ('moneta') Cassandra column family
16
+ # @option options [String] :host ('127.0.0.1') Server host name
17
+ # @option options [Integer] :port (9160) Server port
18
+ # @option options [String] :expires Default expiration time
21
19
  def initialize(options = {})
22
20
  options[:host] ||= '127.0.0.1'
23
21
  options[:port] ||= 9160
@@ -10,11 +10,9 @@ module Moneta
10
10
  # Constructor
11
11
  #
12
12
  # @param [Hash] options
13
- #
14
- # Options:
15
- # * :port - TCP port (default 9000)
16
- # * :host - Hostname (default empty)
17
- # * :file - Unix socket file name (default none)
13
+ # @option options [Integer] :port (9000) TCP port
14
+ # @option options [String] :host ('127.0.0.1') Hostname
15
+ # @option options [String] :file Unix socket file name as alternative to `:port` and `:host`
18
16
  def initialize(options = {})
19
17
  @socket = options[:file] ? UNIXSocket.open(options[:file]) :
20
18
  TCPSocket.open(options[:host] || '127.0.0.1', options[:port] || DEFAULT_PORT)
@@ -1,5 +1,7 @@
1
1
  module Moneta
2
2
  module Adapters
3
+ # Cookie backend used by `Rack::MonetaCookies`
4
+ # @api public
3
5
  class Cookie < Memory
4
6
  attr_reader :cookies
5
7
 
@@ -8,9 +8,7 @@ module Moneta
8
8
  # Constructor
9
9
  #
10
10
  # @param [Hash] options
11
- #
12
- # Options:
13
- # * :db - Couch database (default moneta)
11
+ # @option options [String] :db ('moneta') Couch database
14
12
  def initialize(options = {})
15
13
  options[:db] ||= 'moneta'
16
14
  @db = ::CouchRest.database!(options[:db])
@@ -15,14 +15,12 @@ module Moneta
15
15
  # Constructor
16
16
  #
17
17
  # @param [Hash] options
18
- #
19
- # Options:
20
- # * :setup - Datamapper setup string
21
- # * :repository - Repository name (default :moneta)
22
- # * :table - Table name (default :moneta)
18
+ # @option options [String] :setup Datamapper setup string
19
+ # @option options [String/Symbol] :repository (:moneta) Repository name
20
+ # @option options [String/Symbol] :table (:moneta) Table name
23
21
  def initialize(options = {})
24
22
  raise ArgumentError, 'Option :setup is required' unless options[:setup]
25
- @repository = options.delete(:repository) || :moneta
23
+ @repository = (options.delete(:repository) || :moneta).to_sym
26
24
  Store.storage_names[@repository] = (options.delete(:table) || :moneta).to_s
27
25
  ::DataMapper.setup(@repository, options[:setup])
28
26
  context { Store.auto_upgrade! }
@@ -8,9 +8,7 @@ module Moneta
8
8
  # Constructor
9
9
  #
10
10
  # @param [Hash] options
11
- #
12
- # Options:
13
- # * :file - Database file
11
+ # @option options [String] :file Database file
14
12
  def initialize(options = {})
15
13
  raise ArgumentError, 'Option :file is required' unless options[:file]
16
14
  @hash = ::DBM.new(options[:file])
@@ -7,6 +7,10 @@ module Moneta
7
7
  class File < Base
8
8
  include Mixins::IncrementSupport
9
9
 
10
+ # Constructor
11
+ #
12
+ # @param [Hash] options
13
+ # @option options [String] :dir Directory where files will be stored
10
14
  def initialize(options = {})
11
15
  raise ArgumentError, 'Option :dir is required' unless @dir = options[:dir]
12
16
  FileUtils.mkpath(@dir)
@@ -8,10 +8,8 @@ module Moneta
8
8
  # Constructor
9
9
  #
10
10
  # @param [Hash] options
11
- #
12
- # Options:
13
- # * :dir - Fog directory
14
- # * Other options passed to Fog::Storage#new
11
+ # @option options [String] :dir Fog directory
12
+ # @option options Other options passed to `Fog::Storage#new`
15
13
  def initialize(options = {})
16
14
  raise ArgumentError, 'Option :dir is required' unless dir = options.delete(:dir)
17
15
  storage = ::Fog::Storage.new(options)
@@ -8,9 +8,7 @@ module Moneta
8
8
  # Constructor
9
9
  #
10
10
  # @param [Hash] options
11
- #
12
- # Options:
13
- # * :file - Database file
11
+ # @option options [String] :file Database file
14
12
  def initialize(options = {})
15
13
  raise ArgumentError, 'Option :file is required' unless options[:file]
16
14
  @hash = ::GDBM.new(options[:file])
@@ -8,13 +8,11 @@ module Moneta
8
8
  # Constructor
9
9
  #
10
10
  # @param [Hash] options
11
- #
12
- # Options:
13
- # * :host - Server host name (default 127.0.0.1)
14
- # * :port - Server port (default 9090)
15
- # * :table - Table name (default moneta)
16
- # * :column_family - Column family (default moneta)
17
- # * :column - Column (default value)
11
+ # @option options [String] :host ('127.0.0.1') Server host name
12
+ # @option options [Integer] :port (9090) Server port
13
+ # @option options [String] :table ('moneta') Table name
14
+ # @option options [String] :column_family ('moneta') Column family
15
+ # @option options [String] :column ('value') Column
18
16
  def initialize(options = {})
19
17
  options[:host] ||= '127.0.0.1'
20
18
  options[:port] ||= '9090'
@@ -8,10 +8,8 @@ module Moneta
8
8
  # Constructor
9
9
  #
10
10
  # @param [Hash] options
11
- #
12
- # Options:
13
- # * :dir - Database path
14
- # * All other options passed to LevelDB::DB#new
11
+ # @option options [String] :dir - Database path
12
+ # @option options All other options passed to `LevelDB::DB#new`
15
13
  def initialize(options = {})
16
14
  raise ArgumentError, 'Option :dir is required' unless options[:dir]
17
15
  @hash = ::LevelDB::DB.new(options[:dir])
@@ -10,9 +10,7 @@ module Moneta
10
10
  # Constructor
11
11
  #
12
12
  # @param [Hash] options
13
- #
14
- # Options:
15
- # * :file - Database file
13
+ # @option options [String] :file Database file
16
14
  def initialize(options = {})
17
15
  raise ArgumentError, 'Option :file is required' unless options[:file]
18
16
  @hash = ::LocalMemCache.new(:filename => options[:file])
@@ -11,9 +11,7 @@ module Moneta
11
11
  # Constructor
12
12
  #
13
13
  # @param [Hash] options
14
- #
15
- # Options:
16
- # * :max_size - Maximum byte size of hash values (default 1024000)
14
+ # @option options [Integer] :max_size (1024000) Maximum total byte size of hash values
17
15
  def initialize(options = {})
18
16
  @max_size = options[:max_size] || 1024000
19
17
  clear
@@ -1,10 +1,10 @@
1
1
  module Moneta
2
2
  module Adapters
3
3
  begin
4
- require 'moneta/adapters/memcached_native'
4
+ require 'moneta/adapters/memcached/native'
5
5
  Memcached = MemcachedNative
6
6
  rescue LoadError
7
- require 'moneta/adapters/memcached_dalli'
7
+ require 'moneta/adapters/memcached/dalli'
8
8
  Memcached = MemcachedDalli
9
9
  end
10
10
  end
@@ -8,14 +8,12 @@ module Moneta
8
8
  # Constructor
9
9
  #
10
10
  # @param [Hash] options
11
- #
12
- # Options:
13
- # * :server - Memcached server (default localhost:11211)
14
- # * :expires - Default expiration time (default none)
15
- # * Other options passed to Dalli::Client#new
11
+ # @option options [String] :server ('127.0.0.1:11211') Memcached server
12
+ # @option options [String] :expires Default expiration time
13
+ # @option options Other options passed to `Dalli::Client#new`
16
14
  def initialize(options = {})
17
15
  options[:expires_in] = options.delete(:expires)
18
- server = options.delete(:server) || 'localhost:11211'
16
+ server = options.delete(:server) || '127.0.0.1:11211'
19
17
  @cache = ::Dalli::Client.new(server, options)
20
18
  end
21
19
 
@@ -8,16 +8,17 @@ module Moneta
8
8
  # Constructor
9
9
  #
10
10
  # @param [Hash] options
11
- #
12
- # Options:
13
- # * :server - Memcached server (default localhost:11211)
14
- # * :namespace - Key namespace
15
- # * :expires - Default expiration time (default 604800)
16
- # * Other options passed to Memcached#new
11
+ # @option options [String] :server ('127.0.0.1:11211') Memcached server
12
+ # @option options [String] :namespace Key namespace
13
+ # @option options [String] :expires (604800) Default expiration time
14
+ # @option options Other options passed to `Memcached#new`
17
15
  def initialize(options = {})
18
- server = options.delete(:server) || 'localhost:11211'
16
+ server = options.delete(:server) || '127.0.0.1:11211'
19
17
  @expires = options.delete(:expires) || 604800
20
18
  options.merge!(:prefix_key => options.delete(:namespace)) if options[:namespace]
19
+ # We don't want a limitation on the key charset. Therefore we use the binary protocol.
20
+ # It is also faster.
21
+ options[:binary_protocol] = true unless options.include?(:binary_protocol)
21
22
  @cache = ::Memcached.new(server, options)
22
23
  end
23
24
 
@@ -8,15 +8,13 @@ module Moneta
8
8
  # Constructor
9
9
  #
10
10
  # @param [Hash] options
11
- #
12
- # Options:
13
- # * :collection - MongoDB collection name (default moneta)
14
- # * :host - MongoDB server host (default localhost)
15
- # * :port - MongoDB server port (default mongodb default port)
16
- # * :db - MongoDB database (default moneta)
11
+ # @option options [String] :collection ('moneta') MongoDB collection name
12
+ # @option options [String] :host ('127.0.0.1') MongoDB server host
13
+ # @option options [Integer] :port (MongoDB default port) MongoDB server port
14
+ # @option options [String] :db ('moneta') MongoDB database
17
15
  def initialize(options = {})
18
16
  collection = options.delete(:collection) || 'moneta'
19
- host = options.delete(:host) || 'localhost'
17
+ host = options.delete(:host) || '127.0.0.1'
20
18
  port = options.delete(:port) || ::Mongo::Connection::DEFAULT_PORT
21
19
  db = options.delete(:db) || 'moneta'
22
20
  connection = ::Mongo::Connection.new(host, port, options)
@@ -24,17 +22,18 @@ module Moneta
24
22
  end
25
23
 
26
24
  def load(key, options = {})
27
- value = @collection.find_one('_id' => key)
25
+ value = @collection.find_one('_id' => ::BSON::Binary.new(key))
28
26
  value && value['value'].to_s
29
27
  end
30
28
 
31
29
  def delete(key, options = {})
32
30
  value = load(key, options)
33
- @collection.remove('_id' => key) if value
31
+ @collection.remove('_id' => ::BSON::Binary.new(key)) if value
34
32
  value
35
33
  end
36
34
 
37
35
  def store(key, value, options = {})
36
+ key = ::BSON::Binary.new(key)
38
37
  @collection.update({ '_id' => key },
39
38
  { '_id' => key, 'value' => ::BSON::Binary.new(value) },
40
39
  { :upsert => true })