[DRE-commits] [SCM] ruby-moneta.git branch, master, updated. debian/0.6.0-4-16-g741fce5

Jérémy Bobbio lunar at debian.org
Wed Mar 27 15:23:40 UTC 2013


The following commit has been merged in the master branch:
commit 018fcb9cf9acb72b2f8a8783e5dc62e7bce3acdb
Author: Jérémy Bobbio <lunar at debian.org>
Date:   Tue Mar 26 19:35:41 2013 +0100

    Add enough patches to get the test suite to pass
    
     * Skip the 'concurrent increment' example as its too unreliable.
     * Skip the specs which needs a dependency missing in Debian.
     * Skip specs that needs 'action_dispatch', also missing in Debian.

diff --git a/debian/patches/0002-Mark-concurrent-increment-example-as-pending.patch b/debian/patches/0002-Mark-concurrent-increment-example-as-pending.patch
new file mode 100644
index 0000000..a5956ca
--- /dev/null
+++ b/debian/patches/0002-Mark-concurrent-increment-example-as-pending.patch
@@ -0,0 +1,22 @@
+From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Bobbio?= <lunar at debian.org>
+Date: Tue, 26 Mar 2013 19:35:27 +0100
+Subject: Mark 'concurrent increment' example as pending
+
+It is not reliable enough to be trusted for now.
+---
+ script/generate-specs |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/script/generate-specs b/script/generate-specs
+index c892797..ac1cbf0 100755
+--- a/script/generate-specs
++++ b/script/generate-specs
+@@ -2022,6 +2022,8 @@ SPECS['concurrent_increment'] = %{def increment_thread(name)
+ end
+ 
+ it 'have atomic increment across multiple processes' do
++  pending "a more reliable implementation suitable for Debian packaging"
++
+   a = increment_thread('a')
+   b = increment_thread('b')
+   c = increment_thread('c')
diff --git a/debian/patches/0003-Skip-specs-for-which-we-miss-a-dependency.patch b/debian/patches/0003-Skip-specs-for-which-we-miss-a-dependency.patch
new file mode 100644
index 0000000..9d65eb0
--- /dev/null
+++ b/debian/patches/0003-Skip-specs-for-which-we-miss-a-dependency.patch
@@ -0,0 +1,90 @@
+From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Bobbio?= <lunar at debian.org>
+Date: Wed, 27 Mar 2013 08:23:12 +0000
+Subject: Skip specs for which we miss a dependency
+
+---
+ script/generate-specs |   66 ++++++++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 65 insertions(+), 1 deletion(-)
+
+diff --git a/script/generate-specs b/script/generate-specs
+index ac1cbf0..042ef8d 100755
+--- a/script/generate-specs
++++ b/script/generate-specs
+@@ -2357,6 +2357,70 @@ end
+ specs_code.gsub!(/\n +\n/, "\n\n")
+ File.open(File.join(PATH, 'monetaspecs.rb'), 'w') {|out| out << specs_code }
+ 
++SKIP = %w{
++adapter_activerecord
++adapter_activerecord_exisiting_connection
++adapter_couch
++adapter_datamapper
++adapter_daybreak
++adapter_hbase
++adapter_leveldb
++adapter_localmemcache
++adapter_memcached
++adapter_memcached_dalli
++adapter_memcached_dalli_with_default_expires
++adapter_memcached_native
++adapter_memcached_native_with_default_expires
++adapter_memcached_with_default_expires
++adapter_mongo
++adapter_mongo_with_default_expires
++adapter_redis
++adapter_redis_with_default_expires
++adapter_restclient
++adapter_tdb
++adapter_tokyotyrant
++proxy_redis
++simple_activerecord
++simple_activerecord_with_expires
++simple_couch
++simple_couch_with_expires
++simple_datamapper
++simple_datamapper_with_expires
++simple_datamapper_with_repository
++simple_daybreak
++simple_daybreak_with_expires
++simple_hbase
++simple_hbase_with_expires
++simple_leveldb
++simple_leveldb_with_expires
++simple_localmemcache
++simple_localmemcache_with_expires
++simple_memcached
++simple_memcached_dalli
++simple_memcached_native
++simple_memory_with_snappy_compress
++simple_mongo
++simple_redis
++simple_restclient
++simple_tdb
++simple_tdb_with_expires
++simple_tokyotyrant
++simple_tokyotyrant_with_expires
++transformer_bencode
++transformer_bert
++transformer_bson
++transformer_bzip2
++transformer_lzma
++transformer_lzo
++transformer_msgpack
++transformer_ox
++transformer_quicklz
++transformer_snappy
++transformer_tnet
++weak_create
++weak_increment
++}
++
+ TESTS.each do |name, options|
+   build = options.delete(:build)
+   store = options.delete(:store)
+@@ -2402,5 +2466,5 @@ end
+ }
+ 
+   code.gsub!(/\n +\n/, "\n\n")
+-  File.open(File.join(PATH, 'moneta', "#{name}_spec.rb"), 'w') {|out| out << code }
++  File.open(File.join(PATH, 'moneta', "#{name}_spec.rb"), 'w') {|out| out << code unless SKIP.include?(name) }
+ end
diff --git a/debian/patches/0099-Re-generate-specs-using-script-generate-specs.patch b/debian/patches/0099-Re-generate-specs-using-script-generate-specs.patch
index f1908e5..e6bcda6 100644
--- a/debian/patches/0099-Re-generate-specs-using-script-generate-specs.patch
+++ b/debian/patches/0099-Re-generate-specs-using-script-generate-specs.patch
@@ -3,106 +3,802 @@ Date: Mon, 25 Mar 2013 17:59:16 +0000
 Subject: Re-generate specs using script/generate-specs
 
 ---
