moneta 0.7.11 → 0.7.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/.travis.yml +2 -0
  2. data/CHANGES +5 -0
  3. data/Gemfile +5 -5
  4. data/Rakefile +2 -2
  5. data/lib/moneta.rb +1 -1
  6. data/lib/moneta/adapters/activerecord.rb +15 -5
  7. data/lib/moneta/adapters/cassandra.rb +1 -2
  8. data/lib/moneta/adapters/datamapper.rb +1 -1
  9. data/lib/moneta/adapters/file.rb +17 -17
  10. data/lib/moneta/adapters/sequel.rb +21 -16
  11. data/lib/moneta/adapters/sqlite.rb +2 -0
  12. data/lib/moneta/transformer/config.rb +1 -1
  13. data/lib/moneta/version.rb +1 -1
  14. data/script/benchmarks +9 -9
  15. data/script/generate-specs +73 -27
  16. data/script/install-bundle +1 -0
  17. data/spec/helper.rb +5 -3
  18. data/spec/moneta/adapter_activerecord_spec.rb +5 -3
  19. data/spec/moneta/adapter_client_spec.rb +2 -0
  20. data/spec/moneta/adapter_datamapper_spec.rb +6 -5
  21. data/spec/moneta/adapter_file_spec.rb +2 -0
  22. data/spec/moneta/adapter_hbase_spec.rb +1 -0
  23. data/spec/moneta/adapter_memcached_dalli_spec.rb +2 -0
  24. data/spec/moneta/adapter_memcached_dalli_with_default_expires_spec.rb +2 -0
  25. data/spec/moneta/adapter_memcached_native_spec.rb +2 -0
  26. data/spec/moneta/adapter_memcached_native_with_default_expires_spec.rb +2 -0
  27. data/spec/moneta/adapter_memcached_spec.rb +2 -0
  28. data/spec/moneta/adapter_memcached_with_default_expires_spec.rb +2 -0
  29. data/spec/moneta/adapter_mongo_spec.rb +2 -0
  30. data/spec/moneta/adapter_mongo_with_default_expires_spec.rb +2 -0
  31. data/spec/moneta/adapter_pstore_spec.rb +2 -0
  32. data/spec/moneta/adapter_redis_spec.rb +2 -0
  33. data/spec/moneta/adapter_redis_with_default_expires_spec.rb +2 -0
  34. data/spec/moneta/adapter_sequel_spec.rb +3 -1
  35. data/spec/moneta/adapter_tokyotyrant_spec.rb +2 -0
  36. data/spec/moneta/adapter_yaml_spec.rb +2 -0
  37. data/spec/moneta/cache_file_memory_spec.rb +2 -0
  38. data/spec/moneta/expires_file_spec.rb +2 -0
  39. data/spec/moneta/pool_spec.rb +2 -0
  40. data/spec/moneta/proxy_redis_spec.rb +2 -0
  41. data/spec/moneta/shared_tcp_spec.rb +2 -0
  42. data/spec/moneta/shared_unix_spec.rb +2 -0
  43. data/spec/moneta/simple_activerecord_spec.rb +3 -1
  44. data/spec/moneta/simple_activerecord_with_expires_spec.rb +3 -1
  45. data/spec/moneta/simple_client_tcp_spec.rb +2 -0
  46. data/spec/moneta/simple_client_unix_spec.rb +2 -0
  47. data/spec/moneta/simple_datamapper_spec.rb +2 -1
  48. data/spec/moneta/simple_datamapper_with_expires_spec.rb +2 -1
  49. data/spec/moneta/simple_datamapper_with_repository_spec.rb +2 -1
  50. data/spec/moneta/simple_file_spec.rb +2 -0
  51. data/spec/moneta/simple_file_with_expires_spec.rb +2 -0
  52. data/spec/moneta/simple_hashfile_spec.rb +2 -0
  53. data/spec/moneta/simple_hashfile_with_expires_spec.rb +2 -0
  54. data/spec/moneta/simple_hbase_spec.rb +1 -0
  55. data/spec/moneta/simple_hbase_with_expires_spec.rb +2 -0
  56. data/spec/moneta/simple_memcached_dalli_spec.rb +2 -0
  57. data/spec/moneta/simple_memcached_native_spec.rb +2 -0
  58. data/spec/moneta/simple_memcached_spec.rb +2 -0
  59. data/spec/moneta/simple_mongo_spec.rb +2 -0
  60. data/spec/moneta/simple_pstore_spec.rb +2 -0
  61. data/spec/moneta/simple_pstore_with_expires_spec.rb +2 -0
  62. data/spec/moneta/simple_redis_spec.rb +2 -0
  63. data/spec/moneta/simple_sequel_spec.rb +3 -1
  64. data/spec/moneta/simple_sequel_with_expires_spec.rb +3 -1
  65. data/spec/moneta/simple_tokyotyrant_spec.rb +2 -0
  66. data/spec/moneta/simple_tokyotyrant_with_expires_spec.rb +2 -0
  67. data/spec/moneta/simple_yaml_spec.rb +2 -0
  68. data/spec/moneta/simple_yaml_with_expires_spec.rb +2 -0
  69. data/spec/moneta/stack_memory_file_spec.rb +2 -0
  70. data/spec/monetaspecs.rb +50 -0
  71. data/spec/rack/moneta_cookies_spec.rb +2 -1
  72. metadata +2 -2
