juno 0.1.1 → 0.2.0
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/.gitignore +2 -1
- data/.travis.yml +6 -0
- data/Gemfile +16 -9
- data/README.md +92 -34
- data/Rakefile +23 -5
- data/benchmarks/run.rb +19 -22
- data/juno.gemspec +0 -3
- data/lib/juno/adapters/activerecord.rb +58 -0
- data/lib/juno/adapters/cassandra.rb +47 -0
- data/lib/juno/adapters/couch.rb +43 -0
- data/lib/juno/adapters/datamapper.rb +64 -0
- data/lib/juno/adapters/dbm.rb +17 -0
- data/lib/juno/adapters/file.rb +58 -0
- data/lib/juno/adapters/fog.rb +42 -0
- data/lib/juno/adapters/gdbm.rb +17 -0
- data/lib/juno/adapters/localmemcache.rb +18 -0
- data/lib/juno/adapters/memcached.rb +11 -0
- data/lib/juno/adapters/memcached_dalli.rb +46 -0
- data/lib/juno/adapters/memcached_native.rb +47 -0
- data/lib/juno/adapters/memory.rb +30 -0
- data/lib/juno/adapters/mongo.rb +43 -0
- data/lib/juno/adapters/null.rb +28 -0
- data/lib/juno/adapters/pstore.rb +51 -0
- data/lib/juno/adapters/redis.rb +43 -0
- data/lib/juno/adapters/riak.rb +46 -0
- data/lib/juno/adapters/sdbm.rb +27 -0
- data/lib/juno/adapters/sequel.rb +50 -0
- data/lib/juno/adapters/sqlite.rb +52 -0
- data/lib/juno/adapters/tokyocabinet.rb +33 -0
- data/lib/juno/adapters/yaml.rb +13 -0
- data/lib/juno/base.rb +11 -89
- data/lib/juno/builder.rb +30 -0
- data/lib/juno/cache.rb +64 -0
- data/lib/juno/expires.rb +6 -10
- data/lib/juno/proxy.rb +62 -3
- data/lib/juno/stack.rb +27 -11
- data/lib/juno/transformer.rb +106 -0
- data/lib/juno/version.rb +1 -1
- data/lib/juno.rb +81 -29
- data/spec/adapter_activerecord_spec.rb +41 -0
- data/spec/adapter_cassandra_spec.rb +27 -0
- data/spec/adapter_couch_spec.rb +27 -0
- data/spec/adapter_datamapper_spec.rb +61 -0
- data/spec/adapter_dbm_spec.rb +27 -0
- data/spec/adapter_file_spec.rb +27 -0
- data/spec/adapter_fog_spec.rb +35 -0
- data/spec/adapter_gdbm_spec.rb +27 -0
- data/spec/adapter_localmemcache_spec.rb +27 -0
- data/spec/adapter_memcached_dalli_spec.rb +28 -0
- data/spec/adapter_memcached_native_spec.rb +28 -0
- data/spec/adapter_memcached_spec.rb +28 -0
- data/spec/adapter_memory_spec.rb +42 -0
- data/spec/adapter_mongo_spec.rb +27 -0
- data/spec/adapter_pstore_spec.rb +30 -0
- data/spec/adapter_redis_spec.rb +28 -0
- data/spec/adapter_riak_spec.rb +31 -0
- data/spec/adapter_sdbm_spec.rb +27 -0
- data/spec/adapter_sequel_spec.rb +27 -0
- data/spec/adapter_sqlite_spec.rb +27 -0
- data/spec/adapter_tokyocabinet_spec.rb +27 -0
- data/spec/adapter_yaml_spec.rb +30 -0
- data/spec/cache_file_memory_spec.rb +50 -0
- data/spec/cache_memory_null_spec.rb +39 -0
- data/spec/expires_file_spec.rb +82 -0
- data/spec/expires_memory_spec.rb +59 -0
- data/spec/generate.rb +736 -0
- data/spec/helper.rb +39 -0
- data/spec/junospecs.rb +1540 -0
- data/spec/null_adapter_spec.rb +33 -0
- data/spec/proxy_expires_memory_spec.rb +63 -0
- data/spec/proxy_redis_spec.rb +38 -0
- data/spec/simple_activerecord_spec.rb +52 -0
- data/spec/simple_cassandra_spec.rb +53 -0
- data/spec/simple_couch_spec.rb +52 -0
- data/spec/simple_datamapper_spec.rb +54 -0
- data/spec/simple_datamapper_with_repository_spec.rb +54 -0
- data/spec/simple_dbm_spec.rb +52 -0
- data/spec/simple_file_spec.rb +52 -0
- data/spec/simple_fog_spec.rb +60 -0
- data/spec/simple_gdbm_spec.rb +52 -0
- data/spec/simple_hashfile_spec.rb +52 -0
- data/spec/simple_localmemcache_spec.rb +52 -0
- data/spec/simple_memcached_dalli_spec.rb +53 -0
- data/spec/simple_memcached_native_spec.rb +53 -0
- data/spec/simple_memcached_spec.rb +53 -0
- data/spec/simple_memory_spec.rb +52 -0
- data/spec/simple_mongo_spec.rb +52 -0
- data/spec/simple_null_spec.rb +43 -0
- data/spec/simple_pstore_spec.rb +52 -0
- data/spec/simple_redis_spec.rb +53 -0
- data/spec/simple_riak_spec.rb +56 -0
- data/spec/simple_sdbm_spec.rb +52 -0
- data/spec/simple_sequel_spec.rb +52 -0
- data/spec/simple_sqlite_spec.rb +52 -0
- data/spec/simple_tokyocabinet_spec.rb +52 -0
- data/spec/simple_yaml_spec.rb +52 -0
- data/spec/stack_file_memory_spec.rb +43 -0
- data/spec/stack_memory_file_spec.rb +42 -0
- data/spec/transformer_bson_spec.rb +44 -0
- data/spec/transformer_json_spec.rb +44 -0
- data/spec/transformer_marshal_base64_spec.rb +60 -0
- data/spec/transformer_marshal_escape_spec.rb +60 -0
- data/spec/transformer_marshal_md5_spec.rb +60 -0
- data/spec/transformer_marshal_md5_spread_spec.rb +60 -0
- data/spec/transformer_msgpack_spec.rb +44 -0
- data/spec/transformer_yaml_spec.rb +59 -0
- metadata +164 -108
- data/lib/juno/activerecord.rb +0 -55
- data/lib/juno/cassandra.rb +0 -45
- data/lib/juno/couch.rb +0 -43
- data/lib/juno/datamapper.rb +0 -63
- data/lib/juno/dbm.rb +0 -15
- data/lib/juno/file.rb +0 -62
- data/lib/juno/fog.rb +0 -48
- data/lib/juno/gdbm.rb +0 -15
- data/lib/juno/hashfile.rb +0 -12
- data/lib/juno/localmemcache.rb +0 -16
- data/lib/juno/memcached.rb +0 -7
- data/lib/juno/memcached_dalli.rb +0 -55
- data/lib/juno/memcached_native.rb +0 -56
- data/lib/juno/memory.rb +0 -7
- data/lib/juno/mongodb.rb +0 -43
- data/lib/juno/null.rb +0 -23
- data/lib/juno/pstore.rb +0 -49
- data/lib/juno/redis.rb +0 -46
- data/lib/juno/riak.rb +0 -45
- data/lib/juno/sdbm.rb +0 -15
- data/lib/juno/sequel.rb +0 -48
- data/lib/juno/sqlite.rb +0 -50
- data/lib/juno/tokyocabinet.rb +0 -36
- data/lib/juno/yaml.rb +0 -9
- data/test/helper.rb +0 -212
- data/test/test_activerecord.rb +0 -33
- data/test/test_cassandra.rb +0 -13
- data/test/test_couch.rb +0 -13
- data/test/test_datamapper.rb +0 -64
- data/test/test_dbm.rb +0 -13
- data/test/test_expires.rb +0 -9
- data/test/test_file.rb +0 -9
- data/test/test_fog.rb +0 -17
- data/test/test_gdbm.rb +0 -13
- data/test/test_hashfile.rb +0 -9
- data/test/test_localmemcache.rb +0 -13
- data/test/test_memcached.rb +0 -14
- data/test/test_memcached_dalli.rb +0 -14
- data/test/test_memcached_native.rb +0 -14
- data/test/test_memory.rb +0 -9
- data/test/test_mongodb.rb +0 -13
- data/test/test_null.rb +0 -9
- data/test/test_proxy.rb +0 -9
- data/test/test_pstore.rb +0 -9
- data/test/test_redis.rb +0 -13
- data/test/test_riak.rb +0 -13
- data/test/test_sdbm.rb +0 -13
- data/test/test_sequel.rb +0 -13
- data/test/test_sqlite.rb +0 -13
- data/test/test_stack.rb +0 -10
- data/test/test_tokyocabinet.rb +0 -13
- data/test/test_yaml.rb +0 -9
- data/unsupported/test_tokyotyrant.rb +0 -13
- data/unsupported/tokyotyrant.rb +0 -29
data/lib/juno/fog.rb
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
require 'fog'
|
|
2
|
-
|
|
3
|
-
module Juno
|
|
4
|
-
class Fog < Base
|
|
5
|
-
def initialize(options = {})
|
|
6
|
-
raise 'No option :dir specified' unless dir = options.delete(:dir)
|
|
7
|
-
storage = ::Fog::Storage.new(options)
|
|
8
|
-
@directory = storage.directories.create(:key => dir)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def key?(key, options = {})
|
|
12
|
-
!!@directory.files.head(key_for(key))
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def [](key)
|
|
16
|
-
if value = get(key)
|
|
17
|
-
deserialize(value.body)
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def delete(key, options = {})
|
|
22
|
-
value = get(key)
|
|
23
|
-
if value
|
|
24
|
-
body = deserialize(value.body)
|
|
25
|
-
value.destroy
|
|
26
|
-
body
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def store(key, value, options = {})
|
|
31
|
-
@directory.files.create(:key => key_for(key), :body => serialize(value))
|
|
32
|
-
value
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def clear(options = {})
|
|
36
|
-
@directory.files.all.each do |file|
|
|
37
|
-
file.destroy
|
|
38
|
-
end
|
|
39
|
-
nil
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
private
|
|
43
|
-
|
|
44
|
-
def get(key)
|
|
45
|
-
@directory.files.get(key_for(key))
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
data/lib/juno/gdbm.rb
DELETED
data/lib/juno/hashfile.rb
DELETED
data/lib/juno/localmemcache.rb
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
require 'localmemcache'
|
|
2
|
-
|
|
3
|
-
module Juno
|
|
4
|
-
class LocalMemCache < Base
|
|
5
|
-
def initialize(options = {})
|
|
6
|
-
raise 'No option :file specified' unless options[:file]
|
|
7
|
-
@store = ::LocalMemCache.new(:filename => options[:file])
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def delete(key, options = {})
|
|
11
|
-
value = self[key]
|
|
12
|
-
@store.delete(key_for(key))
|
|
13
|
-
value
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
data/lib/juno/memcached.rb
DELETED
data/lib/juno/memcached_dalli.rb
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
require 'dalli'
|
|
2
|
-
|
|
3
|
-
module Juno
|
|
4
|
-
class MemcachedDalli < Base
|
|
5
|
-
def initialize(options = {})
|
|
6
|
-
server = options.delete(:server) || 'localhost:11211'
|
|
7
|
-
@cache = ::Dalli::Client.new(server, options)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def key?(key, options = {})
|
|
11
|
-
!!@cache.get(key_for(key))
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def fetch(key, value = nil, options = {})
|
|
15
|
-
result = super
|
|
16
|
-
if result && options.include?(:expires)
|
|
17
|
-
store(key, result, options)
|
|
18
|
-
else
|
|
19
|
-
result
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def [](key)
|
|
24
|
-
deserialize(@cache.get(key_for(key)))
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def store(key, value, options = {})
|
|
28
|
-
@cache.set(key_for(key), serialize(value), options[:expires])
|
|
29
|
-
value
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def delete(key, options = {})
|
|
33
|
-
key = key_for(key)
|
|
34
|
-
value = deserialize(@cache.get(key))
|
|
35
|
-
@cache.delete(key)
|
|
36
|
-
value
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def clear(options = {})
|
|
40
|
-
@cache.flush_all
|
|
41
|
-
nil
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def close
|
|
45
|
-
@cache.close
|
|
46
|
-
nil
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
private
|
|
50
|
-
|
|
51
|
-
def key_for(key)
|
|
52
|
-
[super].pack('m').strip
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
require 'memcached'
|
|
2
|
-
|
|
3
|
-
module Juno
|
|
4
|
-
class MemcachedNative < Base
|
|
5
|
-
def initialize(options = {})
|
|
6
|
-
server = options.delete(:server) || 'localhost:11211'
|
|
7
|
-
@cache = ::Memcached.new(server, options)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def key?(key, options = {})
|
|
11
|
-
@cache.get(key_for(key), false)
|
|
12
|
-
true
|
|
13
|
-
rescue ::Memcached::NotFound
|
|
14
|
-
false
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def fetch(key, value = nil, options = {})
|
|
18
|
-
result = super
|
|
19
|
-
if result && options.include?(:expires)
|
|
20
|
-
store(key, result, options)
|
|
21
|
-
else
|
|
22
|
-
result
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def [](key)
|
|
27
|
-
deserialize(@cache.get(key_for(key), false))
|
|
28
|
-
rescue ::Memcached::NotFound
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def delete(key, options = {})
|
|
32
|
-
key = key_for(key)
|
|
33
|
-
value = deserialize(@cache.get(key, false))
|
|
34
|
-
@cache.delete(key)
|
|
35
|
-
value
|
|
36
|
-
rescue ::Memcached::NotFound
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def store(key, value, options = {})
|
|
40
|
-
ttl = options[:expires] || ::Memcached::DEFAULTS[:default_ttl]
|
|
41
|
-
@cache.set(key_for(key), serialize(value), ttl, false)
|
|
42
|
-
value
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def clear(options = {})
|
|
46
|
-
@cache.flush
|
|
47
|
-
nil
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
private
|
|
51
|
-
|
|
52
|
-
def key_for(key)
|
|
53
|
-
[super].pack('m').strip
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
data/lib/juno/memory.rb
DELETED
data/lib/juno/mongodb.rb
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
require 'mongo'
|
|
2
|
-
require 'uri'
|
|
3
|
-
|
|
4
|
-
module Juno
|
|
5
|
-
class MongoDB < Base
|
|
6
|
-
def initialize(options = {})
|
|
7
|
-
collection = options.delete(:collection) || 'juno'
|
|
8
|
-
host = options.delete(:host) || 'localhost'
|
|
9
|
-
port = options.delete(:port) || Mongo::Connection::DEFAULT_PORT
|
|
10
|
-
db = options.delete(:db) || 'juno'
|
|
11
|
-
connection = Mongo::Connection.new(host, port, options)
|
|
12
|
-
@store = connection.db(db).collection(collection)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def key?(key, options = {})
|
|
16
|
-
!!self[key]
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def [](key)
|
|
20
|
-
value = @store.find_one('_id' => key_for(key))
|
|
21
|
-
value ? deserialize(value['data']) : nil
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def delete(key, options = {})
|
|
25
|
-
value = self[key]
|
|
26
|
-
@store.remove('_id' => key_for(key)) if value
|
|
27
|
-
value
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def store(key, value, options = {})
|
|
31
|
-
key = key_for(key)
|
|
32
|
-
@store.update({ '_id' => key },
|
|
33
|
-
{ '_id' => key, 'data' => serialize(value) },
|
|
34
|
-
{ :upsert => true })
|
|
35
|
-
value
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def clear(options = {})
|
|
39
|
-
@store.remove
|
|
40
|
-
nil
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
data/lib/juno/null.rb
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
module Juno
|
|
2
|
-
class Null < Base
|
|
3
|
-
def key?(key, options = {})
|
|
4
|
-
false
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
def [](key)
|
|
8
|
-
nil
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def store(key, value, options = {})
|
|
12
|
-
value
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def delete(key, options = {})
|
|
16
|
-
nil
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def clear(options = {})
|
|
20
|
-
nil
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
data/lib/juno/pstore.rb
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
require 'pstore'
|
|
2
|
-
|
|
3
|
-
module Juno
|
|
4
|
-
class PStore < Base
|
|
5
|
-
def initialize(options = {})
|
|
6
|
-
raise 'No option :file specified' unless options[:file]
|
|
7
|
-
FileUtils.mkpath(::File.dirname(options[:file]))
|
|
8
|
-
@store = new_store(options)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def key?(key, options = {})
|
|
12
|
-
@store.transaction(true) { @store.root?(key_for(key)) }
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def [](key)
|
|
16
|
-
@store.transaction(true) { @store[key_for(key)] }
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def delete(key, options = {})
|
|
20
|
-
@store.transaction { @store.delete(key_for(key)) }
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def store(key, value, options = {})
|
|
24
|
-
@store.transaction { @store[key_for(key)] = value }
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def clear(options = {})
|
|
28
|
-
@store.transaction do
|
|
29
|
-
@store.roots.each do |key|
|
|
30
|
-
@store.delete(key)
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
nil
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
protected
|
|
37
|
-
|
|
38
|
-
if RUBY_VERSION > '1.9'
|
|
39
|
-
def new_store(options)
|
|
40
|
-
# Create a thread-safe pstore by default
|
|
41
|
-
::PStore.new(options[:file], options.include?(:thread_safe) ? options[:thread_safe] : true)
|
|
42
|
-
end
|
|
43
|
-
else
|
|
44
|
-
def new_store(options)
|
|
45
|
-
::PStore.new(options[:file])
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
data/lib/juno/redis.rb
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
require 'redis'
|
|
2
|
-
|
|
3
|
-
module Juno
|
|
4
|
-
class Redis < Base
|
|
5
|
-
def initialize(options = {})
|
|
6
|
-
@store = ::Redis.new(options)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def key?(key, options = {})
|
|
10
|
-
@store.exists(key_for(key))
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def fetch(key, value = nil, options = {})
|
|
14
|
-
result = super
|
|
15
|
-
if result && expires = options[:expires]
|
|
16
|
-
@store.expire(key_for(key), expires)
|
|
17
|
-
end
|
|
18
|
-
result
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def [](key)
|
|
22
|
-
deserialize(@store.get(key_for(key)))
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def delete(key, options = {})
|
|
26
|
-
string_key = key_for(key)
|
|
27
|
-
value = self[key]
|
|
28
|
-
@store.del(string_key) if value
|
|
29
|
-
value
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def store(key, value, options = {})
|
|
33
|
-
key = key_for(key)
|
|
34
|
-
@store.set(key, serialize(value))
|
|
35
|
-
if expires = options[:expires]
|
|
36
|
-
@store.expire(key, expires)
|
|
37
|
-
end
|
|
38
|
-
value
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def clear(options = {})
|
|
42
|
-
@store.flushdb
|
|
43
|
-
nil
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
data/lib/juno/riak.rb
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# Copyright: 2011 TMX Credit
|
|
2
|
-
# Author: Potapov Sergey (aka Blake)
|
|
3
|
-
|
|
4
|
-
require 'ripple'
|
|
5
|
-
|
|
6
|
-
module Juno
|
|
7
|
-
class Riak < Base
|
|
8
|
-
def initialize(options = {})
|
|
9
|
-
bucket_name = options.delete(:bucket) || 'juno'
|
|
10
|
-
client = ::Riak::Client.new(options)
|
|
11
|
-
@bucket = client.bucket(bucket_name)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def key?(key, options = {})
|
|
15
|
-
!!self[key]
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def [](key)
|
|
19
|
-
deserialize(@bucket[key_for(key)].data)
|
|
20
|
-
rescue ::Riak::HTTPFailedRequest => err
|
|
21
|
-
nil
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def delete(key, options = {})
|
|
25
|
-
value = self[key]
|
|
26
|
-
@bucket.delete(key_for(key))
|
|
27
|
-
value
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def store(key, value, options = {})
|
|
31
|
-
obj = ::Riak::RObject.new(@bucket, key_for(key))
|
|
32
|
-
obj.content_type = 'text/plain'
|
|
33
|
-
obj.data = serialize(value)
|
|
34
|
-
obj.store
|
|
35
|
-
value
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def clear(options = {})
|
|
39
|
-
@bucket.keys(:reload => true) do |keys|
|
|
40
|
-
keys.each{|key| @bucket.delete(key) }
|
|
41
|
-
end
|
|
42
|
-
nil
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
data/lib/juno/sdbm.rb
DELETED
data/lib/juno/sequel.rb
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
require 'sequel'
|
|
2
|
-
|
|
3
|
-
module Juno
|
|
4
|
-
class Sequel < Base
|
|
5
|
-
def initialize(options = {})
|
|
6
|
-
raise 'No option :db specified' unless db = options.delete(:db)
|
|
7
|
-
@table = options.delete(:table) || :juno
|
|
8
|
-
@db = ::Sequel.connect(db, options)
|
|
9
|
-
@db.create_table?(@table) do
|
|
10
|
-
primary_key :k
|
|
11
|
-
blob :k
|
|
12
|
-
blob :v
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def key?(key, options = {})
|
|
17
|
-
!!sequel_table[:k => key_for(key)]
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def [](key)
|
|
21
|
-
result = sequel_table[:k => key_for(key)]
|
|
22
|
-
result ? deserialize(result[:v]) : nil
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def store(key, value, options = {})
|
|
26
|
-
sequel_table.insert(:k => key_for(key), :v => serialize(value))
|
|
27
|
-
value
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def delete(key, options = {})
|
|
31
|
-
if value = self[key]
|
|
32
|
-
sequel_table.filter(:k => key_for(key)).delete
|
|
33
|
-
value
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def clear(options = {})
|
|
38
|
-
sequel_table.delete
|
|
39
|
-
nil
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
private
|
|
43
|
-
|
|
44
|
-
def sequel_table
|
|
45
|
-
@sequel_table ||= @db[@table]
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
data/lib/juno/sqlite.rb
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
require 'sqlite3'
|
|
2
|
-
|
|
3
|
-
module Juno
|
|
4
|
-
class Sqlite < Base
|
|
5
|
-
def initialize(options = {})
|
|
6
|
-
raise 'No option :file specified' unless options[:file]
|
|
7
|
-
table = options[:table] || 'juno'
|
|
8
|
-
@db = ::SQLite3::Database.new(options[:file])
|
|
9
|
-
@db.execute("create table if not exists #{table} (key string primary key, value string)")
|
|
10
|
-
@select = @db.prepare("select value from #{table} where key = ?")
|
|
11
|
-
@insert = @db.prepare("insert into #{table} values (?, ?)")
|
|
12
|
-
@delete = @db.prepare("delete from #{table} where key = ?")
|
|
13
|
-
@clear = @db.prepare("delete from #{table}")
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def key?(key, options = {})
|
|
17
|
-
!@select.execute!(key_for(key)).empty?
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def [](key)
|
|
21
|
-
rows = @select.execute!(key_for(key))
|
|
22
|
-
rows.empty? ? nil : deserialize(rows.first.first)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def store(key, value, options = {})
|
|
26
|
-
@insert.execute!(key_for(key), serialize(value))
|
|
27
|
-
value
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def delete(key, options = {})
|
|
31
|
-
value = self[key]
|
|
32
|
-
@delete.execute!(key_for(key))
|
|
33
|
-
value
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def clear(options = {})
|
|
37
|
-
@clear.execute!
|
|
38
|
-
nil
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def close
|
|
42
|
-
@select.close
|
|
43
|
-
@insert.close
|
|
44
|
-
@delete.close
|
|
45
|
-
@clear.close
|
|
46
|
-
@db.close
|
|
47
|
-
nil
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
data/lib/juno/tokyocabinet.rb
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
require 'tokyocabinet'
|
|
2
|
-
|
|
3
|
-
module Juno
|
|
4
|
-
class TokyoCabinet < Base
|
|
5
|
-
def initialize(options = {})
|
|
6
|
-
file = options[:file]
|
|
7
|
-
raise 'No option :file specified' unless options[:file]
|
|
8
|
-
@store = ::TokyoCabinet::HDB.new
|
|
9
|
-
unless @store.open(file, ::TokyoCabinet::HDB::OWRITER | ::TokyoCabinet::HDB::OCREAT)
|
|
10
|
-
raise @store.errmsg(@store.ecode)
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def key?(key, options = {})
|
|
15
|
-
!!self[key]
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def delete(key, options = {})
|
|
19
|
-
value = self[key]
|
|
20
|
-
if value
|
|
21
|
-
@store.delete(key_for(key))
|
|
22
|
-
value
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def clear(options = {})
|
|
27
|
-
@store.clear
|
|
28
|
-
nil
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def close
|
|
32
|
-
@store.close
|
|
33
|
-
nil
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|