- .../moneta/adapter_activerecord_exisiting_connection_spec.rb |    2 +-
- spec/moneta/adapter_activerecord_spec.rb                     |   10 +++++-----
- spec/moneta/adapter_datamapper_spec.rb                       |   10 +++++-----
- spec/moneta/adapter_sequel_spec.rb                           |    2 +-
- spec/moneta/simple_activerecord_spec.rb                      |    2 +-
- spec/moneta/simple_activerecord_with_expires_spec.rb         |    2 +-
- spec/moneta/simple_datamapper_spec.rb                        |    2 +-
- spec/moneta/simple_datamapper_with_expires_spec.rb           |    2 +-
- spec/moneta/simple_datamapper_with_repository_spec.rb        |    2 +-
- spec/moneta/simple_sequel_spec.rb                            |    2 +-
- spec/moneta/simple_sequel_with_expires_spec.rb               |    2 +-
- 11 files changed, 19 insertions(+), 19 deletions(-)
+ ...apter_activerecord_exisiting_connection_spec.rb |   31 ----
+ spec/moneta/adapter_activerecord_spec.rb           |   61 --------
+ spec/moneta/adapter_couch_spec.rb                  |   27 ----
+ spec/moneta/adapter_datamapper_spec.rb             |   59 --------
+ spec/moneta/adapter_daybreak_spec.rb               |   26 ----
+ spec/moneta/adapter_hbase_spec.rb                  |   28 ----
+ spec/moneta/adapter_leveldb_spec.rb                |   26 ----
+ spec/moneta/adapter_localmemcache_spec.rb          |   27 ----
+ spec/moneta/adapter_memcached_dalli_spec.rb        |   31 ----
+ ...er_memcached_dalli_with_default_expires_spec.rb |   32 ----
+ spec/moneta/adapter_memcached_native_spec.rb       |   31 ----
+ ...r_memcached_native_with_default_expires_spec.rb |   32 ----
+ spec/moneta/adapter_memcached_spec.rb              |   31 ----
+ .../adapter_memcached_with_default_expires_spec.rb |   32 ----
+ spec/moneta/adapter_mongo_spec.rb                  |   37 -----
+ .../adapter_mongo_with_default_expires_spec.rb     |   32 ----
+ spec/moneta/adapter_redis_spec.rb                  |   31 ----
+ .../adapter_redis_with_default_expires_spec.rb     |   32 ----
+ spec/moneta/adapter_restclient_spec.rb             |   28 ----
+ spec/moneta/adapter_sequel_spec.rb                 |    2 +-
+ spec/moneta/adapter_tdb_spec.rb                    |   26 ----
+ spec/moneta/adapter_tokyotyrant_spec.rb            |   29 ----
+ spec/moneta/proxy_redis_spec.rb                    |   35 -----
+ spec/moneta/simple_activerecord_spec.rb            |  154 -------------------
+ .../simple_activerecord_with_expires_spec.rb       |  156 -------------------
+ spec/moneta/simple_couch_spec.rb                   |  152 -------------------
+ spec/moneta/simple_couch_with_expires_spec.rb      |  153 -------------------
+ spec/moneta/simple_datamapper_spec.rb              |  155 -------------------
+ spec/moneta/simple_datamapper_with_expires_spec.rb |  157 --------------------
+ .../simple_datamapper_with_repository_spec.rb      |  155 -------------------
+ spec/moneta/simple_daybreak_spec.rb                |  151 -------------------
+ spec/moneta/simple_daybreak_with_expires_spec.rb   |  153 -------------------
+ spec/moneta/simple_hbase_spec.rb                   |  153 -------------------
+ spec/moneta/simple_hbase_with_expires_spec.rb      |  156 -------------------
+ spec/moneta/simple_leveldb_spec.rb                 |  151 -------------------
+ spec/moneta/simple_leveldb_with_expires_spec.rb    |  153 -------------------
+ spec/moneta/simple_localmemcache_spec.rb           |  152 -------------------
+ .../simple_localmemcache_with_expires_spec.rb      |  153 -------------------
+ spec/moneta/simple_memcached_dalli_spec.rb         |  156 -------------------
+ spec/moneta/simple_memcached_native_spec.rb        |  156 -------------------
+ spec/moneta/simple_memcached_spec.rb               |  156 -------------------
+ .../simple_memory_with_snappy_compress_spec.rb     |  116 ---------------
+ spec/moneta/simple_mongo_spec.rb                   |  156 -------------------
+ spec/moneta/simple_redis_spec.rb                   |  156 -------------------
+ spec/moneta/simple_restclient_spec.rb              |  153 -------------------
+ spec/moneta/simple_sequel_spec.rb                  |    2 +-
+ spec/moneta/simple_sequel_with_expires_spec.rb     |    2 +-
+ spec/moneta/simple_tdb_spec.rb                     |  151 -------------------
+ spec/moneta/simple_tdb_with_expires_spec.rb        |  153 -------------------
+ spec/moneta/simple_tokyotyrant_spec.rb             |  154 -------------------
+ .../moneta/simple_tokyotyrant_with_expires_spec.rb |  156 -------------------
+ spec/moneta/transformer_bencode_spec.rb            |   54 -------
+ spec/moneta/transformer_bert_spec.rb               |   54 -------
+ spec/moneta/transformer_bson_spec.rb               |   54 -------
+ spec/moneta/transformer_bzip2_spec.rb              |   48 ------
+ spec/moneta/transformer_lzma_spec.rb               |   48 ------
+ spec/moneta/transformer_lzo_spec.rb                |   48 ------
+ spec/moneta/transformer_msgpack_spec.rb            |   54 -------
+ spec/moneta/transformer_ox_spec.rb                 |  120 ---------------
+ spec/moneta/transformer_quicklz_spec.rb            |   48 ------
+ spec/moneta/transformer_snappy_spec.rb             |   48 ------
+ spec/moneta/transformer_tnet_spec.rb               |   54 -------
+ spec/moneta/weak_create_spec.rb                    |   30 ----
+ spec/moneta/weak_increment_spec.rb                 |   30 ----
+ spec/monetaspecs.rb                                |    2 +
+ 65 files changed, 5 insertions(+), 5384 deletions(-)
 
 diff --git a/spec/moneta/adapter_activerecord_exisiting_connection_spec.rb b/spec/moneta/adapter_activerecord_exisiting_connection_spec.rb
-index c3b3ddf..4f60067 100644
+index c3b3ddf..e69de29 100644
 --- a/spec/moneta/adapter_activerecord_exisiting_connection_spec.rb
 +++ b/spec/moneta/adapter_activerecord_exisiting_connection_spec.rb
-@@ -3,7 +3,7 @@ require 'helper'
- 
- describe_moneta "adapter_activerecord_exisiting_connection" do
-   require 'active_record'
+@@ -1,31 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_activerecord_exisiting_connection" do
+-  require 'active_record'
 -  ActiveRecord::Base.establish_connection :adapter => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'), :database => 'moneta', :username => 'root'
-+  ActiveRecord::Base.establish_connection :adapter => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'), :database => 'moneta', :username => 'root', :socket => ENV['MYSQL_TEST_SOCKET']
-   def features
-     [:create, :increment]
-   end
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::ActiveRecord.new(:table => 'adapter_activerecord_existing_connection')
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
 diff --git a/spec/moneta/adapter_activerecord_spec.rb b/spec/moneta/adapter_activerecord_spec.rb
-index e105094..a92f8aa 100644
+index e105094..e69de29 100644
 --- a/spec/moneta/adapter_activerecord_spec.rb
 +++ b/spec/moneta/adapter_activerecord_spec.rb