@@ -15,6 +15,8 @@ describe_moneta "simple_file" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'features'
20
22
  it_should_behave_like 'increment'
@@ -15,6 +15,8 @@ describe_moneta "simple_file_with_expires" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'create_expires'
20
22
  it_should_behave_like 'expires'
@@ -15,6 +15,8 @@ describe_moneta "simple_hashfile" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'features'
20
22
  it_should_behave_like 'increment'
@@ -15,6 +15,8 @@ describe_moneta "simple_hashfile_with_expires" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'create_expires'
20
22
  it_should_behave_like 'expires'
@@ -15,6 +15,7 @@ describe_moneta "simple_hbase" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_increment'
18
19
  it_should_behave_like 'features'
19
20
  it_should_behave_like 'increment'
20
21
  it_should_behave_like 'marshallable_key'
@@ -15,6 +15,8 @@ describe_moneta "simple_hbase_with_expires" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'create_expires'
20
22
  it_should_behave_like 'expires'
@@ -15,6 +15,8 @@ describe_moneta "simple_memcached_dalli" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'create_expires'
20
22
  it_should_behave_like 'expires'
@@ -15,6 +15,8 @@ describe_moneta "simple_memcached_native" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'create_expires'
20
22
  it_should_behave_like 'expires'
@@ -15,6 +15,8 @@ describe_moneta "simple_memcached" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'create_expires'
20
22
  it_should_behave_like 'expires'
@@ -15,6 +15,8 @@ describe_moneta "simple_mongo" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'create_expires'
20
22
  it_should_behave_like 'expires'
@@ -15,6 +15,8 @@ describe_moneta "simple_pstore" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'features'
20
22
  it_should_behave_like 'increment'
@@ -15,6 +15,8 @@ describe_moneta "simple_pstore_with_expires" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'create_expires'
20
22
  it_should_behave_like 'expires'
@@ -15,6 +15,8 @@ describe_moneta "simple_redis" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'create_expires'
20
22
  it_should_behave_like 'expires'
@@ -7,7 +7,7 @@ describe_moneta "simple_sequel" do
7
7
  end
8
8
 
9
9
  def new_store
10
- Moneta.new(:Sequel, :db => (defined?(JRUBY_VERSION) ? "jdbc:sqlite:" : "sqlite:") + File.join(make_tempdir, "simple_sequel"), :logger => {:file => File.join(make_tempdir, 'simple_sequel.log')})
10
+ Moneta.new(:Sequel, :db => (defined?(JRUBY_VERSION) ? "jdbc:mysql" : "mysql2") + "://root:@localhost/moneta", :table => "simple_sequel", :logger => {:file => File.join(make_tempdir, 'simple_sequel.log')})
11
11
  end
12
12
 
13
13
  def load_value(value)
@@ -15,6 +15,8 @@ describe_moneta "simple_sequel" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'features'
20
22
  it_should_behave_like 'increment'
@@ -7,7 +7,7 @@ describe_moneta "simple_sequel_with_expires" do
7
7
  end
8
8
 
9
9
  def new_store
10
- Moneta.new(:Sequel, :db => (defined?(JRUBY_VERSION) ? "jdbc:sqlite:" : "sqlite:") + File.join(make_tempdir, "simple_sequel_with_expires"), :expires => true, :logger => {:file => File.join(make_tempdir, 'simple_sequel_with_expires.log')})
10
+ Moneta.new(:Sequel, :db => (defined?(JRUBY_VERSION) ? "jdbc:mysql" : "mysql2") + "://root:@localhost/moneta", :table => "simple_sequel_with_expires", :expires => true, :logger => {:file => File.join(make_tempdir, 'simple_sequel_with_expires.log')})
11
11
  end
