dkastner-moneta 0.7.0 → 1.0.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 +3 -0
- data/Gemfile +3 -0
- data/README +52 -1
- data/Rakefile +8 -55
- data/SPEC.markdown +99 -0
- data/benchmarks/various.rb +234 -0
- data/dkastner-moneta.gemspec +55 -0
- data/lib/moneta/adapters/active_record.rb +57 -0
- data/lib/moneta/adapters/memcache.rb +5 -4
- data/lib/moneta/adapters/pstore.rb +1 -1
- data/lib/moneta/adapters/yaml.rb +2 -2
- data/lib/moneta/monetas.rb +67 -0
- data/lib/moneta/version.rb +3 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/spec/moneta_active_record_spec.rb +21 -0
- data/spec/moneta_basic_file_spec.rb +62 -0
- data/spec/moneta_couch_spec.rb +17 -0
- data/spec/moneta_datamapper_spec.rb +77 -0
- data/spec/moneta_file_spec.rb +23 -0
- data/spec/moneta_lmc_spec.rb +26 -0
- data/spec/moneta_memcache_spec.rb +17 -0
- data/spec/moneta_memory_spec.rb +18 -0
- data/spec/moneta_mongodb_spec.rb +39 -0
- data/spec/moneta_pstore_spec.rb +25 -0
- data/spec/moneta_rackspace_spec.rb +21 -0
- data/spec/moneta_redis_spec.rb +15 -0
- data/spec/moneta_s3_spec.rb +21 -0
- data/spec/moneta_sdbm_spec.rb +23 -0
- data/spec/moneta_tokyo_cabinet_spec.rb +19 -0
- data/spec/moneta_tyrant_spec.rb +15 -0
- data/spec/moneta_xattr_spec.rb +25 -0
- data/spec/moneta_yaml_spec.rb +25 -0
- data/spec/shared.rb +126 -0
- data/spec/spec_helper.rb +7 -0
- metadata +119 -30
- data/TODO +0 -4
@@ -0,0 +1,67 @@
|
|
1
|
+
module Moneta
|
2
|
+
# A meta-store that is backed by one or more Moneta stores.
|
3
|
+
# Read operations select a random store, write operations write to all stores.
|
4
|
+
class Monetas
|
5
|
+
def initialize(options = {})
|
6
|
+
@caches = options[:stores] || raise("You must provide the :stores options")
|
7
|
+
end
|
8
|
+
|
9
|
+
module Implementation
|
10
|
+
def key?(key)
|
11
|
+
read_cache.key?(key)
|
12
|
+
end
|
13
|
+
|
14
|
+
def has_key?(key)
|
15
|
+
key?(key)
|
16
|
+
end
|
17
|
+
|
18
|
+
def [](key)
|
19
|
+
read_cache[key]
|
20
|
+
end
|
21
|
+
|
22
|
+
def fetch(key, value = nil)
|
23
|
+
value ||= block_given? ? yield(key) : default # TODO: Shouldn't yield if key is present?
|
24
|
+
read_cache[key] || value
|
25
|
+
end
|
26
|
+
|
27
|
+
def []=(key, value)
|
28
|
+
@caches.map do |cache|
|
29
|
+
cache[key] = value
|
30
|
+
end.first
|
31
|
+
end
|
32
|
+
|
33
|
+
def delete(key)
|
34
|
+
@caches.map do |cache|
|
35
|
+
cache.delete(key)
|
36
|
+
end.first
|
37
|
+
end
|
38
|
+
|
39
|
+
def store(*args)
|
40
|
+
@caches.map do |cache|
|
41
|
+
cache.store(*args)
|
42
|
+
end.first
|
43
|
+
end
|
44
|
+
|
45
|
+
def clear(*args)
|
46
|
+
@caches.map do |cache|
|
47
|
+
cache.clear(*args)
|
48
|
+
end.first
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Unimplemented
|
53
|
+
module Expiration
|
54
|
+
def update_key(key, options)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
include Implementation
|
59
|
+
include Expiration
|
60
|
+
|
61
|
+
protected
|
62
|
+
|
63
|
+
def read_cache
|
64
|
+
@caches[rand(@caches.size)]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/script/destroy
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rubigen'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rubigen'
|
9
|
+
end
|
10
|
+
require 'rubigen/scripts/destroy'
|
11
|
+
|
12
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
13
|
+
RubiGen::Base.use_component_sources! [:newgem_simple, :test_unit]
|
14
|
+
RubiGen::Scripts::Destroy.new.run(ARGV)
|
data/script/generate
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rubigen'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rubigen'
|
9
|
+
end
|
10
|
+
require 'rubigen/scripts/generate'
|
11
|
+
|
12
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
13
|
+
RubiGen::Base.use_component_sources! [:newgem_simple, :test_unit]
|
14
|
+
RubiGen::Scripts::Generate.new.run(ARGV)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
require 'moneta/adapters/active_record'
|
4
|
+
|
5
|
+
if defined?(ActiveRecord)
|
6
|
+
describe 'Moneta::ActiveRecord' do
|
7
|
+
before(:each) do
|
8
|
+
@cache = Moneta::ActiveRecord.new(:connection => {
|
9
|
+
:adapter => 'sqlite3',
|
10
|
+
:database => 'reports_test.sqlite3'
|
11
|
+
})
|
12
|
+
@cache.migrate
|
13
|
+
@cache.clear
|
14
|
+
end
|
15
|
+
after :all do
|
16
|
+
FileUtils.rm_f File.expand_path('../reports_test.sqlite3', File.dirname(__FILE__))
|
17
|
+
end
|
18
|
+
|
19
|
+
it_should_behave_like "a read/write Moneta cache"
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "moneta/adapters/basic_file"
|
5
|
+
|
6
|
+
describe "Moneta::Adapters::BasicFile" do
|
7
|
+
describe "without namespacing" do
|
8
|
+
before(:each) do
|
9
|
+
@cache = Moneta::Builder.build do
|
10
|
+
run Moneta::Adapters::BasicFile, :path => File.expand_path("../basic_file_cache", __FILE__)
|
11
|
+
end
|
12
|
+
@cache.clear
|
13
|
+
end
|
14
|
+
|
15
|
+
if ENV['MONETA_TEST'].nil? || ENV['MONETA_TEST'] == 'basic_file'
|
16
|
+
it_should_behave_like "a read/write Moneta cache"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should deal with '/' and '#' in a key" do
|
20
|
+
key = "hello/mom#crazycharacters"
|
21
|
+
@cache[key] = "hi"
|
22
|
+
@cache[key].should == "hi"
|
23
|
+
::File.exists?(File.join(File.dirname(__FILE__), "basic_file_cache", "")).should == true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "with namespacing" do
|
28
|
+
before(:each) do
|
29
|
+
@cache = Moneta::Builder.build do
|
30
|
+
run Moneta::Adapters::BasicFile,
|
31
|
+
:path => File.expand_path("../basic_file_cache", __FILE__),
|
32
|
+
:namespace => "test_namespace"
|
33
|
+
end
|
34
|
+
|
35
|
+
@cache.clear
|
36
|
+
end
|
37
|
+
|
38
|
+
if ENV['MONETA_TEST'].nil? || ENV['MONETA_TEST'] == 'basic_file'
|
39
|
+
it_should_behave_like "a read/write Moneta cache"
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should act as two stores within the same directory" do
|
43
|
+
@second = Moneta::Builder.build do
|
44
|
+
run Moneta::Adapters::BasicFile,
|
45
|
+
:path => File.expand_path("../basic_file_cache", __FILE__),
|
46
|
+
:namespace => "second_namespace"
|
47
|
+
end
|
48
|
+
|
49
|
+
@second[:key] = "hello"
|
50
|
+
@cache[:key] = "world!"
|
51
|
+
@second[:key].should == "hello"
|
52
|
+
@cache[:key].should == "world!"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
after(:all) do
|
57
|
+
FileUtils.rm_rf(File.join(File.dirname(__FILE__), "basic_file_cache"))
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
rescue SystemExit
|
62
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'moneta/adapters/couch'
|
5
|
+
|
6
|
+
describe "Moneta::Adapters::Couch" do
|
7
|
+
before(:each) do
|
8
|
+
@cache = Moneta::Builder.build do
|
9
|
+
run Moneta::Adapters::Couch, :db => "couch_test"
|
10
|
+
end
|
11
|
+
@cache.clear
|
12
|
+
end
|
13
|
+
|
14
|
+
it_should_behave_like "a read/write Moneta cache"
|
15
|
+
end
|
16
|
+
rescue SystemExit
|
17
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require "moneta/adapters/datamapper"
|
6
|
+
|
7
|
+
DataMapper.setup(:default, :adapter => :in_memory)
|
8
|
+
path = File.expand_path("../datamapper_spec.db", __FILE__)
|
9
|
+
FileUtils.rm(path) if File.exist?(path)
|
10
|
+
|
11
|
+
describe "Moneta::DataMapper" do
|
12
|
+
|
13
|
+
before(:each) do
|
14
|
+
DataMapper.repository(:default).adapter.reset
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "with the default repository" do
|
18
|
+
before(:each) do
|
19
|
+
@cache = Moneta::Adapters::DataMapper.new(:setup => "sqlite3://#{path}")
|
20
|
+
@cache.clear
|
21
|
+
end
|
22
|
+
|
23
|
+
after(:all) do
|
24
|
+
MonetaHash.auto_migrate!(:moneta)
|
25
|
+
end
|
26
|
+
|
27
|
+
it_should_behave_like "a read/write Moneta cache"
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "when :repository specified" do
|
31
|
+
before(:each) do
|
32
|
+
@cache = Moneta::Adapters::DataMapper.new(:repository => :sample, :setup => "sqlite3://#{path}")
|
33
|
+
@cache.clear
|
34
|
+
end
|
35
|
+
|
36
|
+
after(:all) do
|
37
|
+
MonetaHash.auto_migrate!(:sample)
|
38
|
+
end
|
39
|
+
|
40
|
+
it_should_behave_like "a read/write Moneta cache"
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "with multiple stores" do
|
44
|
+
before(:each) do
|
45
|
+
@default_cache = Moneta::Adapters::DataMapper.new(:setup => "sqlite3:moneta.db")
|
46
|
+
@default_cache.clear
|
47
|
+
|
48
|
+
@sample_cache = Moneta::Adapters::DataMapper.new(:repository => :sample, :setup => "sqlite3:sample.db")
|
49
|
+
@sample_cache.clear
|
50
|
+
end
|
51
|
+
|
52
|
+
after(:all) do
|
53
|
+
File.delete('moneta.db')
|
54
|
+
File.delete('sample.db')
|
55
|
+
end
|
56
|
+
|
57
|
+
# TODO should there be more tests than these?
|
58
|
+
it "does not cross contaminate when storing" do
|
59
|
+
@default_cache["key"] = "value"
|
60
|
+
@sample_cache["key"] = "value2"
|
61
|
+
|
62
|
+
@default_cache["key"].should == "value"
|
63
|
+
@sample_cache["key"].should == "value2"
|
64
|
+
end
|
65
|
+
|
66
|
+
it "does not cross contaminate when deleting" do
|
67
|
+
@default_cache["key"] = "value"
|
68
|
+
@sample_cache["key"] = "value2"
|
69
|
+
|
70
|
+
@default_cache.delete("key").should == "value"
|
71
|
+
@default_cache.key?("key").should be_false
|
72
|
+
@sample_cache["key"].should == "value2"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
rescue SystemExit
|
77
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "moneta/adapters/file"
|
5
|
+
|
6
|
+
describe "Moneta::Adapters::File" do
|
7
|
+
before(:each) do
|
8
|
+
@cache = Moneta::Builder.build do
|
9
|
+
run Moneta::Adapters::File, :path => File.expand_path("../file_cache", __FILE__)
|
10
|
+
end
|
11
|
+
@cache.clear
|
12
|
+
end
|
13
|
+
|
14
|
+
after(:all) do
|
15
|
+
FileUtils.rm_rf(File.join(File.dirname(__FILE__), "file_cache"))
|
16
|
+
end
|
17
|
+
|
18
|
+
if ENV['MONETA_TEST'].nil? || ENV['MONETA_TEST'] == 'file'
|
19
|
+
it_should_behave_like "a read/write Moneta cache"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
rescue SystemExit
|
23
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "moneta/adapters/lmc"
|
5
|
+
require "fileutils"
|
6
|
+
|
7
|
+
# Problem: If there are multiple caches around, they start
|
8
|
+
# to block (with a system semaphore), which can be unpleasant
|
9
|
+
# so just use one cache for the entire test run.
|
10
|
+
$lmc_cache = Moneta::Builder.build do
|
11
|
+
run Moneta::Adapters::LMC, :filename => "test"
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "Moneta::LMC" do
|
15
|
+
before(:all) do
|
16
|
+
@cache = $lmc_cache
|
17
|
+
end
|
18
|
+
|
19
|
+
after(:each) do
|
20
|
+
@cache.clear
|
21
|
+
end
|
22
|
+
|
23
|
+
it_should_behave_like "a read/write Moneta cache"
|
24
|
+
end
|
25
|
+
rescue SystemExit
|
26
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
if defined?(MemCache)
|
4
|
+
require "moneta/adapters/memcache"
|
5
|
+
|
6
|
+
describe "Moneta::Adapters::Memcache" do
|
7
|
+
before(:each) do
|
8
|
+
@native_expires = true
|
9
|
+
@cache = Moneta::Builder.build do
|
10
|
+
run Moneta::Adapters::Memcache, :server => "localhost:11211", :namespace => "moneta_spec"
|
11
|
+
end
|
12
|
+
@cache.clear
|
13
|
+
end
|
14
|
+
|
15
|
+
it_should_behave_like "a read/write Moneta cache"
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require "moneta/adapters/memory"
|
4
|
+
|
5
|
+
describe "Moneta::Adapters::Memory" do
|
6
|
+
class EmptyMiddleware
|
7
|
+
include Moneta::Middleware
|
8
|
+
end
|
9
|
+
|
10
|
+
before(:each) do
|
11
|
+
@cache = Moneta::Builder.build do
|
12
|
+
run Moneta::Adapters::Memory
|
13
|
+
end
|
14
|
+
@cache.clear
|
15
|
+
end
|
16
|
+
|
17
|
+
it_should_behave_like "a read/write Moneta cache"
|
18
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "moneta/adapters/mongodb"
|
5
|
+
|
6
|
+
describe "Moneta::Adapters::MongoDB" do
|
7
|
+
before(:each) do
|
8
|
+
@cache = Moneta::Adapters::MongoDB.new
|
9
|
+
@cache.clear
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#initialize' do
|
13
|
+
it 'should initialize with a URI' do
|
14
|
+
mock_mongo = mock(Object, :db => mock(Object, :collection => []))
|
15
|
+
Mongo::Connection.should_receive(:from_uri).
|
16
|
+
with('mongodb://a:b@localhost:27059/cache').
|
17
|
+
and_return mock_mongo
|
18
|
+
m = Moneta::Adapters::MongoDB.new :uri => 'mongodb://a:b@localhost:27059/cache'
|
19
|
+
end
|
20
|
+
it 'should initialize with a hash of options' do
|
21
|
+
m = Moneta::Adapters::MongoDB.new
|
22
|
+
m['example'] = 3.0
|
23
|
+
m['example'].should == 3.0
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'initialized' do
|
28
|
+
it_should_behave_like "a read/write Moneta cache"
|
29
|
+
|
30
|
+
describe '#store' do
|
31
|
+
it 'should store marshalled data that contains "invalid" UTF-8 characters' do
|
32
|
+
expect { @cache['example'] = 17.8 }.
|
33
|
+
should_not raise_error
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
rescue SystemExit
|
39
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "moneta/adapters/pstore"
|
5
|
+
|
6
|
+
describe Moneta::Adapters::PStore do
|
7
|
+
path = File.expand_path("../pstore_cache", __FILE__)
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
@cache = Moneta::Builder.new do
|
11
|
+
run Moneta::Adapters::PStore, :path => path
|
12
|
+
end
|
13
|
+
@cache.clear
|
14
|
+
end
|
15
|
+
|
16
|
+
after(:all) do
|
17
|
+
FileUtils.rm_rf(path)
|
18
|
+
end
|
19
|
+
|
20
|
+
if ENV['MONETA_TEST'].nil? || ENV['MONETA_TEST'] == 'pstore'
|
21
|
+
it_should_behave_like "a read/write Moneta cache"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
rescue SystemExit
|
25
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'moneta/adapters/rackspace'
|
5
|
+
|
6
|
+
describe "Moneta::Adapters::Rackspace" do
|
7
|
+
before(:each) do
|
8
|
+
#Fog.mock! unless ENV["RACKSPACE_USERNAME"]
|
9
|
+
|
10
|
+
@cache = Moneta::Adapters::Rackspace.new(
|
11
|
+
:rackspace_username => ENV["RACKSPACE_USERNAME"] || "mocked",
|
12
|
+
:rackspace_api_key => ENV["RACKSPACE_APIKEY"] || "mocked",
|
13
|
+
:namespace => "TESTING"
|
14
|
+
)
|
15
|
+
@cache.clear
|
16
|
+
end
|
17
|
+
|
18
|
+
it_should_behave_like "a read/write Moneta cache"
|
19
|
+
end
|
20
|
+
rescue SystemExit
|
21
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "moneta/adapters/redis"
|
5
|
+
|
6
|
+
describe "Moneta::Adapters::Redis" do
|
7
|
+
before(:each) do
|
8
|
+
@cache = Moneta::Adapters::Redis.new
|
9
|
+
@cache.clear
|
10
|
+
end
|
11
|
+
|
12
|
+
it_should_behave_like "a read/write Moneta cache"
|
13
|
+
end
|
14
|
+
rescue SystemExit
|
15
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'moneta/adapters/s3'
|
5
|
+
|
6
|
+
describe "Moneta::Adapters::S3" do
|
7
|
+
before(:each) do
|
8
|
+
Fog.mock! unless ENV["S3_KEY"]
|
9
|
+
|
10
|
+
@cache = Moneta::Adapters::S3.new(
|
11
|
+
:aws_access_key_id => ENV["S3_KEY"] || "mocked",
|
12
|
+
:aws_secret_access_key => ENV["S3_SECRET"] || "mocked",
|
13
|
+
:namespace => "TESTING"
|
14
|
+
)
|
15
|
+
@cache.clear
|
16
|
+
end
|
17
|
+
|
18
|
+
it_should_behave_like "a read/write Moneta cache"
|
19
|
+
end
|
20
|
+
rescue SystemExit
|
21
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "moneta/adapters/sdbm"
|
5
|
+
|
6
|
+
path = File.expand_path("../sdbm_cache", __FILE__)
|
7
|
+
|
8
|
+
describe "Moneta::Adapters::SDBM" do
|
9
|
+
before(:each) do
|
10
|
+
@cache = Moneta::Adapters::SDBM.new(:file => path)
|
11
|
+
@cache.clear
|
12
|
+
end
|
13
|
+
|
14
|
+
after(:all) do
|
15
|
+
FileUtils.rm_rf(Dir["#{path}*"])
|
16
|
+
end
|
17
|
+
|
18
|
+
if ENV['MONETA_TEST'].nil? || ENV['MONETA_TEST'] == 'sdbm'
|
19
|
+
it_should_behave_like "a read/write Moneta cache"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
rescue SystemExit
|
23
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "moneta/adapters/tokyo_cabinet"
|
5
|
+
|
6
|
+
describe "Moneta::Adapters::TokyoCabinet" do
|
7
|
+
before(:each) do
|
8
|
+
@cache = Moneta::Adapters::TokyoCabinet.new(:file => File.expand_path("../cache", __FILE__))
|
9
|
+
@cache.clear
|
10
|
+
end
|
11
|
+
|
12
|
+
after(:each) do
|
13
|
+
@cache.close
|
14
|
+
end
|
15
|
+
|
16
|
+
it_should_behave_like "a read/write Moneta cache"
|
17
|
+
end
|
18
|
+
rescue SystemExit
|
19
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "moneta/adapters/tyrant"
|
5
|
+
|
6
|
+
describe "Moneta::Adapters::Tyrant" do
|
7
|
+
before(:each) do
|
8
|
+
@cache = Moneta::Adapters::Tyrant.new(:host => "127.0.0.1", :port => 1978)
|
9
|
+
@cache.clear
|
10
|
+
end
|
11
|
+
|
12
|
+
it_should_behave_like "a read/write Moneta cache"
|
13
|
+
end
|
14
|
+
rescue SystemExit
|
15
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "moneta/adapters/xattr"
|
5
|
+
|
6
|
+
describe "Moneta::Adapters::Xattr" do
|
7
|
+
path = File.expand_path("../file_cache/xattr_cache", __FILE__)
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
@cache = Moneta::Builder.build do
|
11
|
+
run Moneta::Adapters::Xattr, :file => path
|
12
|
+
end
|
13
|
+
@cache.clear
|
14
|
+
end
|
15
|
+
|
16
|
+
after(:all) do
|
17
|
+
FileUtils.rm_rf(File.dirname(path))
|
18
|
+
end
|
19
|
+
|
20
|
+
if ENV['MONETA_TEST'].nil? || ENV['MONETA_TEST'] == 'xattrs'
|
21
|
+
it_should_behave_like "a read/write Moneta cache"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
rescue SystemExit
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "moneta/adapters/yaml"
|
5
|
+
|
6
|
+
describe "Moneta::Adapters::YAML" do
|
7
|
+
path = File.expand_path("../yaml_cache", __FILE__)
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
@cache = Moneta::Builder.new do
|
11
|
+
run Moneta::Adapters::YAML, :path => path
|
12
|
+
end
|
13
|
+
@cache.clear
|
14
|
+
end
|
15
|
+
|
16
|
+
after(:all) do
|
17
|
+
FileUtils.rm_rf(path)
|
18
|
+
end
|
19
|
+
|
20
|
+
if ENV['MONETA_TEST'].nil? || ENV['MONETA_TEST'] == 'yaml'
|
21
|
+
it_should_behave_like "a read/write Moneta cache"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
rescue SystemExit
|
25
|
+
end
|