-@@ -7,7 +7,7 @@ describe_moneta "adapter_activerecord" do
-   end
- 
-   def new_store
+@@ -1,61 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_activerecord" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
 -    Moneta::Adapters::ActiveRecord.new(:table => 'adapter_activerecord', :connection => { :adapter => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'), :database => 'moneta', :username => 'root' })
-+    Moneta::Adapters::ActiveRecord.new(:table => 'adapter_activerecord', :connection => { :adapter => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'), :database => 'moneta', :username => 'root', :socket => ENV['MYSQL_TEST_SOCKET'] })
-   end
- 
-   def load_value(value)
-@@ -34,8 +34,8 @@ describe_moneta "adapter_activerecord" do
-   end
- 
-   it 'supports different tables same database' do
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-  it 'updates an existing key/value' do
+-    store['foo/bar'] = '1'
+-    store['foo/bar'] = '2'
+-    records = store.table.find :all, :conditions => { :k => 'foo/bar' }
+-    records.count.should == 1
+-  end
+-
+-  it 'supports different tables same database' do
 -    store1 = Moneta::Adapters::ActiveRecord.new(:table => 'adapter_activerecord1', :connection => { :adapter => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'), :database => 'moneta', :username => 'root' })
 -    store2 = Moneta::Adapters::ActiveRecord.new(:table => 'adapter_activerecord2', :connection => { :adapter => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'), :database => 'moneta', :username => 'root' })
-+    store1 = Moneta::Adapters::ActiveRecord.new(:table => 'adapter_activerecord1', :connection => { :adapter => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'), :database => 'moneta', :username => 'root', :socket => ENV['MYSQL_TEST_SOCKET'] })
-+    store2 = Moneta::Adapters::ActiveRecord.new(:table => 'adapter_activerecord2', :connection => { :adapter => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'), :database => 'moneta', :username => 'root', :socket => ENV['MYSQL_TEST_SOCKET'] })
- 
-     store1['key'] = 'value1'
-     store2['key'] = 'value2'
-@@ -47,8 +47,8 @@ describe_moneta "adapter_activerecord" do
-   end
- 
-   it 'supports different databases same table' do
+-
+-    store1['key'] = 'value1'
+-    store2['key'] = 'value2'
+-    store1['key'].should == 'value1'
+-    store2['key'].should == 'value2'
+-
+-    store1.close
+-    store2.close
+-  end
+-
+-  it 'supports different databases same table' do
 -    store1 = Moneta::Adapters::ActiveRecord.new(:table => 'adapter_activerecord', :connection => { :adapter => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'), :database => 'moneta_activerecord1', :username => 'root' })
 -    store2 = Moneta::Adapters::ActiveRecord.new(:table => 'adapter_activerecord', :connection => { :adapter => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'), :database => 'moneta_activerecord2', :username => 'root' })
-+    store1 = Moneta::Adapters::ActiveRecord.new(:table => 'adapter_activerecord', :connection => { :adapter => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'), :database => 'moneta_activerecord1', :username => 'root', :socket => ENV['MYSQL_TEST_SOCKET'] })
-+    store2 = Moneta::Adapters::ActiveRecord.new(:table => 'adapter_activerecord', :connection => { :adapter => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'), :database => 'moneta_activerecord2', :username => 'root', :socket => ENV['MYSQL_TEST_SOCKET'] })
- 
-     store1['key'] = 'value1'
-     store2['key'] = 'value2'
+-
+-    store1['key'] = 'value1'
+-    store2['key'] = 'value2'
+-    store1['key'].should == 'value1'
+-    store2['key'].should == 'value2'
+-
+-    store1.close
+-    store2.close
+-  end
+-end
+diff --git a/spec/moneta/adapter_couch_spec.rb b/spec/moneta/adapter_couch_spec.rb
+index b39ddf5..e69de29 100644
+--- a/spec/moneta/adapter_couch_spec.rb
++++ b/spec/moneta/adapter_couch_spec.rb
+@@ -1,27 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_couch" do
+-  def features
+-    []
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::Couch.new(:db => 'adapter_couch')
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'not_create'
+-  it_should_behave_like 'not_increment'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
 diff --git a/spec/moneta/adapter_datamapper_spec.rb b/spec/moneta/adapter_datamapper_spec.rb
-index afb6e2e..38a1a0d 100644
+index afb6e2e..e69de29 100644
 --- a/spec/moneta/adapter_datamapper_spec.rb
 +++ b/spec/moneta/adapter_datamapper_spec.rb
-@@ -9,7 +9,7 @@ describe_moneta "adapter_datamapper" do
-   end
- 
-   def new_store
+@@ -1,59 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_datamapper" do
+-  require 'dm-core'
+-  DataMapper.setup(:default, :adapter => :in_memory)
+-  def features
+-    [:create]
+-  end
+-
+-  def new_store
 -    Moneta::Adapters::DataMapper.new(:setup => "mysql://root:@localhost/moneta", :table => "adapter_datamapper")
-+    Moneta::Adapters::DataMapper.new(:setup => "mysql://root:@localhost/moneta#{ENV["MYSQL_TEST_SOCKET"] ? "?socket=#{ENV["MYSQL_TEST_SOCKET"]}" : ""}", :table => "adapter_datamapper")
-   end
- 
-   def load_value(value)
-@@ -28,10 +28,10 @@ describe_moneta "adapter_datamapper" do
-   it_should_behave_like 'store_stringkey_stringvalue'
-   it_should_behave_like 'store_large'
-   it 'does not cross contaminate when storing' do
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'not_increment'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-  it 'does not cross contaminate when storing' do
 -    first = Moneta::Adapters::DataMapper.new(:setup => "mysql://root:@localhost/moneta", :table => "datamapper_first")
-+    first = Moneta::Adapters::DataMapper.new(:setup => "mysql://root:@localhost/moneta#{ENV["MYSQL_TEST_SOCKET"] ? "?socket=#{ENV["MYSQL_TEST_SOCKET"]}" : ""}", :table => "datamapper_first")
-     first.clear
- 
+-    first.clear
+-
 -    second = Moneta::Adapters::DataMapper.new(:repository => :sample, :setup => "mysql://root:@localhost/moneta", :table => "datamapper_second")
-+    second = Moneta::Adapters::DataMapper.new(:repository => :sample, :setup => "mysql://root:@localhost/moneta#{ENV["MYSQL_TEST_SOCKET"] ? "?socket=#{ENV["MYSQL_TEST_SOCKET"]}" : ""}", :table => "datamapper_second")
-     second.clear
- 
-     first['key'] = 'value'
-@@ -42,10 +42,10 @@ describe_moneta "adapter_datamapper" do
-   end
- 
-   it 'does not cross contaminate when deleting' do
+-    second.clear
+-
+-    first['key'] = 'value'
+-    second['key'] = 'value2'
+-
+-    first['key'].should == 'value'
+-    second['key'].should == 'value2'
+-  end
+-
+-  it 'does not cross contaminate when deleting' do
 -    first = Moneta::Adapters::DataMapper.new(:setup => "mysql://root:@localhost/moneta", :table => "datamapper_first")
-+    first = Moneta::Adapters::DataMapper.new(:setup => "mysql://root:@localhost/moneta#{ENV["MYSQL_TEST_SOCKET"] ? "?socket=#{ENV["MYSQL_TEST_SOCKET"]}" : ""}", :table => "datamapper_first")
-     first.clear
- 
+-    first.clear
+-
 -    second = Moneta::Adapters::DataMapper.new(:repository => :sample, :setup => "mysql://root:@localhost/moneta", :table => "datamapper_second")
-+    second = Moneta::Adapters::DataMapper.new(:repository => :sample, :setup => "mysql://root:@localhost/moneta#{ENV["MYSQL_TEST_SOCKET"] ? "?socket=#{ENV["MYSQL_TEST_SOCKET"]}" : ""}", :table => "datamapper_second")
-     second.clear
- 
-     first['key'] = 'value'
+-    second.clear
+-
+-    first['key'] = 'value'
+-    second['key'] = 'value2'
+-
+-    first.delete('key').should == 'value'
+-    first.key?('key').should be_false
+-    second['key'].should == 'value2'
+-  end
+-
+-end
+diff --git a/spec/moneta/adapter_daybreak_spec.rb b/spec/moneta/adapter_daybreak_spec.rb
+index 11c8336..e69de29 100644
+--- a/spec/moneta/adapter_daybreak_spec.rb
++++ b/spec/moneta/adapter_daybreak_spec.rb
+@@ -1,26 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_daybreak" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::Daybreak.new(:file => File.join(make_tempdir, "adapter_daybreak"))
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returnsame_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/moneta/adapter_hbase_spec.rb b/spec/moneta/adapter_hbase_spec.rb
+index 5f113d9..e69de29 100644
+--- a/spec/moneta/adapter_hbase_spec.rb
++++ b/spec/moneta/adapter_hbase_spec.rb
+@@ -1,28 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_hbase" do
+-  def features
+-    [:increment]
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::HBase.new(:table => 'adapter_hbase')
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'not_create'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/moneta/adapter_leveldb_spec.rb b/spec/moneta/adapter_leveldb_spec.rb
+index 86abb7e..e69de29 100644
+--- a/spec/moneta/adapter_leveldb_spec.rb
++++ b/spec/moneta/adapter_leveldb_spec.rb
+@@ -1,26 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_leveldb" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::LevelDB.new(:dir => File.join(make_tempdir, "adapter_leveldb"))
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/moneta/adapter_localmemcache_spec.rb b/spec/moneta/adapter_localmemcache_spec.rb
+index 4474d4c..e69de29 100644
+--- a/spec/moneta/adapter_localmemcache_spec.rb
++++ b/spec/moneta/adapter_localmemcache_spec.rb
+@@ -1,27 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_localmemcache" do
+-  def features
+-    []
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::LocalMemCache.new(:file => File.join(make_tempdir, "adapter_localmemcache"))
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'not_create'
+-  it_should_behave_like 'not_increment'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/moneta/adapter_memcached_dalli_spec.rb b/spec/moneta/adapter_memcached_dalli_spec.rb
+index a98e405..e69de29 100644
+--- a/spec/moneta/adapter_memcached_dalli_spec.rb
++++ b/spec/moneta/adapter_memcached_dalli_spec.rb
+@@ -1,31 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_memcached_dalli" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::MemcachedDalli.new(:namespace => "adapter_memcached_dalli")
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/moneta/adapter_memcached_dalli_with_default_expires_spec.rb b/spec/moneta/adapter_memcached_dalli_with_default_expires_spec.rb
+index 2b12de3..e69de29 100644
+--- a/spec/moneta/adapter_memcached_dalli_with_default_expires_spec.rb
++++ b/spec/moneta/adapter_memcached_dalli_with_default_expires_spec.rb
+@@ -1,32 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_memcached_dalli_with_default_expires" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::MemcachedDalli.new(:expires => 1)
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'default_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/moneta/adapter_memcached_native_spec.rb b/spec/moneta/adapter_memcached_native_spec.rb
+index f18b270..e69de29 100644
+--- a/spec/moneta/adapter_memcached_native_spec.rb
++++ b/spec/moneta/adapter_memcached_native_spec.rb
+@@ -1,31 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_memcached_native" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::MemcachedNative.new(:namespace => "adapter_memcached_native")
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/moneta/adapter_memcached_native_with_default_expires_spec.rb b/spec/moneta/adapter_memcached_native_with_default_expires_spec.rb
+index 4cc2d63..e69de29 100644
+--- a/spec/moneta/adapter_memcached_native_with_default_expires_spec.rb
++++ b/spec/moneta/adapter_memcached_native_with_default_expires_spec.rb
+@@ -1,32 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_memcached_native_with_default_expires" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::MemcachedNative.new(:expires => 1)
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'default_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/moneta/adapter_memcached_spec.rb b/spec/moneta/adapter_memcached_spec.rb
+index ad34af5..e69de29 100644
+--- a/spec/moneta/adapter_memcached_spec.rb
++++ b/spec/moneta/adapter_memcached_spec.rb
+@@ -1,31 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_memcached" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::Memcached.new(:namespace => "adapter_memcached")
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/moneta/adapter_memcached_with_default_expires_spec.rb b/spec/moneta/adapter_memcached_with_default_expires_spec.rb
+index dc7b6c2..e69de29 100644
+--- a/spec/moneta/adapter_memcached_with_default_expires_spec.rb
++++ b/spec/moneta/adapter_memcached_with_default_expires_spec.rb
+@@ -1,32 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_memcached_with_default_expires" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::Memcached.new(:expires => 1)
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'default_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/moneta/adapter_mongo_spec.rb b/spec/moneta/adapter_mongo_spec.rb
+index 5d07428..e69de29 100644
+--- a/spec/moneta/adapter_mongo_spec.rb
++++ b/spec/moneta/adapter_mongo_spec.rb
+@@ -1,37 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_mongo" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::Mongo.new(:db => "adapter_mongo")
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-  it 'automatically deletes expired document' do
+-    store.store('key', 'val', :expires => 5)
+-    store.instance_variable_get(:@collection).find_one('_id' => ::BSON::Binary.new('key')).should_not be_nil
+-    sleep 70 # Mongo needs up to 60 seconds
+-    store.instance_variable_get(:@collection).find_one('_id' => ::BSON::Binary.new('key')).should be_nil
+-  end
+-end
+diff --git a/spec/moneta/adapter_mongo_with_default_expires_spec.rb b/spec/moneta/adapter_mongo_with_default_expires_spec.rb
+index 4f59468..e69de29 100644
+--- a/spec/moneta/adapter_mongo_with_default_expires_spec.rb
++++ b/spec/moneta/adapter_mongo_with_default_expires_spec.rb
+@@ -1,32 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_mongo_with_default_expires" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::Mongo.new(:expires => 1)
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'default_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/moneta/adapter_redis_spec.rb b/spec/moneta/adapter_redis_spec.rb
+index 9ff1fdf..e69de29 100644
+--- a/spec/moneta/adapter_redis_spec.rb
++++ b/spec/moneta/adapter_redis_spec.rb
+@@ -1,31 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_redis" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::Redis.new
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/moneta/adapter_redis_with_default_expires_spec.rb b/spec/moneta/adapter_redis_with_default_expires_spec.rb
+index 8e543ef..e69de29 100644
+--- a/spec/moneta/adapter_redis_with_default_expires_spec.rb
++++ b/spec/moneta/adapter_redis_with_default_expires_spec.rb
+@@ -1,32 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_redis_with_default_expires" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::Redis.new(:expires => 1)
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'default_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/moneta/adapter_restclient_spec.rb b/spec/moneta/adapter_restclient_spec.rb
+index de347d8..e69de29 100644
+--- a/spec/moneta/adapter_restclient_spec.rb
++++ b/spec/moneta/adapter_restclient_spec.rb
+@@ -1,28 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_restclient" do
+-  start_restserver
+-  def features
+-    []
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::RestClient.new(:url => 'http://localhost:8808/moneta/')
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'not_create'
+-  it_should_behave_like 'not_increment'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
 diff --git a/spec/moneta/adapter_sequel_spec.rb b/spec/moneta/adapter_sequel_spec.rb
 index 7e367b9..e1e2767 100644
 --- a/spec/moneta/adapter_sequel_spec.rb
@@ -116,71 +812,3574 @@ index 7e367b9..e1e2767 100644
    end
  
    def load_value(value)
+diff --git a/spec/moneta/adapter_tdb_spec.rb b/spec/moneta/adapter_tdb_spec.rb
+index c8f69ff..e69de29 100644
+--- a/spec/moneta/adapter_tdb_spec.rb
++++ b/spec/moneta/adapter_tdb_spec.rb
+@@ -1,26 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_tdb" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::TDB.new(:file => File.join(make_tempdir, "adapter_tdb"))
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/moneta/adapter_tokyotyrant_spec.rb b/spec/moneta/adapter_tokyotyrant_spec.rb
+index 8a508d4..e69de29 100644
+--- a/spec/moneta/adapter_tokyotyrant_spec.rb
++++ b/spec/moneta/adapter_tokyotyrant_spec.rb
+@@ -1,29 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "adapter_tokyotyrant" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta::Adapters::TokyoTyrant.new
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/moneta/proxy_redis_spec.rb b/spec/moneta/proxy_redis_spec.rb
+index 443f8c0..e69de29 100644
+--- a/spec/moneta/proxy_redis_spec.rb
++++ b/spec/moneta/proxy_redis_spec.rb
+@@ -1,35 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "proxy_redis" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.build do
+-      use :Proxy
+-      use :Proxy
+-      adapter :Redis
+-    end
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
 diff --git a/spec/moneta/simple_activerecord_spec.rb b/spec/moneta/simple_activerecord_spec.rb
-index cb19f70..1f758b8 100644
+index cb19f70..e69de29 100644
 --- a/spec/moneta/simple_activerecord_spec.rb
 +++ b/spec/moneta/simple_activerecord_spec.rb
-@@ -7,7 +7,7 @@ describe_moneta "simple_activerecord" do
-   end
- 
-   def new_store
+@@ -1,154 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_activerecord" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
 -    Moneta.new(:ActiveRecord, :table => 'simple_activerecord', :connection => { :adapter => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'), :database => 'moneta', :username => 'root' }, :logger => {:file => File.join(make_tempdir, 'simple_activerecord.log')})
-+    Moneta.new(:ActiveRecord, :table => 'simple_activerecord', :connection => { :adapter => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'), :database => 'moneta', :username => 'root', :socket => ENV['MYSQL_TEST_SOCKET'] }, :logger => {:file => File.join(make_tempdir, 'simple_activerecord.log')})
-   end
- 
-   def load_value(value)
+-  end
+-
+-  def load_value(value)
+-    ::Marshal.load(value.unpack('m').first)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
 diff --git a/spec/moneta/simple_activerecord_with_expires_spec.rb b/spec/moneta/simple_activerecord_with_expires_spec.rb
-index c4e202c..ff0a014 100644
+index c4e202c..e69de29 100644
 --- a/spec/moneta/simple_activerecord_with_expires_spec.rb
 +++ b/spec/moneta/simple_activerecord_with_expires_spec.rb
-@@ -7,7 +7,7 @@ describe_moneta "simple_activerecord_with_expires" do
-   end
- 
-   def new_store
+@@ -1,156 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_activerecord_with_expires" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
 -    Moneta.new(:ActiveRecord, :table => 'simple_activerecord_with_expires', :connection => { :adapter => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'), :database => 'moneta', :username => 'root' }, :expires => true, :logger => {:file => File.join(make_tempdir, 'simple_activerecord_with_expires.log')})
-+    Moneta.new(:ActiveRecord, :table => 'simple_activerecord_with_expires', :connection => { :adapter => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'), :database => 'moneta', :username => 'root', :socket => ENV['MYSQL_TEST_SOCKET'] }, :expires => true, :logger => {:file => File.join(make_tempdir, 'simple_activerecord_with_expires.log')})
-   end
- 
-   def load_value(value)
+-  end
+-
+-  def load_value(value)
+-    ::Marshal.load(value.unpack('m').first)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value_expires'
+-end
+diff --git a/spec/moneta/simple_couch_spec.rb b/spec/moneta/simple_couch_spec.rb
+index 2a3217a..e69de29 100644
+--- a/spec/moneta/simple_couch_spec.rb
++++ b/spec/moneta/simple_couch_spec.rb
+@@ -1,152 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_couch" do
+-  def features
+-    []
+-  end
+-
+-  def new_store
+-    Moneta.new(:Couch, :db => 'simple_couch', :logger => {:file => File.join(make_tempdir, 'simple_couch.log')})
+-  end
+-
+-  def load_value(value)
+-    ::Marshal.load(value.unpack('m').first)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'not_create'
+-  it_should_behave_like 'not_increment'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
+diff --git a/spec/moneta/simple_couch_with_expires_spec.rb b/spec/moneta/simple_couch_with_expires_spec.rb
+index 51dd2f3..e69de29 100644
+--- a/spec/moneta/simple_couch_with_expires_spec.rb
++++ b/spec/moneta/simple_couch_with_expires_spec.rb
+@@ -1,153 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_couch_with_expires" do
+-  def features
+-    [:expires]
+-  end
+-
+-  def new_store
+-    Moneta.new(:Couch, :db => 'simple_couch_with_expires', :expires => true, :logger => {:file => File.join(make_tempdir, 'simple_couch_with_expires.log')})
+-  end
+-
+-  def load_value(value)
+-    ::Marshal.load(value.unpack('m').first)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'not_create'
+-  it_should_behave_like 'not_increment'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value_expires'
+-end
 diff --git a/spec/moneta/simple_datamapper_spec.rb b/spec/moneta/simple_datamapper_spec.rb
-index da6014d..d95decd 100644
+index da6014d..e69de29 100644
 --- a/spec/moneta/simple_datamapper_spec.rb
 +++ b/spec/moneta/simple_datamapper_spec.rb
-@@ -9,7 +9,7 @@ describe_moneta "simple_datamapper" do
-   end
- 
-   def new_store
+@@ -1,155 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_datamapper" do
+-  require 'dm-core'
+-  DataMapper.setup(:default, :adapter => :in_memory)
+-  def features
+-    [:create]
+-  end
+-
+-  def new_store
 -    Moneta.new(:DataMapper, :setup => "mysql://root:@localhost/moneta", :table => "simple_datamapper", :logger => {:file => File.join(make_tempdir, 'simple_datamapper.log')})
-+    Moneta.new(:DataMapper, :setup => "mysql://root:@localhost/moneta#{ENV["MYSQL_TEST_SOCKET"] ? "?socket=#{ENV["MYSQL_TEST_SOCKET"]}" : ""}", :table => "simple_datamapper", :logger => {:file => File.join(make_tempdir, 'simple_datamapper.log')})
-   end
- 
-   def load_value(value)
+-  end
+-
+-  def load_value(value)
+-    ::Marshal.load(value.unpack('m').first)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'not_increment'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
 diff --git a/spec/moneta/simple_datamapper_with_expires_spec.rb b/spec/moneta/simple_datamapper_with_expires_spec.rb
-index a50aa35..c031e0d 100644
+index a50aa35..e69de29 100644
 --- a/spec/moneta/simple_datamapper_with_expires_spec.rb
 +++ b/spec/moneta/simple_datamapper_with_expires_spec.rb
-@@ -9,7 +9,7 @@ describe_moneta "simple_datamapper_with_expires" do
-   end
- 
-   def new_store
+@@ -1,157 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_datamapper_with_expires" do
+-  require 'dm-core'
+-  DataMapper.setup(:default, :adapter => :in_memory)
+-  def features
+-    [:create, :expires]
+-  end
+-
+-  def new_store
 -    Moneta.new(:DataMapper, :setup => "mysql://root:@localhost/moneta", :table => "simple_datamapper_with_expires", :expires => true, :logger => {:file => File.join(make_tempdir, 'simple_datamapper_with_expires.log')})
-+    Moneta.new(:DataMapper, :setup => "mysql://root:@localhost/moneta#{ENV["MYSQL_TEST_SOCKET"] ? "?socket=#{ENV["MYSQL_TEST_SOCKET"]}" : ""}", :table => "simple_datamapper_with_expires", :expires => true, :logger => {:file => File.join(make_tempdir, 'simple_datamapper_with_expires.log')})
-   end
- 
-   def load_value(value)
+-  end
+-
+-  def load_value(value)
+-    ::Marshal.load(value.unpack('m').first)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'not_increment'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value_expires'
+-end
 diff --git a/spec/moneta/simple_datamapper_with_repository_spec.rb b/spec/moneta/simple_datamapper_with_repository_spec.rb
-index 8748503..c7e59ee 100644
+index 8748503..e69de29 100644
 --- a/spec/moneta/simple_datamapper_with_repository_spec.rb
 +++ b/spec/moneta/simple_datamapper_with_repository_spec.rb
-@@ -9,7 +9,7 @@ describe_moneta "simple_datamapper_with_repository" do
-   end
- 
-   def new_store
+@@ -1,155 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_datamapper_with_repository" do
+-  require 'dm-core'
+-  DataMapper.setup(:default, :adapter => :in_memory)
+-  def features
+-    [:create]
+-  end
+-
+-  def new_store
 -    Moneta.new(:DataMapper, :repository => :repo, :setup => "mysql://root:@localhost/moneta", :table => "simple_datamapper_with_repository", :logger => {:file => File.join(make_tempdir, 'simple_datamapper_with_repository.log')})
-+    Moneta.new(:DataMapper, :repository => :repo, :setup => "mysql://root:@localhost/moneta#{ENV["MYSQL_TEST_SOCKET"] ? "?socket=#{ENV["MYSQL_TEST_SOCKET"]}" : ""}", :table => "simple_datamapper_with_repository", :logger => {:file => File.join(make_tempdir, 'simple_datamapper_with_repository.log')})
-   end
- 
-   def load_value(value)
+-  end
+-
+-  def load_value(value)
+-    ::Marshal.load(value.unpack('m').first)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'not_increment'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
+diff --git a/spec/moneta/simple_daybreak_spec.rb b/spec/moneta/simple_daybreak_spec.rb
+index d1b5f38..e69de29 100644
+--- a/spec/moneta/simple_daybreak_spec.rb
++++ b/spec/moneta/simple_daybreak_spec.rb
+@@ -1,151 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_daybreak" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.new(:Daybreak, :file => File.join(make_tempdir, "simple_daybreak"), :logger => {:file => File.join(make_tempdir, 'simple_daybreak.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
+diff --git a/spec/moneta/simple_daybreak_with_expires_spec.rb b/spec/moneta/simple_daybreak_with_expires_spec.rb
+index a52733e..e69de29 100644
+--- a/spec/moneta/simple_daybreak_with_expires_spec.rb
++++ b/spec/moneta/simple_daybreak_with_expires_spec.rb
+@@ -1,153 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_daybreak_with_expires" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.new(:Daybreak, :file => File.join(make_tempdir, "simple_daybreak_with_expires"), :expires => true, :logger => {:file => File.join(make_tempdir, 'simple_daybreak_with_expires.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value_expires'
+-end
+diff --git a/spec/moneta/simple_hbase_spec.rb b/spec/moneta/simple_hbase_spec.rb
+index cb249a5..e69de29 100644
+--- a/spec/moneta/simple_hbase_spec.rb
++++ b/spec/moneta/simple_hbase_spec.rb
+@@ -1,153 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_hbase" do
+-  def features
+-    [:increment]
+-  end
+-
+-  def new_store
+-    Moneta.new(:HBase, :table => "simple_hbase", :logger => {:file => File.join(make_tempdir, 'simple_hbase.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'not_create'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
+diff --git a/spec/moneta/simple_hbase_with_expires_spec.rb b/spec/moneta/simple_hbase_with_expires_spec.rb
+index 3f811a9..e69de29 100644
+--- a/spec/moneta/simple_hbase_with_expires_spec.rb
++++ b/spec/moneta/simple_hbase_with_expires_spec.rb
+@@ -1,156 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_hbase_with_expires" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.new(:HBase, :table => "simple_hbase", :expires => true, :logger => {:file => File.join(make_tempdir, 'simple_hbase_with_expires.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value_expires'
+-end
+diff --git a/spec/moneta/simple_leveldb_spec.rb b/spec/moneta/simple_leveldb_spec.rb
+index fd112a4..e69de29 100644
+--- a/spec/moneta/simple_leveldb_spec.rb
++++ b/spec/moneta/simple_leveldb_spec.rb
+@@ -1,151 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_leveldb" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.new(:LevelDB, :dir => File.join(make_tempdir, "simple_leveldb"), :logger => {:file => File.join(make_tempdir, 'simple_leveldb.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
+diff --git a/spec/moneta/simple_leveldb_with_expires_spec.rb b/spec/moneta/simple_leveldb_with_expires_spec.rb
+index 90d8900..e69de29 100644
+--- a/spec/moneta/simple_leveldb_with_expires_spec.rb
++++ b/spec/moneta/simple_leveldb_with_expires_spec.rb
+@@ -1,153 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_leveldb_with_expires" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.new(:LevelDB, :dir => File.join(make_tempdir, "simple_leveldb_with_expires"), :expires => true, :logger => {:file => File.join(make_tempdir, 'simple_leveldb_with_expires.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value_expires'
+-end
+diff --git a/spec/moneta/simple_localmemcache_spec.rb b/spec/moneta/simple_localmemcache_spec.rb
+index fac91fc..e69de29 100644
+--- a/spec/moneta/simple_localmemcache_spec.rb
++++ b/spec/moneta/simple_localmemcache_spec.rb
+@@ -1,152 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_localmemcache" do
+-  def features
+-    []
+-  end
+-
+-  def new_store
+-    Moneta.new(:LocalMemCache, :file => File.join(make_tempdir, "simple_localmemcache"), :logger => {:file => File.join(make_tempdir, 'simple_localmemcache.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'not_create'
+-  it_should_behave_like 'not_increment'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
+diff --git a/spec/moneta/simple_localmemcache_with_expires_spec.rb b/spec/moneta/simple_localmemcache_with_expires_spec.rb
+index e55271b..e69de29 100644
+--- a/spec/moneta/simple_localmemcache_with_expires_spec.rb
++++ b/spec/moneta/simple_localmemcache_with_expires_spec.rb
+@@ -1,153 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_localmemcache_with_expires" do
+-  def features
+-    [:expires]
+-  end
+-
+-  def new_store
+-    Moneta.new(:LocalMemCache, :file => File.join(make_tempdir, "simple_localmemcache_with_expires"), :expires => true, :logger => {:file => File.join(make_tempdir, 'simple_localmemcache_with_expires.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'not_create'
+-  it_should_behave_like 'not_increment'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value_expires'
+-end
+diff --git a/spec/moneta/simple_memcached_dalli_spec.rb b/spec/moneta/simple_memcached_dalli_spec.rb
+index 672a57a..e69de29 100644
+--- a/spec/moneta/simple_memcached_dalli_spec.rb
++++ b/spec/moneta/simple_memcached_dalli_spec.rb
+@@ -1,156 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_memcached_dalli" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.new(:MemcachedDalli, :namespace => "simple_memcached_dalli", :logger => {:file => File.join(make_tempdir, 'simple_memcached_dalli.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
+diff --git a/spec/moneta/simple_memcached_native_spec.rb b/spec/moneta/simple_memcached_native_spec.rb
+index 654fe31..e69de29 100644
+--- a/spec/moneta/simple_memcached_native_spec.rb
++++ b/spec/moneta/simple_memcached_native_spec.rb
+@@ -1,156 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_memcached_native" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.new(:MemcachedNative, :namespace => "simple_memcached_native", :logger => {:file => File.join(make_tempdir, 'simple_memcached_native.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
+diff --git a/spec/moneta/simple_memcached_spec.rb b/spec/moneta/simple_memcached_spec.rb
+index b475f83..e69de29 100644
+--- a/spec/moneta/simple_memcached_spec.rb
++++ b/spec/moneta/simple_memcached_spec.rb
+@@ -1,156 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_memcached" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.new(:Memcached, :namespace => "simple_memcached", :logger => {:file => File.join(make_tempdir, 'simple_memcached.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
+diff --git a/spec/moneta/simple_memory_with_snappy_compress_spec.rb b/spec/moneta/simple_memory_with_snappy_compress_spec.rb
+index b40a061..e69de29 100644
+--- a/spec/moneta/simple_memory_with_snappy_compress_spec.rb
++++ b/spec/moneta/simple_memory_with_snappy_compress_spec.rb
+@@ -1,116 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_memory_with_snappy_compress" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.new(:Memory, :compress => :snappy, :logger => {:file => File.join(make_tempdir, 'simple_memory_with_snappy_compress.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(::Snappy.inflate(value))
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'not_persist'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
+diff --git a/spec/moneta/simple_mongo_spec.rb b/spec/moneta/simple_mongo_spec.rb
+index 7bfcf48..e69de29 100644
+--- a/spec/moneta/simple_mongo_spec.rb
++++ b/spec/moneta/simple_mongo_spec.rb
+@@ -1,156 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_mongo" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.new(:Mongo, :db => 'simple_mongo', :logger => {:file => File.join(make_tempdir, 'simple_mongo.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
+diff --git a/spec/moneta/simple_redis_spec.rb b/spec/moneta/simple_redis_spec.rb
+index cf2d758..e69de29 100644
+--- a/spec/moneta/simple_redis_spec.rb
++++ b/spec/moneta/simple_redis_spec.rb
+@@ -1,156 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_redis" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.new(:Redis, :logger => {:file => File.join(make_tempdir, 'simple_redis.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
+diff --git a/spec/moneta/simple_restclient_spec.rb b/spec/moneta/simple_restclient_spec.rb
+index 71c31e9..e69de29 100644
+--- a/spec/moneta/simple_restclient_spec.rb
++++ b/spec/moneta/simple_restclient_spec.rb
+@@ -1,153 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_restclient" do
+-  start_restserver
+-  def features
+-    []
+-  end
+-
+-  def new_store
+-    Moneta.new(:RestClient, :url => 'http://localhost:8808/moneta/', :logger => {:file => File.join(make_tempdir, 'simple_restclient.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'not_create'
+-  it_should_behave_like 'not_increment'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
 diff --git a/spec/moneta/simple_sequel_spec.rb b/spec/moneta/simple_sequel_spec.rb
 index a1f91ae..6ae3725 100644
 --- a/spec/moneta/simple_sequel_spec.rb
@@ -207,3 +4406,1405 @@ index 9bd7130..8592955 100644
    end
  
    def load_value(value)
+diff --git a/spec/moneta/simple_tdb_spec.rb b/spec/moneta/simple_tdb_spec.rb
+index 0073627..e69de29 100644
+--- a/spec/moneta/simple_tdb_spec.rb
++++ b/spec/moneta/simple_tdb_spec.rb
+@@ -1,151 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_tdb" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.new(:TDB, :file => File.join(make_tempdir, "simple_tdb"), :logger => {:file => File.join(make_tempdir, 'simple_tdb.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
+diff --git a/spec/moneta/simple_tdb_with_expires_spec.rb b/spec/moneta/simple_tdb_with_expires_spec.rb
+index b6c0ec4..e69de29 100644
+--- a/spec/moneta/simple_tdb_with_expires_spec.rb
++++ b/spec/moneta/simple_tdb_with_expires_spec.rb
+@@ -1,153 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_tdb_with_expires" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.new(:TDB, :file => File.join(make_tempdir, "simple_tdb_with_expires"), :expires => true, :logger => {:file => File.join(make_tempdir, 'simple_tdb_with_expires.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value_expires'
+-end
+diff --git a/spec/moneta/simple_tokyotyrant_spec.rb b/spec/moneta/simple_tokyotyrant_spec.rb
+index 15d53a6..e69de29 100644
+--- a/spec/moneta/simple_tokyotyrant_spec.rb
++++ b/spec/moneta/simple_tokyotyrant_spec.rb
+@@ -1,154 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_tokyotyrant" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.new(:TokyoTyrant, :logger => {:file => File.join(make_tempdir, 'simple_tokyotyrant.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-end
+diff --git a/spec/moneta/simple_tokyotyrant_with_expires_spec.rb b/spec/moneta/simple_tokyotyrant_with_expires_spec.rb
+index 035a54e..e69de29 100644
+--- a/spec/moneta/simple_tokyotyrant_with_expires_spec.rb
++++ b/spec/moneta/simple_tokyotyrant_with_expires_spec.rb
+@@ -1,156 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "simple_tokyotyrant_with_expires" do
+-  def features
+-    [:create, :expires, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.new(:TokyoTyrant, :expires => true, :logger => {:file => File.join(make_tempdir, 'simple_tokyotyrant_with_expires.log')})
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'concurrent_create'
+-  it_should_behave_like 'concurrent_increment'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'create_expires'
+-  it_should_behave_like 'expires'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'marshallable_key'
+-  it_should_behave_like 'marshallable_value'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'persist_objectkey_objectvalue'
+-  it_should_behave_like 'persist_objectkey_stringvalue'
+-  it_should_behave_like 'persist_objectkey_hashvalue'
+-  it_should_behave_like 'persist_objectkey_booleanvalue'
+-  it_should_behave_like 'persist_objectkey_nilvalue'
+-  it_should_behave_like 'persist_objectkey_integervalue'
+-  it_should_behave_like 'persist_stringkey_objectvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_hashvalue'
+-  it_should_behave_like 'persist_stringkey_booleanvalue'
+-  it_should_behave_like 'persist_stringkey_nilvalue'
+-  it_should_behave_like 'persist_stringkey_integervalue'
+-  it_should_behave_like 'persist_hashkey_objectvalue'
+-  it_should_behave_like 'persist_hashkey_stringvalue'
+-  it_should_behave_like 'persist_hashkey_hashvalue'
+-  it_should_behave_like 'persist_hashkey_booleanvalue'
+-  it_should_behave_like 'persist_hashkey_nilvalue'
+-  it_should_behave_like 'persist_hashkey_integervalue'
+-  it_should_behave_like 'persist_booleankey_objectvalue'
+-  it_should_behave_like 'persist_booleankey_stringvalue'
+-  it_should_behave_like 'persist_booleankey_hashvalue'
+-  it_should_behave_like 'persist_booleankey_booleanvalue'
+-  it_should_behave_like 'persist_booleankey_nilvalue'
+-  it_should_behave_like 'persist_booleankey_integervalue'
+-  it_should_behave_like 'persist_nilkey_objectvalue'
+-  it_should_behave_like 'persist_nilkey_stringvalue'
+-  it_should_behave_like 'persist_nilkey_hashvalue'
+-  it_should_behave_like 'persist_nilkey_booleanvalue'
+-  it_should_behave_like 'persist_nilkey_nilvalue'
+-  it_should_behave_like 'persist_nilkey_integervalue'
+-  it_should_behave_like 'persist_integerkey_objectvalue'
+-  it_should_behave_like 'persist_integerkey_stringvalue'
+-  it_should_behave_like 'persist_integerkey_hashvalue'
+-  it_should_behave_like 'persist_integerkey_booleanvalue'
+-  it_should_behave_like 'persist_integerkey_nilvalue'
+-  it_should_behave_like 'persist_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value_expires'
+-end
+diff --git a/spec/moneta/transformer_bencode_spec.rb b/spec/moneta/transformer_bencode_spec.rb
+index 2d239c3..e69de29 100644
+--- a/spec/moneta/transformer_bencode_spec.rb
++++ b/spec/moneta/transformer_bencode_spec.rb
+@@ -1,54 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "transformer_bencode" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.build do
+-      use :Transformer, :key => :bencode, :value => :bencode
+-      adapter :Memory
+-    end
+-  end
+-
+-  def load_value(value)
+-    ::BEncode.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-  it 'compile transformer class' do
+-    store.should_not be_nil
+-    Moneta::Transformer::BencodeKeyBencodeValue.should_not be_nil
+-  end
+-end
+diff --git a/spec/moneta/transformer_bert_spec.rb b/spec/moneta/transformer_bert_spec.rb
+index 56eeb29..e69de29 100644
+--- a/spec/moneta/transformer_bert_spec.rb
++++ b/spec/moneta/transformer_bert_spec.rb
+@@ -1,54 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "transformer_bert" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.build do
+-      use :Transformer, :key => :bert, :value => :bert
+-      adapter :Memory
+-    end
+-  end
+-
+-  def load_value(value)
+-    ::BERT.decode(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-  it 'compile transformer class' do
+-    store.should_not be_nil
+-    Moneta::Transformer::BertKeyBertValue.should_not be_nil
+-  end
+-end
+diff --git a/spec/moneta/transformer_bson_spec.rb b/spec/moneta/transformer_bson_spec.rb
+index 23bcf28..e69de29 100644
+--- a/spec/moneta/transformer_bson_spec.rb
++++ b/spec/moneta/transformer_bson_spec.rb
+@@ -1,54 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "transformer_bson" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.build do
+-      use :Transformer, :key => :bson, :value => :bson
+-      adapter :Memory
+-    end
+-  end
+-
+-  def load_value(value)
+-    ::BSON.deserialize(value)['v']
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-  it 'compile transformer class' do
+-    store.should_not be_nil
+-    Moneta::Transformer::BsonKeyBsonValue.should_not be_nil
+-  end
+-end
+diff --git a/spec/moneta/transformer_bzip2_spec.rb b/spec/moneta/transformer_bzip2_spec.rb
+index 1180d38..e69de29 100644
+--- a/spec/moneta/transformer_bzip2_spec.rb
++++ b/spec/moneta/transformer_bzip2_spec.rb
+@@ -1,48 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "transformer_bzip2" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.build do
+-      use :Transformer, :value => :bzip2
+-      adapter :Memory
+-    end
+-  end
+-
+-  def load_value(value)
+-    ::Bzip2.uncompress(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-  it 'compile transformer class' do
+-    store.should_not be_nil
+-    Moneta::Transformer::Bzip2Value.should_not be_nil
+-  end
+-end
+diff --git a/spec/moneta/transformer_lzma_spec.rb b/spec/moneta/transformer_lzma_spec.rb
+index c24a29f..e69de29 100644
+--- a/spec/moneta/transformer_lzma_spec.rb
++++ b/spec/moneta/transformer_lzma_spec.rb
+@@ -1,48 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "transformer_lzma" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.build do
+-      use :Transformer, :value => :lzma
+-      adapter :Memory
+-    end
+-  end
+-
+-  def load_value(value)
+-    ::LZMA.decompress(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-  it 'compile transformer class' do
+-    store.should_not be_nil
+-    Moneta::Transformer::LzmaValue.should_not be_nil
+-  end
+-end
+diff --git a/spec/moneta/transformer_lzo_spec.rb b/spec/moneta/transformer_lzo_spec.rb
+index 1d8d8c8..e69de29 100644
+--- a/spec/moneta/transformer_lzo_spec.rb
++++ b/spec/moneta/transformer_lzo_spec.rb
+@@ -1,48 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "transformer_lzo" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.build do
+-      use :Transformer, :value => :lzo
+-      adapter :Memory
+-    end
+-  end
+-
+-  def load_value(value)
+-    ::LZO.decompress(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-  it 'compile transformer class' do
+-    store.should_not be_nil
+-    Moneta::Transformer::LzoValue.should_not be_nil
+-  end
+-end
+diff --git a/spec/moneta/transformer_msgpack_spec.rb b/spec/moneta/transformer_msgpack_spec.rb
+index be22155..e69de29 100644
+--- a/spec/moneta/transformer_msgpack_spec.rb
++++ b/spec/moneta/transformer_msgpack_spec.rb
+@@ -1,54 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "transformer_msgpack" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.build do
+-      use :Transformer, :key => :msgpack, :value => :msgpack
+-      adapter :Memory
+-    end
+-  end
+-
+-  def load_value(value)
+-    ::MessagePack.unpack(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-  it 'compile transformer class' do
+-    store.should_not be_nil
+-    Moneta::Transformer::MsgpackKeyMsgpackValue.should_not be_nil
+-  end
+-end
+diff --git a/spec/moneta/transformer_ox_spec.rb b/spec/moneta/transformer_ox_spec.rb
+index e2c640a..e69de29 100644
+--- a/spec/moneta/transformer_ox_spec.rb
++++ b/spec/moneta/transformer_ox_spec.rb
+@@ -1,120 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "transformer_ox" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.build do
+-      use :Transformer, :key => :ox, :value => :ox
+-      adapter :Memory
+-    end
+-  end
+-
+-  def load_value(value)
+-    ::Ox.parse_obj(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'null_objectkey_objectvalue'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_objectkey_hashvalue'
+-  it_should_behave_like 'null_objectkey_booleanvalue'
+-  it_should_behave_like 'null_objectkey_nilvalue'
+-  it_should_behave_like 'null_objectkey_integervalue'
+-  it_should_behave_like 'null_stringkey_objectvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_booleanvalue'
+-  it_should_behave_like 'null_stringkey_nilvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_objectvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_booleanvalue'
+-  it_should_behave_like 'null_hashkey_nilvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_booleankey_objectvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_booleankey_hashvalue'
+-  it_should_behave_like 'null_booleankey_booleanvalue'
+-  it_should_behave_like 'null_booleankey_nilvalue'
+-  it_should_behave_like 'null_booleankey_integervalue'
+-  it_should_behave_like 'null_nilkey_objectvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_nilkey_hashvalue'
+-  it_should_behave_like 'null_nilkey_booleanvalue'
+-  it_should_behave_like 'null_nilkey_nilvalue'
+-  it_should_behave_like 'null_nilkey_integervalue'
+-  it_should_behave_like 'null_integerkey_objectvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_booleanvalue'
+-  it_should_behave_like 'null_integerkey_nilvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_objectkey_objectvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_hashvalue'
+-  it_should_behave_like 'returndifferent_stringkey_objectvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_objectvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_booleankey_objectvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_hashvalue'
+-  it_should_behave_like 'returndifferent_nilkey_objectvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_objectvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_objectvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_hashvalue'
+-  it_should_behave_like 'store_objectkey_booleanvalue'
+-  it_should_behave_like 'store_objectkey_nilvalue'
+-  it_should_behave_like 'store_objectkey_integervalue'
+-  it_should_behave_like 'store_stringkey_objectvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_booleanvalue'
+-  it_should_behave_like 'store_stringkey_nilvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_objectvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_booleanvalue'
+-  it_should_behave_like 'store_hashkey_nilvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_booleankey_objectvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_booleankey_hashvalue'
+-  it_should_behave_like 'store_booleankey_booleanvalue'
+-  it_should_behave_like 'store_booleankey_nilvalue'
+-  it_should_behave_like 'store_booleankey_integervalue'
+-  it_should_behave_like 'store_nilkey_objectvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_nilkey_hashvalue'
+-  it_should_behave_like 'store_nilkey_booleanvalue'
+-  it_should_behave_like 'store_nilkey_nilvalue'
+-  it_should_behave_like 'store_nilkey_integervalue'
+-  it_should_behave_like 'store_integerkey_objectvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_booleanvalue'
+-  it_should_behave_like 'store_integerkey_nilvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-  it 'compile transformer class' do
+-    store.should_not be_nil
+-    Moneta::Transformer::OxKeyOxValue.should_not be_nil
+-  end
+-end
+diff --git a/spec/moneta/transformer_quicklz_spec.rb b/spec/moneta/transformer_quicklz_spec.rb
+index 67ba16c..e69de29 100644
+--- a/spec/moneta/transformer_quicklz_spec.rb
++++ b/spec/moneta/transformer_quicklz_spec.rb
+@@ -1,48 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "transformer_quicklz" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.build do
+-      use :Transformer, :value => :quicklz
+-      adapter :Memory
+-    end
+-  end
+-
+-  def load_value(value)
+-    ::QuickLZ.decompress(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-  it 'compile transformer class' do
+-    store.should_not be_nil
+-    Moneta::Transformer::QuicklzValue.should_not be_nil
+-  end
+-end
+diff --git a/spec/moneta/transformer_snappy_spec.rb b/spec/moneta/transformer_snappy_spec.rb
+index 790a806..e69de29 100644
+--- a/spec/moneta/transformer_snappy_spec.rb
++++ b/spec/moneta/transformer_snappy_spec.rb
+@@ -1,48 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "transformer_snappy" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.build do
+-      use :Transformer, :value => :snappy
+-      adapter :Memory
+-    end
+-  end
+-
+-  def load_value(value)
+-    ::Snappy.inflate(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'null_objectkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_booleankey_stringvalue'
+-  it_should_behave_like 'null_nilkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_objectkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_booleankey_stringvalue'
+-  it_should_behave_like 'returndifferent_nilkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'store_objectkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_booleankey_stringvalue'
+-  it_should_behave_like 'store_nilkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-  it 'compile transformer class' do
+-    store.should_not be_nil
+-    Moneta::Transformer::SnappyValue.should_not be_nil
+-  end
+-end
+diff --git a/spec/moneta/transformer_tnet_spec.rb b/spec/moneta/transformer_tnet_spec.rb
+index d5d05eb..e69de29 100644
+--- a/spec/moneta/transformer_tnet_spec.rb
++++ b/spec/moneta/transformer_tnet_spec.rb
+@@ -1,54 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "transformer_tnet" do
+-  def features
+-    [:create, :increment]
+-  end
+-
+-  def new_store
+-    Moneta.build do
+-     use :Transformer, :key => :tnet, :value => :tnet
+-     adapter :Memory
+-    end
+-  end
+-
+-  def load_value(value)
+-    ::TNetstring.parse(value).first
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'null_stringkey_hashvalue'
+-  it_should_behave_like 'null_stringkey_integervalue'
+-  it_should_behave_like 'null_hashkey_stringvalue'
+-  it_should_behave_like 'null_hashkey_hashvalue'
+-  it_should_behave_like 'null_hashkey_integervalue'
+-  it_should_behave_like 'null_integerkey_stringvalue'
+-  it_should_behave_like 'null_integerkey_hashvalue'
+-  it_should_behave_like 'null_integerkey_integervalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_hashvalue'
+-  it_should_behave_like 'returndifferent_hashkey_stringvalue'
+-  it_should_behave_like 'returndifferent_hashkey_hashvalue'
+-  it_should_behave_like 'returndifferent_integerkey_stringvalue'
+-  it_should_behave_like 'returndifferent_integerkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_hashvalue'
+-  it_should_behave_like 'store_stringkey_integervalue'
+-  it_should_behave_like 'store_hashkey_stringvalue'
+-  it_should_behave_like 'store_hashkey_hashvalue'
+-  it_should_behave_like 'store_hashkey_integervalue'
+-  it_should_behave_like 'store_integerkey_stringvalue'
+-  it_should_behave_like 'store_integerkey_hashvalue'
+-  it_should_behave_like 'store_integerkey_integervalue'
+-  it_should_behave_like 'store_large'
+-  it_should_behave_like 'transform_value'
+-  it 'compile transformer class' do
+-    store.should_not be_nil
+-    Moneta::Transformer::TnetKeyTnetValue.should_not be_nil
+-  end
+-end
+diff --git a/spec/moneta/weak_create_spec.rb b/spec/moneta/weak_create_spec.rb
+index ff0ac53..e69de29 100644
+--- a/spec/moneta/weak_create_spec.rb
++++ b/spec/moneta/weak_create_spec.rb
+@@ -1,30 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "weak_create" do
+-  def features
+-    [:create]
+-  end
+-
+-  def new_store
+-    Moneta.build do
+-      use :WeakCreate
+-      adapter :Couch, :db => 'weak_create'
+-    end
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'create'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'not_increment'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/moneta/weak_increment_spec.rb b/spec/moneta/weak_increment_spec.rb
+index 2211bca..e69de29 100644
+--- a/spec/moneta/weak_increment_spec.rb
++++ b/spec/moneta/weak_increment_spec.rb
+@@ -1,30 +0,0 @@
+-# Generated by generate-specs
+-require 'helper'
+-
+-describe_moneta "weak_increment" do
+-  def features
+-    [:increment]
+-  end
+-
+-  def new_store
+-    Moneta.build do
+-      use :WeakIncrement
+-      adapter :Couch, :db => 'weak_increment'
+-    end
+-  end
+-
+-  def load_value(value)
+-    Marshal.load(value)
+-  end
+-
+-  include_context 'setup_store'
+-  it_should_behave_like 'features'
+-  it_should_behave_like 'increment'
+-  it_should_behave_like 'multiprocess'
+-  it_should_behave_like 'not_create'
+-  it_should_behave_like 'null_stringkey_stringvalue'
+-  it_should_behave_like 'persist_stringkey_stringvalue'
+-  it_should_behave_like 'returndifferent_stringkey_stringvalue'
+-  it_should_behave_like 'store_stringkey_stringvalue'
+-  it_should_behave_like 'store_large'
+-end
+diff --git a/spec/monetaspecs.rb b/spec/monetaspecs.rb
+index 528922b..fc8180b 100644
+--- a/spec/monetaspecs.rb
++++ b/spec/monetaspecs.rb
+@@ -17174,6 +17174,8 @@ shared_examples_for 'concurrent_increment' do
+   end
+ 
+   it 'have atomic increment across multiple processes' do
++    pending "a more reliable implementation suitable for Debian packaging"
++
+     a = increment_thread('a')
+     b = increment_thread('b')
+     c = increment_thread('c')
diff --git a/debian/patches/0100-Do-not-run-action_dispatch-specs.patch b/debian/patches/0100-Do-not-run-action_dispatch-specs.patch
new file mode 100644
index 0000000..fcf7546
--- /dev/null
+++ b/debian/patches/0100-Do-not-run-action_dispatch-specs.patch
@@ -0,0 +1,23 @@
+From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Bobbio?= <lunar at debian.org>
+Date: Wed, 27 Mar 2013 09:24:51 +0000
+Subject: Do not run action_dispatch specs
+
+It's not available in Debian yet.
+---
+ Rakefile |    3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/Rakefile b/Rakefile
+index 785b5a5..a86feb8 100644
+--- a/Rakefile
++++ b/Rakefile
+@@ -44,6 +44,9 @@ task :test do
+   unstable = specs.select {|s| s =~ unstable_re }
+   specs -= unstable
+ 
++  # action_dispatch is not available in Debian
++  specs.delete_if { |s| s =~ /spec\/action_dispatch\// }
++
+   if group =~ /^(\d+)\/(\d+)$/
+     n = $1.to_i
+     max = $2.to_i
diff --git a/debian/patches/series b/debian/patches/series
index c3305af..3bc4508 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,5 @@
 0001-Allow-to-specify-the-MySQL-socket-through-the-MYSQL_.patch
+0002-Mark-concurrent-increment-example-as-pending.patch
+0003-Skip-specs-for-which-we-miss-a-dependency.patch
 0099-Re-generate-specs-using-script-generate-specs.patch
+0100-Do-not-run-action_dispatch-specs.patch

-- 
ruby-moneta.git



More information about the Pkg-ruby-extras-commits mailing list