12
12
 
13
13
  def load_value(value)
@@ -15,6 +15,8 @@ describe_moneta "simple_sequel_with_expires" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'create_expires'
20
22
  it_should_behave_like 'expires'
@@ -15,6 +15,8 @@ describe_moneta "simple_tokyotyrant" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'features'
20
22
  it_should_behave_like 'increment'
@@ -15,6 +15,8 @@ describe_moneta "simple_tokyotyrant_with_expires" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'create_expires'
20
22
  it_should_behave_like 'expires'
@@ -15,6 +15,8 @@ describe_moneta "simple_yaml" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'features'
20
22
  it_should_behave_like 'increment'
@@ -15,6 +15,8 @@ describe_moneta "simple_yaml_with_expires" do
15
15
  end
16
16
 
17
17
  include_context 'setup_store'
18
+ it_should_behave_like 'concurrent_create'
19
+ it_should_behave_like 'concurrent_increment'
18
20
  it_should_behave_like 'create'
19
21
  it_should_behave_like 'create_expires'
20
22
  it_should_behave_like 'expires'
@@ -20,6 +20,8 @@ describe_moneta "stack_memory_file" do
20
20
  end
21
21
 
22
22
  include_context 'setup_store'
23
+ it_should_behave_like 'concurrent_create'
24
+ it_should_behave_like 'concurrent_increment'
23
25
  it_should_behave_like 'create'
24
26
  it_should_behave_like 'features'
25
27
  it_should_behave_like 'increment'
data/spec/monetaspecs.rb CHANGED
@@ -17142,6 +17142,56 @@ shared_examples_for 'not_increment' do
17142
17142
  end
17143
17143
  end
17144
17144
 
17145
+ #################### concurrent_increment ####################
17146
+
17147
+ shared_examples_for 'concurrent_increment' do
17148
+ def increment_thread(name)
17149
+ Thread.new do
17150
+ s = new_store
17151
+ 1000.times do |i|
17152
+ s.increment('counter')
17153
+ s.store("#{name}#{i}", i.to_s, :expires => false)
17154
+ sleep 0.01 if i % 100 == 0
17155
+ end
17156
+ s.close
17157
+ end
17158
+ end
17159
+
17160
+ it 'have atomic increment across multiple processes' do
17161
+ a = increment_thread('a')
17162
+ b = increment_thread('b')
17163
+ a.join
17164
+ b.join
17165
+ 1000.times do |i|
17166
+ store["a#{i}"].should == i.to_s
17167
+ store["b#{i}"].should == i.to_s
17168
+ end
17169
+ store.raw['counter'].should == 2000.to_s
17170
+ end
17171
+ end
17172
+
17173
+ #################### concurrent_create ####################
17174
+
17175
+ shared_examples_for 'concurrent_create' do
17176
+ def create_thread(name)
17177
+ a = Thread.new do
17178
+ s = new_store
17179
+ 1000.times do |i|
17180
+ s[i.to_s].should == name if s.create(i.to_s, name, :expires => false)
17181
+ sleep 0.01 if i % 100 == 0
17182
+ end
17183
+ s.close
17184
+ end
17185
+ end
17186
+
17187
+ it 'have atomic create across multiple processes' do
17188
+ a = create_thread('a')
17189
+ b = create_thread('b')
17190
+ a.join
17191
+ b.join
17192
+ end
17193
+ end
17194
+
17145
17195
  #################### increment ####################
17146
17196
 
17147
17197
  shared_examples_for 'increment' do
@@ -43,7 +43,8 @@ describe Rack::MonetaCookies do
43
43
  get 'key' => 'value' do
44
44
  @store.delete('key')
45
45
  end
46
- expect( @response['Set-Cookie'] ).to eql('key=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 -0000')
46
+ expect( @response['Set-Cookie'] ).to match(/key=;/)
47
+ expect( @response['Set-Cookie'] ).to match(/\s+expires=.*?1970/)
47
48
  end
48
49
 
49
50
  it 'should accept a config block' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moneta
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.11
4
+ version: 0.7.12
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-02-03 00:00:00.000000000 Z
14
+ date: 2013-02-04 00:00:00.000000000 Z
15
15
  dependencies: []
16
16
  description: A unified interface to key/value stores
17
17
  email: