moneta 0.7.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 })