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.
@@ -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,14 @@
1
+ require "moneta/adapters/fog"
2
+
3
+ module Moneta
4
+ module Adapters
5
+ class Rackspace < Fog
6
+
7
+ def initialize(options)
8
+ options[:cloud] = ::Fog::Rackspace::Files
9
+ super
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -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,14 @@
1
+ require "moneta/adapters/fog"
2
+
3
+ module Moneta
4
+ module Adapters
5
+ class S3 < Fog
6
+
7
+ def initialize(options)
8
+ options[:cloud] = ::Fog::AWS::S3
9
+ super
10
+ end
11
+
12
+ end
13
+ end
14
+ 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