thoughtless-moneta 0.6.0.1 → 0.6.0.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/README +6 -1
- data/Rakefile +1 -1
- data/lib/moneta.rb +17 -64
- data/lib/moneta/adapters/basic_file.rb +84 -0
- data/lib/moneta/adapters/couch.rb +51 -0
- data/lib/moneta/adapters/datamapper.rb +76 -0
- data/lib/moneta/adapters/file.rb +52 -0
- data/lib/moneta/adapters/fog.rb +62 -0
- data/lib/moneta/adapters/lmc.rb +40 -0
- data/lib/moneta/adapters/memcache.rb +49 -0
- data/lib/moneta/adapters/memory.rb +23 -0
- data/lib/moneta/adapters/mongodb.rb +52 -0
- data/lib/moneta/adapters/rackspace.rb +14 -0
- data/lib/moneta/adapters/redis.rb +41 -0
- data/lib/moneta/adapters/s3.rb +14 -0
- data/lib/moneta/adapters/sdbm.rb +34 -0
- data/lib/moneta/adapters/tokyo_cabinet.rb +51 -0
- data/lib/moneta/adapters/tyrant.rb +45 -0
- data/lib/moneta/adapters/xattr.rb +50 -0
- data/lib/moneta/adapters/yaml.rb +53 -0
- data/lib/moneta/builder.rb +72 -0
- metadata +20 -18
- data/lib/moneta/basic_file.rb +0 -113
- data/lib/moneta/berkeley.rb +0 -53
- data/lib/moneta/couch.rb +0 -63
- data/lib/moneta/datamapper.rb +0 -117
- data/lib/moneta/file.rb +0 -91
- data/lib/moneta/lmc.rb +0 -52
- data/lib/moneta/memcache.rb +0 -53
- data/lib/moneta/memory.rb +0 -11
- data/lib/moneta/mongodb.rb +0 -58
- data/lib/moneta/redis.rb +0 -49
- data/lib/moneta/rufus.rb +0 -41
- data/lib/moneta/s3.rb +0 -162
- data/lib/moneta/sdbm.rb +0 -33
- data/lib/moneta/tyrant.rb +0 -58
- data/lib/moneta/xattr.rb +0 -58
- data/lib/moneta/yaml.rb +0 -92
@@ -0,0 +1,40 @@
|
|
1
|
+
begin
|
2
|
+
require "localmemcache"
|
3
|
+
rescue LoadError
|
4
|
+
puts "You need the localmemcache gem to use the LMC moneta store"
|
5
|
+
exit
|
6
|
+
end
|
7
|
+
|
8
|
+
module Moneta
|
9
|
+
module Adapters
|
10
|
+
class LMC
|
11
|
+
include Defaults
|
12
|
+
|
13
|
+
def initialize(options = {})
|
14
|
+
@hash = LocalMemCache.new(:filename => options[:filename])
|
15
|
+
end
|
16
|
+
|
17
|
+
def [](key)
|
18
|
+
deserialize(@hash[key_for(key)])
|
19
|
+
end
|
20
|
+
|
21
|
+
def store(key, value, *)
|
22
|
+
@hash[key_for(key)] = serialize(value)
|
23
|
+
end
|
24
|
+
|
25
|
+
def clear(*)
|
26
|
+
@hash.clear
|
27
|
+
end
|
28
|
+
|
29
|
+
def key?(key, *)
|
30
|
+
@hash.keys.include?(key_for(key))
|
31
|
+
end
|
32
|
+
|
33
|
+
def delete(key, *)
|
34
|
+
value = self[key]
|
35
|
+
@hash.delete(key_for(key))
|
36
|
+
value
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
begin
|
2
|
+
require "memcached"
|
3
|
+
MemCache = Memcached
|
4
|
+
rescue LoadError
|
5
|
+
require "memcache"
|
6
|
+
rescue
|
7
|
+
puts "You need either the `memcached` or `memcache-client` gem to use the Memcache moneta store"
|
8
|
+
exit
|
9
|
+
end
|
10
|
+
|
11
|
+
module Moneta
|
12
|
+
module Adapters
|
13
|
+
class Memcache
|
14
|
+
include Moneta::Defaults
|
15
|
+
|
16
|
+
def initialize(options = {})
|
17
|
+
@cache = ::MemCache.new(options.delete(:server), options)
|
18
|
+
end
|
19
|
+
|
20
|
+
def key?(key, *)
|
21
|
+
!self[key].nil?
|
22
|
+
end
|
23
|
+
|
24
|
+
def [](key)
|
25
|
+
deserialize(@cache.get(key_for(key)))
|
26
|
+
rescue MemCache::NotFound
|
27
|
+
end
|
28
|
+
|
29
|
+
def delete(key, *)
|
30
|
+
value = self[key]
|
31
|
+
@cache.delete(key_for(key)) if value
|
32
|
+
value
|
33
|
+
end
|
34
|
+
|
35
|
+
def store(key, value, *)
|
36
|
+
@cache.set(key_for(key), serialize(value))
|
37
|
+
end
|
38
|
+
|
39
|
+
def clear(*)
|
40
|
+
@cache.flush
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
def key_for(key)
|
45
|
+
[super].pack("m").strip
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Moneta
|
2
|
+
module Adapters
|
3
|
+
class Memory < Hash
|
4
|
+
include Moneta::Defaults
|
5
|
+
|
6
|
+
def [](key)
|
7
|
+
deserialize(super(key_for(key)))
|
8
|
+
end
|
9
|
+
|
10
|
+
def key?(key, *)
|
11
|
+
super(key_for(key))
|
12
|
+
end
|
13
|
+
|
14
|
+
def store(key, value, *args)
|
15
|
+
super(key_for(key), serialize(value), *args)
|
16
|
+
end
|
17
|
+
|
18
|
+
def delete(key, *args)
|
19
|
+
deserialize(super(key_for(key), *args))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
begin
|
2
|
+
require "mongo"
|
3
|
+
rescue LoadError
|
4
|
+
puts "You need the mongo gem to use the MongoDB moneta store"
|
5
|
+
exit
|
6
|
+
end
|
7
|
+
|
8
|
+
module Moneta
|
9
|
+
module Adapters
|
10
|
+
class MongoDB
|
11
|
+
include Moneta::Defaults
|
12
|
+
|
13
|
+
def initialize(options = {})
|
14
|
+
options = {
|
15
|
+
:host => ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost',
|
16
|
+
:port => ENV['MONGO_RUBY_DRIVER_PORT'] || Mongo::Connection::DEFAULT_PORT,
|
17
|
+
:db => 'cache',
|
18
|
+
:collection => 'cache'
|
19
|
+
}.update(options)
|
20
|
+
conn = Mongo::Connection.new(options[:host], options[:port])
|
21
|
+
@cache = conn.db(options[:db]).collection(options[:collection])
|
22
|
+
end
|
23
|
+
|
24
|
+
def key?(key, *)
|
25
|
+
!!self[key]
|
26
|
+
end
|
27
|
+
|
28
|
+
def [](key)
|
29
|
+
res = @cache.find_one('_id' => key_for(key))
|
30
|
+
res && deserialize(res['data'])
|
31
|
+
end
|
32
|
+
|
33
|
+
def delete(key, *)
|
34
|
+
string_key = key_for(key)
|
35
|
+
|
36
|
+
value = self[key]
|
37
|
+
@cache.remove('_id' => string_key) if value
|
38
|
+
value
|
39
|
+
end
|
40
|
+
|
41
|
+
def store(key, value, *)
|
42
|
+
key = key_for(key)
|
43
|
+
@cache.insert({ '_id' => key, 'data' => serialize(value) })
|
44
|
+
end
|
45
|
+
|
46
|
+
def clear(*)
|
47
|
+
@cache.remove
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
begin
|
2
|
+
require "redis"
|
3
|
+
rescue LoadError
|
4
|
+
puts "You need the redis gem to use the Redis store"
|
5
|
+
exit
|
6
|
+
end
|
7
|
+
|
8
|
+
module Moneta
|
9
|
+
module Adapters
|
10
|
+
class Redis
|
11
|
+
include Defaults
|
12
|
+
|
13
|
+
def initialize(options = {})
|
14
|
+
@cache = ::Redis.new(options)
|
15
|
+
end
|
16
|
+
|
17
|
+
def key?(key, *)
|
18
|
+
!@cache[key_for(key)].nil?
|
19
|
+
end
|
20
|
+
|
21
|
+
def [](key)
|
22
|
+
deserialize(@cache.get(key_for(key)))
|
23
|
+
end
|
24
|
+
|
25
|
+
def delete(key, *)
|
26
|
+
string_key = key_for(key)
|
27
|
+
value = self[key]
|
28
|
+
@cache.del(string_key) if value
|
29
|
+
value
|
30
|
+
end
|
31
|
+
|
32
|
+
def store(key, value, *)
|
33
|
+
@cache.set(key_for(key), serialize(value))
|
34
|
+
end
|
35
|
+
|
36
|
+
def clear(*)
|
37
|
+
@cache.flushdb
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require "sdbm"
|
2
|
+
|
3
|
+
module Moneta
|
4
|
+
module Adapters
|
5
|
+
class SDBM < ::SDBM
|
6
|
+
include Moneta::Defaults
|
7
|
+
|
8
|
+
def initialize(options = {})
|
9
|
+
raise "No :file options specified" unless file = options[:file]
|
10
|
+
super(file)
|
11
|
+
end
|
12
|
+
|
13
|
+
def [](key)
|
14
|
+
if val = super(key_for(key))
|
15
|
+
deserialize(val)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def store(key, value, *)
|
20
|
+
super(key_for(key), serialize(value))
|
21
|
+
end
|
22
|
+
|
23
|
+
def key?(key, *)
|
24
|
+
super(key_for(key))
|
25
|
+
end
|
26
|
+
|
27
|
+
def delete(key, *)
|
28
|
+
if val = super(key_for(key))
|
29
|
+
deserialize(val)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
begin
|
2
|
+
require "tokyocabinet"
|
3
|
+
rescue LoadError
|
4
|
+
puts "You need the tokyocabinet gem to use the tokyo cabinet store"
|
5
|
+
exit
|
6
|
+
end
|
7
|
+
|
8
|
+
module Moneta
|
9
|
+
module Adapters
|
10
|
+
class TokyoCabinet
|
11
|
+
include Defaults
|
12
|
+
|
13
|
+
def initialize(options = {})
|
14
|
+
file = options[:file]
|
15
|
+
@cache = ::TokyoCabinet::HDB.new
|
16
|
+
unless @cache.open(file, ::TokyoCabinet::HDB::OWRITER | ::TokyoCabinet::HDB::OCREAT)
|
17
|
+
puts @cache.errmsg(@cache.ecode)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def [](key)
|
22
|
+
deserialize(@cache[key_for(key)])
|
23
|
+
end
|
24
|
+
|
25
|
+
def store(key, value, *)
|
26
|
+
@cache[key_for(key)] = serialize(value)
|
27
|
+
end
|
28
|
+
|
29
|
+
def key?(key, *)
|
30
|
+
!!self[key]
|
31
|
+
end
|
32
|
+
|
33
|
+
def delete(key, *)
|
34
|
+
value = self[key]
|
35
|
+
|
36
|
+
if value
|
37
|
+
@cache.delete(key_for(key))
|
38
|
+
value
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def clear(*)
|
43
|
+
@cache.clear
|
44
|
+
end
|
45
|
+
|
46
|
+
def close
|
47
|
+
@cache.close
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
begin
|
2
|
+
require "tokyotyrant"
|
3
|
+
rescue LoadError
|
4
|
+
puts "You need the tokyotyrant gem to use the Tyrant moneta store"
|
5
|
+
exit
|
6
|
+
end
|
7
|
+
|
8
|
+
module Moneta
|
9
|
+
module Adapters
|
10
|
+
class Tyrant
|
11
|
+
include Defaults
|
12
|
+
|
13
|
+
def initialize(options = {})
|
14
|
+
@hash = ::TokyoTyrant::RDB.new
|
15
|
+
|
16
|
+
if !@hash.open(options[:host], options[:port])
|
17
|
+
puts @hash.errmsg(@hash.ecode)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def key?(key, *)
|
22
|
+
!!self[key]
|
23
|
+
end
|
24
|
+
|
25
|
+
def [](key)
|
26
|
+
deserialize(@hash[key_for(key)])
|
27
|
+
end
|
28
|
+
|
29
|
+
def store(key, value, *)
|
30
|
+
@hash.put(key_for(key), serialize(value))
|
31
|
+
end
|
32
|
+
|
33
|
+
def clear(*)
|
34
|
+
@hash.clear
|
35
|
+
end
|
36
|
+
|
37
|
+
def delete(key, *)
|
38
|
+
if value = self[key]
|
39
|
+
@hash.delete(key_for(key))
|
40
|
+
value
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
begin
|
2
|
+
require "xattr"
|
3
|
+
rescue LoadError
|
4
|
+
puts "You need the xattr gem to use the Xattr moneta store"
|
5
|
+
exit
|
6
|
+
end
|
7
|
+
require "fileutils"
|
8
|
+
|
9
|
+
module Moneta
|
10
|
+
module Adapters
|
11
|
+
class Xattr
|
12
|
+
include Defaults
|
13
|
+
|
14
|
+
def initialize(options = {})
|
15
|
+
file = options[:file]
|
16
|
+
@hash = ::Xattr.new(file)
|
17
|
+
FileUtils.mkdir_p(::File.dirname(file))
|
18
|
+
FileUtils.touch(file)
|
19
|
+
end
|
20
|
+
|
21
|
+
def key?(key, *)
|
22
|
+
@hash.list.include?(key_for(key))
|
23
|
+
end
|
24
|
+
|
25
|
+
def [](key)
|
26
|
+
string_key = key_for(key)
|
27
|
+
return nil unless key?(string_key)
|
28
|
+
Marshal.load(@hash.get(string_key))
|
29
|
+
end
|
30
|
+
|
31
|
+
def store(key, value, *)
|
32
|
+
@hash.set(key_for(key), Marshal.dump(value))
|
33
|
+
end
|
34
|
+
|
35
|
+
def delete(key, *)
|
36
|
+
return nil unless key?(key)
|
37
|
+
value = self[key]
|
38
|
+
@hash.remove(key_for(key))
|
39
|
+
value
|
40
|
+
end
|
41
|
+
|
42
|
+
def clear(*)
|
43
|
+
@hash.list.each do |item|
|
44
|
+
@hash.remove(item)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require "yaml"
|
2
|
+
require "fileutils"
|
3
|
+
|
4
|
+
module Moneta
|
5
|
+
module Adapters
|
6
|
+
class YAML
|
7
|
+
include Moneta::Defaults
|
8
|
+
|
9
|
+
def initialize(options = {})
|
10
|
+
@file = File.expand_path(options[:path])
|
11
|
+
unless ::File.exists?(@file)
|
12
|
+
File.open(@file, "w") { |file| file << {}.to_yaml }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def key?(key, *)
|
17
|
+
yaml.has_key?(key_for(key))
|
18
|
+
end
|
19
|
+
|
20
|
+
def [](key)
|
21
|
+
string_key = key_for(key)
|
22
|
+
yaml[string_key]['value'] if yaml.key?(string_key)
|
23
|
+
end
|
24
|
+
|
25
|
+
def store(key, value, *)
|
26
|
+
hash = yaml
|
27
|
+
(hash[key_for(key)] ||= {})['value'] = value
|
28
|
+
save(hash)
|
29
|
+
end
|
30
|
+
|
31
|
+
def delete(key, *)
|
32
|
+
hash = yaml
|
33
|
+
value = self[key_for(key)]
|
34
|
+
hash.delete(key_for(key))
|
35
|
+
save(hash)
|
36
|
+
value
|
37
|
+
end
|
38
|
+
|
39
|
+
def clear(*)
|
40
|
+
save
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
def yaml
|
45
|
+
::YAML.load_file(@file)
|
46
|
+
end
|
47
|
+
|
48
|
+
def save(hash = {})
|
49
|
+
::File.open(@file, "w") { |file| file << hash.to_yaml }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|