moneta 0.7.1 → 0.7.2
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.
- data/.yardopts +1 -0
- data/CHANGES +21 -10
- data/README.md +1 -1
- data/SPEC.md +4 -12
- data/lib/moneta.rb +7 -5
- data/lib/moneta/adapters/activerecord.rb +9 -3
- data/lib/moneta/adapters/cassandra.rb +9 -4
- data/lib/moneta/adapters/client.rb +9 -3
- data/lib/moneta/adapters/cookie.rb +3 -0
- data/lib/moneta/adapters/couch.rb +8 -3
- data/lib/moneta/adapters/datamapper.rb +8 -3
- data/lib/moneta/adapters/dbm.rb +1 -2
- data/lib/moneta/adapters/file.rb +9 -4
- data/lib/moneta/adapters/fog.rb +8 -3
- data/lib/moneta/adapters/gdbm.rb +1 -2
- data/lib/moneta/adapters/hbase.rb +10 -3
- data/lib/moneta/adapters/leveldb.rb +3 -2
- data/lib/moneta/adapters/localmemcache.rb +4 -4
- data/lib/moneta/adapters/lruhash.rb +8 -4
- data/lib/moneta/adapters/memcached/dalli.rb +10 -4
- data/lib/moneta/adapters/memcached/native.rb +9 -4
- data/lib/moneta/adapters/memory.rb +8 -3
- data/lib/moneta/adapters/mongo.rb +7 -3
- data/lib/moneta/adapters/null.rb +8 -1
- data/lib/moneta/adapters/pstore.rb +9 -3
- data/lib/moneta/adapters/redis.rb +10 -4
- data/lib/moneta/adapters/riak.rb +12 -7
- data/lib/moneta/adapters/sdbm.rb +1 -2
- data/lib/moneta/adapters/sequel.rb +9 -3
- data/lib/moneta/adapters/sqlite.rb +10 -4
- data/lib/moneta/adapters/tokyocabinet.rb +2 -2
- data/lib/moneta/builder.rb +11 -7
- data/lib/moneta/cache.rb +16 -6
- data/lib/moneta/expires.rb +12 -6
- data/lib/moneta/lock.rb +0 -2
- data/lib/moneta/logger.rb +0 -2
- data/lib/moneta/mixins.rb +175 -47
- data/lib/moneta/optionmerger.rb +2 -0
- data/lib/moneta/proxy.rb +14 -30
- data/lib/moneta/server.rb +0 -2
- data/lib/moneta/shared.rb +1 -3
- data/lib/moneta/stack.rb +20 -10
- data/lib/moneta/transformer.rb +84 -61
- data/lib/moneta/version.rb +1 -1
- data/lib/rack/moneta_rest.rb +56 -0
- data/moneta.gemspec +1 -1
- data/spec/active_support/cache_moneta_store_spec.rb +4 -4
- data/spec/generate.rb +216 -203
- data/spec/helper.rb +0 -6
- data/spec/moneta/adapter_cassandra_spec.rb +2 -2
- data/spec/moneta/adapter_datamapper_spec.rb +1 -1
- data/spec/moneta/adapter_lruhash_spec.rb +1 -1
- data/spec/moneta/adapter_memcached_dalli_spec.rb +2 -2
- data/spec/moneta/adapter_memcached_native_spec.rb +2 -2
- data/spec/moneta/adapter_memcached_spec.rb +2 -2
- data/spec/moneta/adapter_redis_spec.rb +2 -2
- data/spec/moneta/cache_file_memory_spec.rb +3 -3
- data/spec/moneta/expires_file_spec.rb +4 -4
- data/spec/moneta/expires_memory_spec.rb +2 -2
- data/spec/moneta/optionmerger_spec.rb +6 -6
- data/spec/moneta/shared_spec.rb +1 -1
- data/spec/moneta/simple_client_tcp_spec.rb +1 -1
- data/spec/moneta/transformer_key_marshal_spec.rb +109 -0
- data/spec/moneta/transformer_key_yaml_spec.rb +109 -0
- data/spec/moneta/transformer_marshal_spec.rb +109 -0
- data/spec/moneta/transformer_value_marshal_spec.rb +109 -0
- data/spec/moneta/transformer_value_yaml_spec.rb +109 -0
- data/spec/monetaspecs.rb +14460 -3956
- metadata +16 -6
- data/lib/moneta/base.rb +0 -98
- data/lib/moneta/net.rb +0 -22
data/lib/moneta/adapters/null.rb
CHANGED
@@ -2,26 +2,33 @@ module Moneta
|
|
2
2
|
module Adapters
|
3
3
|
# Null backend which doesn't store anything
|
4
4
|
# @api public
|
5
|
-
class Null
|
5
|
+
class Null
|
6
|
+
include Defaults
|
7
|
+
|
6
8
|
def initialize(options = {})
|
7
9
|
end
|
8
10
|
|
11
|
+
# (see Proxy#key?)
|
9
12
|
def key?(key, options = {})
|
10
13
|
false
|
11
14
|
end
|
12
15
|
|
16
|
+
# (see Proxy#load)
|
13
17
|
def load(key, options = {})
|
14
18
|
nil
|
15
19
|
end
|
16
20
|
|
21
|
+
# (see Proxy#store)
|
17
22
|
def store(key, value, options = {})
|
18
23
|
value
|
19
24
|
end
|
20
25
|
|
26
|
+
# (see Proxy#delete)
|
21
27
|
def delete(key, options = {})
|
22
28
|
nil
|
23
29
|
end
|
24
30
|
|
31
|
+
# (see Proxy#clear)
|
25
32
|
def clear(options = {})
|
26
33
|
self
|
27
34
|
end
|
@@ -4,9 +4,9 @@ module Moneta
|
|
4
4
|
module Adapters
|
5
5
|
# PStore backend
|
6
6
|
# @api public
|
7
|
-
class PStore
|
8
|
-
|
9
|
-
|
7
|
+
class PStore
|
8
|
+
include Defaults
|
9
|
+
|
10
10
|
# @param [Hash] options
|
11
11
|
# @option options [String] :file PStore file
|
12
12
|
def initialize(options = {})
|
@@ -15,22 +15,27 @@ module Moneta
|
|
15
15
|
@pstore = new_store(options)
|
16
16
|
end
|
17
17
|
|
18
|
+
# (see Proxy#key?)
|
18
19
|
def key?(key, options = {})
|
19
20
|
@pstore.transaction(true) { @pstore.root?(key) }
|
20
21
|
end
|
21
22
|
|
23
|
+
# (see Proxy#load)
|
22
24
|
def load(key, options = {})
|
23
25
|
@pstore.transaction(true) { @pstore[key] }
|
24
26
|
end
|
25
27
|
|
28
|
+
# (see Proxy#store)
|
26
29
|
def store(key, value, options = {})
|
27
30
|
@pstore.transaction { @pstore[key] = value }
|
28
31
|
end
|
29
32
|
|
33
|
+
# (see Proxy#delete)
|
30
34
|
def delete(key, options = {})
|
31
35
|
@pstore.transaction { @pstore.delete(key) }
|
32
36
|
end
|
33
37
|
|
38
|
+
# (see Proxy#increment)
|
34
39
|
def increment(key, amount = 1, options = {})
|
35
40
|
@pstore.transaction do
|
36
41
|
value = @pstore[key]
|
@@ -42,6 +47,7 @@ module Moneta
|
|
42
47
|
end
|
43
48
|
end
|
44
49
|
|
50
|
+
# (see Proxy#clear)
|
45
51
|
def clear(options = {})
|
46
52
|
@pstore.transaction do
|
47
53
|
@pstore.roots.each do |key|
|
@@ -4,17 +4,18 @@ module Moneta
|
|
4
4
|
module Adapters
|
5
5
|
# Redis backend
|
6
6
|
# @api public
|
7
|
-
class Redis
|
8
|
-
|
9
|
-
|
7
|
+
class Redis
|
8
|
+
include Defaults
|
9
|
+
|
10
10
|
# @param [Hash] options
|
11
|
-
# @option options [
|
11
|
+
# @option options [Integer] :expires Default expiration time
|
12
12
|
# @option options Other options passed to `Redis#new`
|
13
13
|
def initialize(options = {})
|
14
14
|
@expires = options.delete(:expires)
|
15
15
|
@redis = ::Redis.new(options)
|
16
16
|
end
|
17
17
|
|
18
|
+
# (see Proxy#key?)
|
18
19
|
def key?(key, options = {})
|
19
20
|
if @redis.exists(key)
|
20
21
|
if expires = options[:expires]
|
@@ -26,6 +27,7 @@ module Moneta
|
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
30
|
+
# (see Proxy#load)
|
29
31
|
def load(key, options = {})
|
30
32
|
value = @redis.get(key)
|
31
33
|
if value && (expires = options[:expires])
|
@@ -34,6 +36,7 @@ module Moneta
|
|
34
36
|
value
|
35
37
|
end
|
36
38
|
|
39
|
+
# (see Proxy#store)
|
37
40
|
def store(key, value, options = {})
|
38
41
|
if expires = (options[:expires] || @expires)
|
39
42
|
@redis.setex(key, expires, value)
|
@@ -43,6 +46,7 @@ module Moneta
|
|
43
46
|
value
|
44
47
|
end
|
45
48
|
|
49
|
+
# (see Proxy#delete)
|
46
50
|
def delete(key, options = {})
|
47
51
|
if value = load(key, options)
|
48
52
|
@redis.del(key)
|
@@ -50,6 +54,7 @@ module Moneta
|
|
50
54
|
end
|
51
55
|
end
|
52
56
|
|
57
|
+
# (see Proxy#increment)
|
53
58
|
def increment(key, amount = 1, options = {})
|
54
59
|
value = @redis.incrby(key, amount)
|
55
60
|
expires = (options[:expires] || @expires)
|
@@ -57,6 +62,7 @@ module Moneta
|
|
57
62
|
value
|
58
63
|
end
|
59
64
|
|
65
|
+
# (see Proxy#clear)
|
60
66
|
def clear(options = {})
|
61
67
|
@redis.flushdb
|
62
68
|
self
|
data/lib/moneta/adapters/riak.rb
CHANGED
@@ -7,9 +7,9 @@ module Moneta
|
|
7
7
|
module Adapters
|
8
8
|
# Riak backend
|
9
9
|
# @api public
|
10
|
-
class Riak
|
11
|
-
|
12
|
-
|
10
|
+
class Riak
|
11
|
+
include Defaults
|
12
|
+
|
13
13
|
# @param [Hash] options
|
14
14
|
# @option options [String] :bucket ('moneta') Bucket name
|
15
15
|
# @option options [String] :content_type ('application/octet-stream') Default content type
|
@@ -20,30 +20,35 @@ module Moneta
|
|
20
20
|
@bucket = ::Riak::Client.new(options).bucket(bucket)
|
21
21
|
end
|
22
22
|
|
23
|
+
# (see Proxy#key?)
|
23
24
|
def key?(key, options = {})
|
24
|
-
@bucket.exists?(key, options)
|
25
|
+
@bucket.exists?(key, options.dup)
|
25
26
|
end
|
26
27
|
|
28
|
+
# (see Proxy#load)
|
27
29
|
def load(key, options = {})
|
28
|
-
@bucket.get(key, options).raw_data
|
30
|
+
@bucket.get(key, options.dup).raw_data
|
29
31
|
rescue ::Riak::FailedRequest => ex
|
30
32
|
nil
|
31
33
|
end
|
32
34
|
|
35
|
+
# (see Proxy#delete)
|
33
36
|
def delete(key, options = {})
|
34
37
|
value = load(key, options)
|
35
|
-
@bucket.delete(key, options)
|
38
|
+
@bucket.delete(key, options.dup)
|
36
39
|
value
|
37
40
|
end
|
38
41
|
|
42
|
+
# (see Proxy#store)
|
39
43
|
def store(key, value, options = {})
|
40
44
|
obj = ::Riak::RObject.new(@bucket, key)
|
41
45
|
obj.content_type = options[:content_type] || @content_type
|
42
46
|
obj.raw_data = value
|
43
|
-
obj.store(options)
|
47
|
+
obj.store(options.dup)
|
44
48
|
value
|
45
49
|
end
|
46
50
|
|
51
|
+
# (see Proxy#clear)
|
47
52
|
def clear(options = {})
|
48
53
|
@bucket.keys do |keys|
|
49
54
|
keys.each{ |key| @bucket.delete(key) }
|
data/lib/moneta/adapters/sdbm.rb
CHANGED
@@ -5,8 +5,6 @@ module Moneta
|
|
5
5
|
# SDBM backend
|
6
6
|
# @api public
|
7
7
|
class SDBM < Memory
|
8
|
-
# Constructor
|
9
|
-
#
|
10
8
|
# @param [Hash] options
|
11
9
|
# @option options [String] :file Database file
|
12
10
|
def initialize(options = {})
|
@@ -14,6 +12,7 @@ module Moneta
|
|
14
12
|
@hash = ::SDBM.new(options[:file])
|
15
13
|
end
|
16
14
|
|
15
|
+
# (see Proxy#close)
|
17
16
|
def close
|
18
17
|
@hash.close
|
19
18
|
nil
|
@@ -4,9 +4,9 @@ module Moneta
|
|
4
4
|
module Adapters
|
5
5
|
# Sequel backend
|
6
6
|
# @api public
|
7
|
-
class Sequel
|
8
|
-
|
9
|
-
|
7
|
+
class Sequel
|
8
|
+
include Defaults
|
9
|
+
|
10
10
|
# @param [Hash] options
|
11
11
|
# @option options [String] :db Sequel database
|
12
12
|
# @option options [String/Symbol] :table (:moneta) Table name
|
@@ -22,15 +22,18 @@ module Moneta
|
|
22
22
|
@table = @db[table]
|
23
23
|
end
|
24
24
|
|
25
|
+
# (see Proxy#key?)
|
25
26
|
def key?(key, options = {})
|
26
27
|
@table[:k => key] != nil
|
27
28
|
end
|
28
29
|
|
30
|
+
# (see Proxy#load)
|
29
31
|
def load(key, options = {})
|
30
32
|
record = @table[:k => key]
|
31
33
|
record && record[:v]
|
32
34
|
end
|
33
35
|
|
36
|
+
# (see Proxy#store)
|
34
37
|
def store(key, value, options = {})
|
35
38
|
@db.transaction do
|
36
39
|
if key?(key, options)
|
@@ -42,6 +45,7 @@ module Moneta
|
|
42
45
|
end
|
43
46
|
end
|
44
47
|
|
48
|
+
# (see Proxy#increment)
|
45
49
|
def increment(key, amount = 1, options = {})
|
46
50
|
@db.transaction do
|
47
51
|
locked_table = @table.for_update
|
@@ -59,6 +63,7 @@ module Moneta
|
|
59
63
|
end
|
60
64
|
end
|
61
65
|
|
66
|
+
# (see Proxy#delete)
|
62
67
|
def delete(key, options = {})
|
63
68
|
@db.transaction do
|
64
69
|
if value = load(key, options)
|
@@ -68,6 +73,7 @@ module Moneta
|
|
68
73
|
end
|
69
74
|
end
|
70
75
|
|
76
|
+
# (see Proxy#clear)
|
71
77
|
def clear(options = {})
|
72
78
|
@table.delete
|
73
79
|
self
|
@@ -4,11 +4,10 @@ module Moneta
|
|
4
4
|
module Adapters
|
5
5
|
# Sqlite3 backend
|
6
6
|
# @api public
|
7
|
-
class Sqlite
|
8
|
-
include
|
7
|
+
class Sqlite
|
8
|
+
include Defaults
|
9
|
+
include IncrementSupport
|
9
10
|
|
10
|
-
# Constructor
|
11
|
-
#
|
12
11
|
# @param [Hash] options
|
13
12
|
# @option options [String] :file Database file
|
14
13
|
# @option options [String] :table ('moneta') Table name
|
@@ -24,35 +23,42 @@ module Moneta
|
|
24
23
|
@clear = @db.prepare("delete from #{table}")]
|
25
24
|
end
|
26
25
|
|
26
|
+
# (see Proxy#key?)
|
27
27
|
def key?(key, options = {})
|
28
28
|
!@select.execute!(key).empty?
|
29
29
|
end
|
30
30
|
|
31
|
+
# (see Proxy#load)
|
31
32
|
def load(key, options = {})
|
32
33
|
rows = @select.execute!(key)
|
33
34
|
rows.empty? ? nil : rows.first.first
|
34
35
|
end
|
35
36
|
|
37
|
+
# (see Proxy#store)
|
36
38
|
def store(key, value, options = {})
|
37
39
|
@replace.execute!(key, value)
|
38
40
|
value
|
39
41
|
end
|
40
42
|
|
43
|
+
# (see Proxy#delete)
|
41
44
|
def delete(key, options = {})
|
42
45
|
value = load(key, options)
|
43
46
|
@delete.execute!(key)
|
44
47
|
value
|
45
48
|
end
|
46
49
|
|
50
|
+
# (see Proxy#increment)
|
47
51
|
def increment(key, amount = 1, options = {})
|
48
52
|
@db.transaction(:exclusive) { return super }
|
49
53
|
end
|
50
54
|
|
55
|
+
# (see Proxy#clear)
|
51
56
|
def clear(options = {})
|
52
57
|
@clear.execute!
|
53
58
|
self
|
54
59
|
end
|
55
60
|
|
61
|
+
# (see Proxy#close)
|
56
62
|
def close
|
57
63
|
@stmts.each {|s| s.close }
|
58
64
|
@db.close
|
@@ -5,8 +5,6 @@ module Moneta
|
|
5
5
|
# TokyoCabinet backend
|
6
6
|
# @api public
|
7
7
|
class TokyoCabinet < Memory
|
8
|
-
# Constructor
|
9
|
-
#
|
10
8
|
# @param [Hash] options
|
11
9
|
# @option options [String] :file Database file
|
12
10
|
# @option options [Symbol] :type (:hdb) Database type (:bdb and :hdb possible)
|
@@ -22,6 +20,7 @@ module Moneta
|
|
22
20
|
end or raise @hash.errmsg(@hash.ecode)
|
23
21
|
end
|
24
22
|
|
23
|
+
# (see Proxy#delete)
|
25
24
|
def delete(key, options = {})
|
26
25
|
value = load(key, options)
|
27
26
|
if value
|
@@ -30,6 +29,7 @@ module Moneta
|
|
30
29
|
end
|
31
30
|
end
|
32
31
|
|
32
|
+
# (see Proxy#close)
|
33
33
|
def close
|
34
34
|
@hash.close
|
35
35
|
nil
|
data/lib/moneta/builder.rb
CHANGED
@@ -2,7 +2,15 @@ module Moneta
|
|
2
2
|
# Builder implements the DSL to build a stack of Moneta store proxies
|
3
3
|
# @api private
|
4
4
|
class Builder
|
5
|
-
|
5
|
+
def initialize(&block)
|
6
|
+
raise ArgumentError, 'No block given' unless block_given?
|
7
|
+
@proxies = []
|
8
|
+
instance_eval(&block)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Build proxy stack
|
12
|
+
# @return [Object] Generated Moneta proxy stack
|
13
|
+
# @api public
|
6
14
|
def build
|
7
15
|
klass, options, block = @proxies.first
|
8
16
|
@proxies[1..-1].inject([klass.new(options, &block)]) do |stores, proxy|
|
@@ -11,16 +19,11 @@ module Moneta
|
|
11
19
|
end
|
12
20
|
end
|
13
21
|
|
14
|
-
def initialize(&block)
|
15
|
-
raise ArgumentError, 'No block given' unless block_given?
|
16
|
-
@proxies = []
|
17
|
-
instance_eval(&block)
|
18
|
-
end
|
19
|
-
|
20
22
|
# Add proxy to stack
|
21
23
|
#
|
22
24
|
# @param [Symbol or Class] proxy Name of proxy class or proxy class
|
23
25
|
# @param [Hash] options Options hash
|
26
|
+
# @api public
|
24
27
|
def use(proxy, options = {}, &block)
|
25
28
|
proxy = Moneta.const_get(proxy) if Symbol === proxy
|
26
29
|
raise ArgumentError, 'You must give a Class or a Symbol' unless Class === proxy
|
@@ -32,6 +35,7 @@ module Moneta
|
|
32
35
|
#
|
33
36
|
# @param [Symbol] name Name of adapter class
|
34
37
|
# @param [Hash] options Options hash
|
38
|
+
# @api public
|
35
39
|
def adapter(name, options = {}, &block)
|
36
40
|
use(Adapters.const_get(name), options, &block)
|
37
41
|
end
|
data/lib/moneta/cache.rb
CHANGED
@@ -10,7 +10,9 @@ module Moneta
|
|
10
10
|
# end
|
11
11
|
#
|
12
12
|
# @api public
|
13
|
-
class Cache
|
13
|
+
class Cache
|
14
|
+
include Defaults
|
15
|
+
|
14
16
|
# @api private
|
15
17
|
class DSL
|
16
18
|
def initialize(options, &block)
|
@@ -18,12 +20,14 @@ module Moneta
|
|
18
20
|
instance_eval(&block)
|
19
21
|
end
|
20
22
|
|
23
|
+
# @api public
|
21
24
|
def backend(store = nil, &block)
|
22
25
|
raise 'Backend already set' if @backend
|
23
26
|
raise ArgumentError, 'Only argument or block allowed' if store && block
|
24
27
|
@backend = store || Moneta.build(&block)
|
25
28
|
end
|
26
29
|
|
30
|
+
# @api public
|
27
31
|
def cache(store = nil, &block)
|
28
32
|
raise 'Cache already set' if @cache
|
29
33
|
raise ArgumentError, 'Only argument or block allowed' if store && block
|
@@ -41,41 +45,47 @@ module Moneta
|
|
41
45
|
@cache, @backend = DSL.new(options, &block).result
|
42
46
|
end
|
43
47
|
|
48
|
+
# (see Proxy#key?)
|
44
49
|
def key?(key, options = {})
|
45
50
|
@cache.key?(key, options) || @backend.key?(key, options)
|
46
51
|
end
|
47
52
|
|
53
|
+
# (see Proxy#load)
|
48
54
|
def load(key, options = {})
|
49
55
|
value = @cache.load(key, options)
|
50
|
-
|
56
|
+
if value == nil
|
51
57
|
value = @backend.load(key, options)
|
52
|
-
@cache.store(key, value, options) if value
|
58
|
+
@cache.store(key, value, options) if value != nil
|
53
59
|
end
|
54
60
|
value
|
55
61
|
end
|
56
62
|
|
63
|
+
# (see Proxy#store)
|
57
64
|
def store(key, value, options = {})
|
58
65
|
@cache.store(key, value, options)
|
59
66
|
@backend.store(key, value, options)
|
60
67
|
end
|
61
68
|
|
69
|
+
# (see Proxy#increment)
|
62
70
|
def increment(key, amount = 1, options = {})
|
63
|
-
|
64
|
-
@
|
65
|
-
value
|
71
|
+
@cache.delete(key, options)
|
72
|
+
@backend.increment(key, amount, options)
|
66
73
|
end
|
67
74
|
|
75
|
+
# (see Proxy#delete)
|
68
76
|
def delete(key, options = {})
|
69
77
|
@cache.delete(key, options)
|
70
78
|
@backend.delete(key, options)
|
71
79
|
end
|
72
80
|
|
81
|
+
# (see Proxy#clear)
|
73
82
|
def clear(options = {})
|
74
83
|
@cache.clear(options)
|
75
84
|
@backend.clear(options)
|
76
85
|
self
|
77
86
|
end
|
78
87
|
|
88
|
+
# (see Proxy#close)
|
79
89
|
def close
|
80
90
|
@cache.close
|
81
91
|
@backend.close
|