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/file.rb
CHANGED
@@ -4,11 +4,10 @@ module Moneta
|
|
4
4
|
module Adapters
|
5
5
|
# Filesystem backend
|
6
6
|
# @api public
|
7
|
-
class File
|
8
|
-
include
|
7
|
+
class File
|
8
|
+
include Defaults
|
9
|
+
include IncrementSupport
|
9
10
|
|
10
|
-
# Constructor
|
11
|
-
#
|
12
11
|
# @param [Hash] options
|
13
12
|
# @option options [String] :dir Directory where files will be stored
|
14
13
|
def initialize(options = {})
|
@@ -17,15 +16,18 @@ module Moneta
|
|
17
16
|
raise "#{@dir} is not a directory" unless ::File.directory?(@dir)
|
18
17
|
end
|
19
18
|
|
19
|
+
# (see Proxy#key?)
|
20
20
|
def key?(key, options = {})
|
21
21
|
::File.exist?(store_path(key))
|
22
22
|
end
|
23
23
|
|
24
|
+
# (see Proxy#load)
|
24
25
|
def load(key, options = {})
|
25
26
|
::File.read(store_path(key))
|
26
27
|
rescue Errno::ENOENT
|
27
28
|
end
|
28
29
|
|
30
|
+
# (see Proxy#store)
|
29
31
|
def store(key, value, options = {})
|
30
32
|
path = store_path(key)
|
31
33
|
temp_file = ::File.join(@dir, "value-#{$$}-#{Thread.current.object_id}")
|
@@ -39,6 +41,7 @@ module Moneta
|
|
39
41
|
value
|
40
42
|
end
|
41
43
|
|
44
|
+
# (see Proxy#delete)
|
42
45
|
def delete(key, options = {})
|
43
46
|
value = load(key, options)
|
44
47
|
::File.unlink(store_path(key))
|
@@ -46,6 +49,7 @@ module Moneta
|
|
46
49
|
rescue Errno::ENOENT
|
47
50
|
end
|
48
51
|
|
52
|
+
# (see Proxy#clear)
|
49
53
|
def clear(options = {})
|
50
54
|
temp_dir = "#{@dir}-#{$$}-#{Thread.current.object_id}"
|
51
55
|
::File.rename(@dir, temp_dir)
|
@@ -56,6 +60,7 @@ module Moneta
|
|
56
60
|
self
|
57
61
|
end
|
58
62
|
|
63
|
+
# (see Proxy#increment)
|
59
64
|
def increment(key, amount = 1, options = {})
|
60
65
|
lock(key) { super }
|
61
66
|
end
|
data/lib/moneta/adapters/fog.rb
CHANGED
@@ -4,9 +4,9 @@ module Moneta
|
|
4
4
|
module Adapters
|
5
5
|
# Fog backend (Cloud storage services)
|
6
6
|
# @api public
|
7
|
-
class Fog
|
8
|
-
|
9
|
-
|
7
|
+
class Fog
|
8
|
+
include Defaults
|
9
|
+
|
10
10
|
# @param [Hash] options
|
11
11
|
# @option options [String] :dir Fog directory
|
12
12
|
# @option options Other options passed to `Fog::Storage#new`
|
@@ -16,15 +16,18 @@ module Moneta
|
|
16
16
|
@directory = storage.directories.create(:key => dir)
|
17
17
|
end
|
18
18
|
|
19
|
+
# (see Proxy#key?)
|
19
20
|
def key?(key, options = {})
|
20
21
|
@directory.files.head(key) != nil
|
21
22
|
end
|
22
23
|
|
24
|
+
# (see Proxy#load)
|
23
25
|
def load(key, options = {})
|
24
26
|
value = @directory.files.get(key)
|
25
27
|
value && value.body
|
26
28
|
end
|
27
29
|
|
30
|
+
# (see Proxy#delete)
|
28
31
|
def delete(key, options = {})
|
29
32
|
if value = @directory.files.get(key)
|
30
33
|
body = value.body
|
@@ -33,11 +36,13 @@ module Moneta
|
|
33
36
|
end
|
34
37
|
end
|
35
38
|
|
39
|
+
# (see Proxy#store)
|
36
40
|
def store(key, value, options = {})
|
37
41
|
@directory.files.create(:key => key, :body => value)
|
38
42
|
value
|
39
43
|
end
|
40
44
|
|
45
|
+
# (see Proxy#clear)
|
41
46
|
def clear(options = {})
|
42
47
|
@directory.files.all.each do |file|
|
43
48
|
file.destroy
|
data/lib/moneta/adapters/gdbm.rb
CHANGED
@@ -5,8 +5,6 @@ module Moneta
|
|
5
5
|
# GDBM backend
|
6
6
|
# @api public
|
7
7
|
class GDBM < 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 = ::GDBM.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
|
# HBase thrift backend
|
6
6
|
# @api public
|
7
|
-
class HBase
|
8
|
-
|
9
|
-
|
7
|
+
class HBase
|
8
|
+
include Defaults
|
9
|
+
|
10
10
|
# @param [Hash] options
|
11
11
|
# @option options [String] :host ('127.0.0.1') Server host name
|
12
12
|
# @option options [Integer] :port (9090) Server port
|
@@ -25,20 +25,24 @@ module Moneta
|
|
25
25
|
@column = "#{cf}:#{options[:column]}"
|
26
26
|
end
|
27
27
|
|
28
|
+
# (see Proxy#key?)
|
28
29
|
def key?(key, options = {})
|
29
30
|
@table.get(key, @column).first != nil
|
30
31
|
end
|
31
32
|
|
33
|
+
# (see Proxy#load)
|
32
34
|
def load(key, options = {})
|
33
35
|
cell = @table.get(key, @column).first
|
34
36
|
cell && unpack(cell.value)
|
35
37
|
end
|
36
38
|
|
39
|
+
# (see Proxy#store)
|
37
40
|
def store(key, value, options = {})
|
38
41
|
@table.mutate_row(key, @column => pack(value))
|
39
42
|
value
|
40
43
|
end
|
41
44
|
|
45
|
+
# (see Proxy#increment)
|
42
46
|
def increment(key, amount = 1, options = {})
|
43
47
|
result = @table.atomic_increment(key, @column, amount)
|
44
48
|
# HACK: Throw error if applied to invalid value
|
@@ -49,6 +53,7 @@ module Moneta
|
|
49
53
|
result
|
50
54
|
end
|
51
55
|
|
56
|
+
# (see Proxy#delete)
|
52
57
|
def delete(key, options = {})
|
53
58
|
if value = load(key, options)
|
54
59
|
@table.delete_row(key)
|
@@ -56,6 +61,7 @@ module Moneta
|
|
56
61
|
end
|
57
62
|
end
|
58
63
|
|
64
|
+
# (see Proxy#clear)
|
59
65
|
def clear(options = {})
|
60
66
|
@table.create_scanner do |row|
|
61
67
|
@table.delete_row(row.row)
|
@@ -63,6 +69,7 @@ module Moneta
|
|
63
69
|
self
|
64
70
|
end
|
65
71
|
|
72
|
+
# (see Proxy#close)
|
66
73
|
def close
|
67
74
|
@db.close
|
68
75
|
nil
|
@@ -5,8 +5,6 @@ module Moneta
|
|
5
5
|
# LevelDB backend
|
6
6
|
# @api public
|
7
7
|
class LevelDB < Memory
|
8
|
-
# Constructor
|
9
|
-
#
|
10
8
|
# @param [Hash] options
|
11
9
|
# @option options [String] :dir - Database path
|
12
10
|
# @option options All other options passed to `LevelDB::DB#new`
|
@@ -15,15 +13,18 @@ module Moneta
|
|
15
13
|
@hash = ::LevelDB::DB.new(options[:dir])
|
16
14
|
end
|
17
15
|
|
16
|
+
# (see Proxy#key?)
|
18
17
|
def key?(key, options = {})
|
19
18
|
@hash.includes?(key)
|
20
19
|
end
|
21
20
|
|
21
|
+
# (see Proxy#clear)
|
22
22
|
def clear(options = {})
|
23
23
|
@hash.each {|k,v| delete(k, options) }
|
24
24
|
self
|
25
25
|
end
|
26
26
|
|
27
|
+
# (see Proxy#close)
|
27
28
|
def close
|
28
29
|
@hash.close
|
29
30
|
nil
|
@@ -4,11 +4,10 @@ module Moneta
|
|
4
4
|
module Adapters
|
5
5
|
# LocalMemCache backend
|
6
6
|
# @api public
|
7
|
-
class LocalMemCache
|
8
|
-
include
|
7
|
+
class LocalMemCache
|
8
|
+
include Defaults
|
9
|
+
include HashAdapter
|
9
10
|
|
10
|
-
# Constructor
|
11
|
-
#
|
12
11
|
# @param [Hash] options
|
13
12
|
# @option options [String] :file Database file
|
14
13
|
def initialize(options = {})
|
@@ -16,6 +15,7 @@ module Moneta
|
|
16
15
|
@hash = ::LocalMemCache.new(:filename => options[:file])
|
17
16
|
end
|
18
17
|
|
18
|
+
# (see Proxy#delete)
|
19
19
|
def delete(key, options = {})
|
20
20
|
value = load(key, options)
|
21
21
|
@hash.delete(key)
|
@@ -5,11 +5,10 @@ module Moneta
|
|
5
5
|
# Based on Hashery::LRUHash but simpler and measures memory usage instead of hash size.
|
6
6
|
#
|
7
7
|
# @api public
|
8
|
-
class LRUHash
|
9
|
-
include
|
8
|
+
class LRUHash
|
9
|
+
include Defaults
|
10
|
+
include IncrementSupport
|
10
11
|
|
11
|
-
# Constructor
|
12
|
-
#
|
13
12
|
# @param [Hash] options
|
14
13
|
# @option options [Integer] :max_size (1024000) Maximum total byte size of hash values
|
15
14
|
def initialize(options = {})
|
@@ -17,10 +16,12 @@ module Moneta
|
|
17
16
|
clear
|
18
17
|
end
|
19
18
|
|
19
|
+
# (see Proxy#key?)
|
20
20
|
def key?(key, options = {})
|
21
21
|
@entry.key?(key)
|
22
22
|
end
|
23
23
|
|
24
|
+
# (see Proxy#load)
|
24
25
|
def load(key, options = {})
|
25
26
|
if entry = @entry[key]
|
26
27
|
entry.insert_after(@list)
|
@@ -28,6 +29,7 @@ module Moneta
|
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
32
|
+
# (see Proxy#store)
|
31
33
|
def store(key, value, options = {})
|
32
34
|
if entry = @entry[key]
|
33
35
|
@size -= entry.value.bytesize
|
@@ -42,6 +44,7 @@ module Moneta
|
|
42
44
|
value
|
43
45
|
end
|
44
46
|
|
47
|
+
# (see Proxy#delete)
|
45
48
|
def delete(key, options = {})
|
46
49
|
if entry = @entry.delete(key)
|
47
50
|
@size -= entry.value.bytesize
|
@@ -50,6 +53,7 @@ module Moneta
|
|
50
53
|
end
|
51
54
|
end
|
52
55
|
|
56
|
+
# (see Proxy#clear)
|
53
57
|
def clear(options = {})
|
54
58
|
@entry, @size = {}, 0
|
55
59
|
@list = Entry.new
|
@@ -4,12 +4,12 @@ module Moneta
|
|
4
4
|
module Adapters
|
5
5
|
# Memcached backend (using gem dalli)
|
6
6
|
# @api public
|
7
|
-
class MemcachedDalli
|
8
|
-
|
9
|
-
|
7
|
+
class MemcachedDalli
|
8
|
+
include Defaults
|
9
|
+
|
10
10
|
# @param [Hash] options
|
11
11
|
# @option options [String] :server ('127.0.0.1:11211') Memcached server
|
12
|
-
# @option options [
|
12
|
+
# @option options [Integer] :expires Default expiration time
|
13
13
|
# @option options Other options passed to `Dalli::Client#new`
|
14
14
|
def initialize(options = {})
|
15
15
|
options[:expires_in] = options.delete(:expires)
|
@@ -17,6 +17,7 @@ module Moneta
|
|
17
17
|
@cache = ::Dalli::Client.new(server, options)
|
18
18
|
end
|
19
19
|
|
20
|
+
# (see Proxy#load)
|
20
21
|
def load(key, options = {})
|
21
22
|
value = @cache.get(key)
|
22
23
|
if value && options.include?(:expires)
|
@@ -26,17 +27,20 @@ module Moneta
|
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
30
|
+
# (see Proxy#store)
|
29
31
|
def store(key, value, options = {})
|
30
32
|
@cache.set(key, value, options[:expires], :raw => true)
|
31
33
|
value
|
32
34
|
end
|
33
35
|
|
36
|
+
# (see Proxy#delete)
|
34
37
|
def delete(key, options = {})
|
35
38
|
value = @cache.get(key)
|
36
39
|
@cache.delete(key)
|
37
40
|
value
|
38
41
|
end
|
39
42
|
|
43
|
+
# (see Proxy#increment)
|
40
44
|
def increment(key, amount = 1, options = {})
|
41
45
|
# FIXME: There is a Dalli bug, load(key) returns a wrong value after increment
|
42
46
|
# therefore we set default = nil and create the counter manually
|
@@ -53,11 +57,13 @@ module Moneta
|
|
53
57
|
end
|
54
58
|
end
|
55
59
|
|
60
|
+
# (see Proxy#clear)
|
56
61
|
def clear(options = {})
|
57
62
|
@cache.flush_all
|
58
63
|
self
|
59
64
|
end
|
60
65
|
|
66
|
+
# (see Proxy#close)
|
61
67
|
def close
|
62
68
|
@cache.close
|
63
69
|
nil
|
@@ -4,13 +4,13 @@ module Moneta
|
|
4
4
|
module Adapters
|
5
5
|
# Memcached backend (using gem memcached)
|
6
6
|
# @api public
|
7
|
-
class MemcachedNative
|
8
|
-
|
9
|
-
|
7
|
+
class MemcachedNative
|
8
|
+
include Defaults
|
9
|
+
|
10
10
|
# @param [Hash] options
|
11
11
|
# @option options [String] :server ('127.0.0.1:11211') Memcached server
|
12
12
|
# @option options [String] :namespace Key namespace
|
13
|
-
# @option options [
|
13
|
+
# @option options [Integer] :expires (604800) Default expiration time
|
14
14
|
# @option options Other options passed to `Memcached#new`
|
15
15
|
def initialize(options = {})
|
16
16
|
server = options.delete(:server) || '127.0.0.1:11211'
|
@@ -22,6 +22,7 @@ module Moneta
|
|
22
22
|
@cache = ::Memcached.new(server, options)
|
23
23
|
end
|
24
24
|
|
25
|
+
# (see Proxy#load)
|
25
26
|
def load(key, options = {})
|
26
27
|
value = @cache.get(key, false)
|
27
28
|
if value && options.include?(:expires)
|
@@ -32,12 +33,14 @@ module Moneta
|
|
32
33
|
rescue ::Memcached::NotFound
|
33
34
|
end
|
34
35
|
|
36
|
+
# (see Proxy#store)
|
35
37
|
def store(key, value, options = {})
|
36
38
|
# TTL must be Fixnum
|
37
39
|
@cache.set(key, value, options[:expires] || @expires, false)
|
38
40
|
value
|
39
41
|
end
|
40
42
|
|
43
|
+
# (see Proxy#delete)
|
41
44
|
def delete(key, options = {})
|
42
45
|
value = @cache.get(key, false)
|
43
46
|
@cache.delete(key)
|
@@ -45,6 +48,7 @@ module Moneta
|
|
45
48
|
rescue ::Memcached::NotFound
|
46
49
|
end
|
47
50
|
|
51
|
+
# (see Proxy#increment)
|
48
52
|
def increment(key, amount = 1, options = {})
|
49
53
|
result = if amount >= 0
|
50
54
|
@cache.increment(key, amount)
|
@@ -62,6 +66,7 @@ module Moneta
|
|
62
66
|
amount
|
63
67
|
end
|
64
68
|
|
69
|
+
# (see Proxy#clear)
|
65
70
|
def clear(options = {})
|
66
71
|
@cache.flush
|
67
72
|
self
|
@@ -2,9 +2,14 @@ module Moneta
|
|
2
2
|
module Adapters
|
3
3
|
# Memory backend using a hash to store the entries
|
4
4
|
# @api public
|
5
|
-
class Memory
|
6
|
-
include
|
7
|
-
include
|
5
|
+
class Memory
|
6
|
+
include Defaults
|
7
|
+
include HashAdapter
|
8
|
+
include IncrementSupport
|
9
|
+
|
10
|
+
def initialize(options = {})
|
11
|
+
@hash = {}
|
12
|
+
end
|
8
13
|
end
|
9
14
|
end
|
10
15
|
end
|
@@ -4,9 +4,9 @@ module Moneta
|
|
4
4
|
module Adapters
|
5
5
|
# MongoDB backend
|
6
6
|
# @api public
|
7
|
-
class Mongo
|
8
|
-
|
9
|
-
|
7
|
+
class Mongo
|
8
|
+
include Defaults
|
9
|
+
|
10
10
|
# @param [Hash] options
|
11
11
|
# @option options [String] :collection ('moneta') MongoDB collection name
|
12
12
|
# @option options [String] :host ('127.0.0.1') MongoDB server host
|
@@ -21,17 +21,20 @@ module Moneta
|
|
21
21
|
@collection = connection.db(db).collection(collection)
|
22
22
|
end
|
23
23
|
|
24
|
+
# (see Proxy#load)
|
24
25
|
def load(key, options = {})
|
25
26
|
value = @collection.find_one('_id' => ::BSON::Binary.new(key))
|
26
27
|
value && value['value'].to_s
|
27
28
|
end
|
28
29
|
|
30
|
+
# (see Proxy#delete)
|
29
31
|
def delete(key, options = {})
|
30
32
|
value = load(key, options)
|
31
33
|
@collection.remove('_id' => ::BSON::Binary.new(key)) if value
|
32
34
|
value
|
33
35
|
end
|
34
36
|
|
37
|
+
# (see Proxy#store)
|
35
38
|
def store(key, value, options = {})
|
36
39
|
key = ::BSON::Binary.new(key)
|
37
40
|
@collection.update({ '_id' => key },
|
@@ -40,6 +43,7 @@ module Moneta
|
|
40
43
|
value
|
41
44
|
end
|
42
45
|
|
46
|
+
# (see Proxy#clear)
|
43
47
|
def clear(options = {})
|
44
48
|
@collection.remove
|
45
49
|
self
|