moneta 1.2.0 → 1.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +418 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +27 -9
- data/CHANGES +28 -0
- data/CONTRIBUTORS +4 -2
- data/Gemfile +12 -8
- data/README.md +20 -18
- data/feature_matrix.yaml +2 -11
- data/lib/moneta.rb +9 -9
- data/lib/moneta/adapters/client.rb +56 -19
- data/lib/moneta/adapters/couch.rb +5 -0
- data/lib/moneta/adapters/mongo.rb +264 -7
- data/lib/moneta/adapters/redis.rb +5 -1
- data/lib/moneta/adapters/sequel.rb +45 -464
- data/lib/moneta/adapters/sequel/mysql.rb +66 -0
- data/lib/moneta/adapters/sequel/postgres.rb +80 -0
- data/lib/moneta/adapters/sequel/postgres_hstore.rb +240 -0
- data/lib/moneta/adapters/sequel/sqlite.rb +57 -0
- data/lib/moneta/adapters/sqlite.rb +7 -7
- data/lib/moneta/builder.rb +2 -2
- data/lib/moneta/create_support.rb +21 -0
- data/lib/moneta/dbm_adapter.rb +31 -0
- data/lib/moneta/{mixins.rb → defaults.rb} +1 -302
- data/lib/moneta/each_key_support.rb +27 -0
- data/lib/moneta/expires_support.rb +60 -0
- data/lib/moneta/hash_adapter.rb +68 -0
- data/lib/moneta/increment_support.rb +16 -0
- data/lib/moneta/lock.rb +6 -1
- data/lib/moneta/nil_values.rb +35 -0
- data/lib/moneta/option_support.rb +51 -0
- data/lib/moneta/pool.rb +38 -6
- data/lib/moneta/proxy.rb +1 -1
- data/lib/moneta/server.rb +215 -61
- data/lib/moneta/shared.rb +13 -7
- data/lib/moneta/transformer.rb +50 -8
- data/lib/moneta/transformer/config.rb +59 -40
- data/lib/moneta/transformer/helper.rb +2 -2
- data/lib/moneta/transformer/helper/bson.rb +5 -15
- data/lib/moneta/version.rb +1 -1
- data/lib/rack/cache/moneta.rb +14 -15
- data/moneta.gemspec +14 -8
- data/script/benchmarks +7 -3
- data/script/contributors +11 -6
- data/script/start-couchdb +27 -0
- data/script/start-hbase +2 -2
- data/script/start-services +3 -3
- data/spec/active_support/cache_moneta_store_spec.rb +37 -39
- data/spec/features/concurrent_increment.rb +2 -3
- data/spec/features/create_expires.rb +15 -15
- data/spec/features/default_expires.rb +11 -12
- data/spec/features/expires.rb +215 -210
- data/spec/features/store.rb +3 -3
- data/spec/helper.rb +33 -41
- data/spec/moneta/adapters/activerecord/adapter_activerecord_existing_connection_spec.rb +3 -1
- data/spec/moneta/adapters/activerecord/adapter_activerecord_spec.rb +15 -7
- data/spec/moneta/adapters/activerecord/standard_activerecord_spec.rb +6 -3
- data/spec/moneta/adapters/activerecord/standard_activerecord_with_expires_spec.rb +6 -3
- data/spec/moneta/adapters/activesupportcache/adapter_activesupportcache_spec.rb +3 -3
- data/spec/moneta/adapters/activesupportcache/adapter_activesupportcache_with_default_expires_spec.rb +2 -2
- data/spec/moneta/adapters/cassandra/standard_cassandra_spec.rb +1 -1
- data/spec/moneta/adapters/client/adapter_client_spec.rb +6 -6
- data/spec/moneta/adapters/client/client_helper.rb +24 -0
- data/spec/moneta/adapters/client/standard_client_tcp_spec.rb +8 -8
- data/spec/moneta/adapters/client/standard_client_unix_spec.rb +23 -7
- data/spec/moneta/adapters/couch/adapter_couch_spec.rb +1 -1
- data/spec/moneta/adapters/couch/standard_couch_spec.rb +2 -2
- data/spec/moneta/adapters/couch/standard_couch_with_expires_spec.rb +2 -2
- data/spec/moneta/adapters/datamapper/adapter_datamapper_spec.rb +25 -8
- data/spec/moneta/adapters/datamapper/standard_datamapper_spec.rb +2 -2
- data/spec/moneta/adapters/datamapper/standard_datamapper_with_expires_spec.rb +2 -2
- data/spec/moneta/adapters/datamapper/standard_datamapper_with_repository_spec.rb +2 -2
- data/spec/moneta/adapters/daybreak/standard_daybreak_spec.rb +1 -1
- data/spec/moneta/adapters/daybreak/standard_daybreak_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/dbm/standard_dbm_spec.rb +1 -1
- data/spec/moneta/adapters/dbm/standard_dbm_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/file/standard_file_spec.rb +2 -2
- data/spec/moneta/adapters/file/standard_file_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/gdbm/standard_gdbm_spec.rb +1 -1
- data/spec/moneta/adapters/gdbm/standard_gdbm_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/kyotocabinet/adapter_kyotocabinet_spec.rb +1 -1
- data/spec/moneta/adapters/kyotocabinet/standard_kyotocabinet_spec.rb +2 -2
- data/spec/moneta/adapters/kyotocabinet/standard_kyotocabinet_with_expires_spec.rb +2 -2
- data/spec/moneta/adapters/leveldb/standard_leveldb_spec.rb +1 -1
- data/spec/moneta/adapters/leveldb/standard_leveldb_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/lmdb/standard_lmdb_spec.rb +1 -1
- data/spec/moneta/adapters/lmdb/standard_lmdb_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/lruhash/standard_lruhash_spec.rb +1 -1
- data/spec/moneta/adapters/lruhash/standard_lruhash_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/memcached/dalli/adapter_memcached_dalli_spec.rb +13 -3
- data/spec/moneta/adapters/memcached/native/adapter_memcached_native_spec.rb +13 -3
- data/spec/moneta/adapters/memory/standard_memory_spec.rb +1 -1
- data/spec/moneta/adapters/memory/standard_memory_with_compress_spec.rb +1 -1
- data/spec/moneta/adapters/memory/standard_memory_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/memory/standard_memory_with_json_key_serializer_spec.rb +1 -1
- data/spec/moneta/adapters/memory/standard_memory_with_json_serializer_spec.rb +1 -1
- data/spec/moneta/adapters/memory/standard_memory_with_json_value_serializer_spec.rb +2 -2
- data/spec/moneta/adapters/memory/standard_memory_with_prefix_spec.rb +39 -2
- data/spec/moneta/adapters/memory/standard_memory_with_snappy_compress_spec.rb +2 -2
- data/spec/moneta/adapters/mongo/adapter_mongo_spec.rb +32 -2
- data/spec/moneta/adapters/mongo/adapter_mongo_with_default_expires_spec.rb +6 -4
- data/spec/moneta/adapters/mongo/standard_mongo_spec.rb +2 -2
- data/spec/moneta/adapters/pstore/standard_pstore_spec.rb +1 -1
- data/spec/moneta/adapters/pstore/standard_pstore_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/redis/adapter_redis_spec.rb +13 -3
- data/spec/moneta/adapters/redis/standard_redis_spec.rb +9 -2
- data/spec/moneta/adapters/sdbm/standard_sdbm_spec.rb +1 -1
- data/spec/moneta/adapters/sdbm/standard_sdbm_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/sequel/adapter_sequel_spec.rb +11 -38
- data/spec/moneta/adapters/sequel/helper.rb +42 -0
- data/spec/moneta/adapters/sequel/standard_sequel_spec.rb +6 -12
- data/spec/moneta/adapters/sequel/standard_sequel_with_expires_spec.rb +9 -10
- data/spec/moneta/adapters/sqlite/adapter_sqlite_spec.rb +1 -1
- data/spec/moneta/adapters/sqlite/standard_sqlite_spec.rb +2 -2
- data/spec/moneta/adapters/sqlite/standard_sqlite_with_expires_spec.rb +2 -2
- data/spec/moneta/adapters/tdb/standard_tdb_spec.rb +1 -1
- data/spec/moneta/adapters/tdb/standard_tdb_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/tokyocabinet/standard_tokyocabinet_spec.rb +1 -1
- data/spec/moneta/adapters/tokyocabinet/standard_tokyocabinet_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/yaml/standard_yaml_spec.rb +1 -1
- data/spec/moneta/adapters/yaml/standard_yaml_with_expires_spec.rb +1 -1
- data/spec/moneta/builder_spec.rb +22 -0
- data/spec/moneta/proxies/expires/expires_file_spec.rb +1 -1
- data/spec/moneta/proxies/pool/pool_spec.rb +31 -3
- data/spec/moneta/proxies/shared/shared_tcp_spec.rb +14 -4
- data/spec/moneta/proxies/shared/shared_unix_spec.rb +14 -4
- data/spec/moneta/proxies/transformer/transformer_bencode_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_bert_spec.rb +3 -3
- data/spec/moneta/proxies/transformer/transformer_bson_spec.rb +2 -2
- data/spec/moneta/proxies/transformer/transformer_json_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_key_marshal_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_key_yaml_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_base64_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_escape_spec.rb +8 -4
- data/spec/moneta/proxies/transformer/transformer_marshal_hex_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_hmac_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_prefix_base64_spec.rb +33 -0
- data/spec/moneta/proxies/transformer/transformer_marshal_prefix_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_qp_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_urlsafe_base64_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_uuencode_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_msgpack_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_ox_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_php_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_tnet_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_yaml_spec.rb +2 -2
- data/spec/moneta/proxies/weak_each_key/weak_each_key_spec.rb +0 -2
- data/spec/restserver.rb +15 -0
- metadata +47 -66
- data/.travis.yml +0 -140
- data/lib/moneta/adapters/mongo/base.rb +0 -103
- data/lib/moneta/adapters/mongo/moped.rb +0 -163
- data/lib/moneta/adapters/mongo/official.rb +0 -156
- data/script/reconfigure-couchdb +0 -13
- data/spec/moneta/adapters/memcached/dalli/adapter_memcached_dalli_with_default_expires_spec.rb +0 -15
- data/spec/moneta/adapters/memcached/native/adapter_memcached_native_with_default_expires_spec.rb +0 -15
- data/spec/moneta/adapters/mongo/adapter_mongo_moped_spec.rb +0 -25
- data/spec/moneta/adapters/mongo/adapter_mongo_moped_with_default_expires_spec.rb +0 -12
- data/spec/moneta/adapters/mongo/adapter_mongo_official_spec.rb +0 -25
- data/spec/moneta/adapters/mongo/adapter_mongo_official_with_default_expires_spec.rb +0 -12
- data/spec/moneta/adapters/mongo/standard_mongo_moped_spec.rb +0 -7
- data/spec/moneta/adapters/mongo/standard_mongo_official_spec.rb +0 -7
- data/spec/moneta/adapters/redis/adapter_redis_with_default_expires_spec.rb +0 -10
- data/spec/moneta/proxies/proxy/proxy_redis_spec.rb +0 -13
- data/spec/quality_spec.rb +0 -51
data/spec/features/store.rb
CHANGED
@@ -178,7 +178,7 @@ shared_examples :store do
|
|
178
178
|
shared_examples :merge! do
|
179
179
|
it 'stores values' do
|
180
180
|
moneta_property_of(keys: 3, values: 3).check do |keys:, values:|
|
181
|
-
expect(store.public_send(method, pairs.call(keys[0] => values[0], keys[1] => values[1], keys[2] => values[2]))).to be store
|
181
|
+
expect(store.public_send(method, pairs.call({ keys[0] => values[0], keys[1] => values[1], keys[2] => values[2] }))).to be store
|
182
182
|
expect(store.key?(keys[0])).to be true
|
183
183
|
expect(store[keys[0]]).to eq values[0]
|
184
184
|
expect(store.key?(keys[1])).to be true
|
@@ -192,7 +192,7 @@ shared_examples :store do
|
|
192
192
|
it 'overwrites existing values' do
|
193
193
|
moneta_property_of(keys: 2, values: 3).check do |keys:, values:|
|
194
194
|
expect(store[keys[0]] = values[0]).to eq values[0]
|
195
|
-
expect(store.public_send(method, pairs.call(keys[0] => values[1], keys[1] => values[2]))).to be store
|
195
|
+
expect(store.public_send(method, pairs.call({ keys[0] => values[1], keys[1] => values[2] }))).to be store
|
196
196
|
expect(store.key?(keys[0])).to be true
|
197
197
|
expect(store[keys[0]]).to eq values[1]
|
198
198
|
expect(store.key?(keys[1])).to be true
|
@@ -204,7 +204,7 @@ shared_examples :store do
|
|
204
204
|
it 'stores the return value of the block, if given, for keys that will be overwritten' do
|
205
205
|
moneta_property_of(keys: 2, values: 4).check do |keys:, values:|
|
206
206
|
expect(store[keys[0]] = values[0]).to eq values[0]
|
207
|
-
expect(store.public_send(method, pairs.call(keys[0] => values[1], keys[1] => values[2])) do |key, old_val, new_val|
|
207
|
+
expect(store.public_send(method, pairs.call({ keys[0] => values[1], keys[1] => values[2] })) do |key, old_val, new_val|
|
208
208
|
expect(key).to eq keys[0]
|
209
209
|
expect(old_val).to eq values[0]
|
210
210
|
expect(new_val).to eq values[1]
|
data/spec/helper.rb
CHANGED
@@ -213,11 +213,18 @@ ADAPTER_SPECS = MonetaSpecs.new(
|
|
213
213
|
:create, :features, :store_large, :not_each_key],
|
214
214
|
key: %w(string path),
|
215
215
|
value: %w(string path binary))
|
216
|
+
|
217
|
+
NATIVE_EXPIRY_SPECS = MonetaSpecs.new(
|
218
|
+
specs: [:create, :expires, :create_expires],
|
219
|
+
key: %w(string path),
|
220
|
+
value: %w(string path binary))
|
221
|
+
|
216
222
|
STANDARD_SPECS = MonetaSpecs.new(
|
217
223
|
specs: [:null, :store, :returndifferent,
|
218
224
|
:marshallable_key, :marshallable_value, :transform_value, :increment,
|
219
225
|
:concurrent_increment, :concurrent_create, :persist, :multiprocess, :create,
|
220
226
|
:features, :store_large, :not_each_key])
|
227
|
+
|
221
228
|
TRANSFORMER_SPECS = MonetaSpecs.new(
|
222
229
|
specs: [:null, :store, :returndifferent,
|
223
230
|
:transform_value, :increment, :create, :features, :store_large,
|
@@ -260,15 +267,24 @@ module MonetaHelpers
|
|
260
267
|
|
261
268
|
# Used by tests that rely on MySQL. These env vars can be used if you
|
262
269
|
# want to run the tests but don't want to grant root access to moneta
|
270
|
+
let(:mysql_host) { ENV['MYSQL_HOST'] || 'localhost' }
|
271
|
+
let(:mysql_port) { ENV['MYSQL_TCP_PORT'] || '3306' }
|
263
272
|
let(:mysql_username) { ENV['MONETA_MYSQL_USERNAME'] || 'root' }
|
264
273
|
let(:mysql_password) { ENV['MONETA_MYSQL_PASSWORD'] }
|
265
274
|
let(:mysql_database1) { ENV['MONETA_MYSQL_DATABASE1'] || 'moneta' }
|
266
275
|
let(:mysql_database2) { ENV['MONETA_MYSQL_DATABASE2'] || 'moneta2' }
|
267
276
|
|
268
|
-
let(:postgres_username) { ENV['
|
277
|
+
let(:postgres_username) { ENV['PGUSER'] || 'postgres' }
|
278
|
+
let(:postgres_password) { ENV['PGPASSWORD'] }
|
269
279
|
let(:postgres_database1) { ENV['MONETA_POSTGRES_DATABSASE1'] || 'moneta1' }
|
270
280
|
let(:postgres_database2) { ENV['MONETA_POSTGRES_DATABSASE1'] || 'moneta2' }
|
271
281
|
|
282
|
+
let(:couch_login) { ENV['COUCH_LOGIN'] || 'admin' }
|
283
|
+
let(:couch_password) { ENV['COUCH_PASSWORD'] || 'password' }
|
284
|
+
|
285
|
+
let(:redis_host) { ENV.fetch('REDIS_HOST', 'localhost') }
|
286
|
+
let(:redis_port) { ENV.fetch('REDIS_PORT', '6379') }
|
287
|
+
|
272
288
|
before do
|
273
289
|
store = new_store
|
274
290
|
store.clear
|
@@ -282,23 +298,9 @@ module MonetaHelpers
|
|
282
298
|
end
|
283
299
|
end
|
284
300
|
|
285
|
-
# Used to test time-dependent specs (e.g. expiry at different positions
|
286
|
-
# within a second). Once close to the start of the second, and once close
|
287
|
-
# to the end.
|
288
|
-
def usecs
|
289
|
-
[1e4, 99e4].map(&:to_i)
|
290
|
-
end
|
291
|
-
|
292
|
-
def at_each_usec(&block)
|
293
|
-
usecs.each do |usec|
|
294
|
-
context "at #{usec} microseconds", isolate: true do
|
295
|
-
include_examples :at_usec, usec, &block
|
296
|
-
end
|
297
|
-
end
|
298
|
-
end
|
299
|
-
|
300
301
|
def use_timecop
|
301
|
-
before{ @timecop = true }
|
302
|
+
before { @timecop = true }
|
303
|
+
after { Timecop.return }
|
302
304
|
end
|
303
305
|
end
|
304
306
|
|
@@ -323,14 +325,6 @@ module MonetaHelpers
|
|
323
325
|
end
|
324
326
|
end
|
325
327
|
|
326
|
-
def start_server(*args)
|
327
|
-
server = Moneta::Server.new(*args)
|
328
|
-
Thread.new { server.run }
|
329
|
-
sleep 0.1 until server.running?
|
330
|
-
rescue Exception => ex
|
331
|
-
puts "Failed to start server - #{ex.message}"
|
332
|
-
end
|
333
|
-
|
334
328
|
def moneta_property_of(keys: 0, values: 0)
|
335
329
|
keys_meta = self.keys_meta
|
336
330
|
values_meta = self.values_meta
|
@@ -355,6 +349,20 @@ module MonetaHelpers
|
|
355
349
|
sleep seconds
|
356
350
|
end
|
357
351
|
end
|
352
|
+
|
353
|
+
def time_till_next(tick)
|
354
|
+
now = Time.now.to_f
|
355
|
+
tick - (now % tick)
|
356
|
+
end
|
357
|
+
|
358
|
+
# advance to the moment just after a tick. 1e-2 is needed in some
|
359
|
+
# environments (JRuby) to be able to pass the "not in earlier half" test.
|
360
|
+
def advance_next_tick
|
361
|
+
tick = t_res
|
362
|
+
offset = time_till_next(tick) + 1e-2
|
363
|
+
advance offset
|
364
|
+
raise "not in earlier half of tick" unless Time.now.to_f % tick < tick / 2.0
|
365
|
+
end
|
358
366
|
end
|
359
367
|
end
|
360
368
|
|
@@ -435,20 +443,4 @@ RSpec.shared_context :setup_moneta_store do |builder|
|
|
435
443
|
end
|
436
444
|
end
|
437
445
|
|
438
|
-
RSpec.shared_examples :at_usec do |usec|
|
439
|
-
before do
|
440
|
-
now = Time.now
|
441
|
-
# 1000us is a rough guess at how many microseconds this code will take to run
|
442
|
-
if now.usec + 1000 > usec
|
443
|
-
advance(1 - 1e-6 * (now.usec - usec))
|
444
|
-
else
|
445
|
-
advance(1e-6 * (usec - now.usec))
|
446
|
-
end
|
447
|
-
end
|
448
|
-
|
449
|
-
after do
|
450
|
-
Timecop.return if @timecop
|
451
|
-
end
|
452
|
-
end
|
453
|
-
|
454
446
|
Dir['./spec/features/*.rb'].each{ |rb| require rb }
|
@@ -1,4 +1,4 @@
|
|
1
|
-
describe 'adapter_activerecord_existing_connection', adapter: :ActiveRecord do
|
1
|
+
describe 'adapter_activerecord_existing_connection', adapter: :ActiveRecord, mysql: true do
|
2
2
|
before :all do
|
3
3
|
require 'active_record'
|
4
4
|
end
|
@@ -8,6 +8,8 @@ describe 'adapter_activerecord_existing_connection', adapter: :ActiveRecord do
|
|
8
8
|
ActiveRecord::Base.configurations = {
|
9
9
|
default_env => {
|
10
10
|
'adapter' => (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'),
|
11
|
+
'host' => mysql_host,
|
12
|
+
'port' => mysql_port,
|
11
13
|
'database' => mysql_database1,
|
12
14
|
'username' => mysql_username,
|
13
15
|
'password' => mysql_password
|
@@ -58,32 +58,39 @@ describe 'adapter_activerecord', adapter: :ActiveRecord do
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
context "with MySQL" do
|
61
|
+
context "with MySQL", mysql: true do
|
62
62
|
let(:connection1) do
|
63
63
|
{
|
64
64
|
adapter: (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'),
|
65
|
+
host: mysql_host,
|
66
|
+
port: mysql_port,
|
65
67
|
database: mysql_database1,
|
66
|
-
username: mysql_username
|
68
|
+
username: mysql_username,
|
69
|
+
password: mysql_password
|
67
70
|
}
|
68
71
|
end
|
69
72
|
|
70
73
|
let(:connection2) do
|
71
74
|
{
|
72
75
|
adapter: (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'),
|
76
|
+
host: mysql_host,
|
77
|
+
port: mysql_port,
|
73
78
|
database: mysql_database2,
|
74
|
-
username: mysql_username
|
79
|
+
username: mysql_username,
|
80
|
+
password: mysql_password
|
75
81
|
}
|
76
82
|
end
|
77
83
|
|
78
84
|
include_examples :adapter_activerecord, activerecord_specs
|
79
85
|
end
|
80
86
|
|
81
|
-
context "with PostgreSQL" do
|
87
|
+
context "with PostgreSQL", postgres: true do
|
82
88
|
let(:connection1) do
|
83
89
|
{
|
84
90
|
adapter: (defined?(JRUBY_VERSION) ? 'jdbcpostgresql' : 'postgresql'),
|
85
91
|
database: postgres_database1,
|
86
|
-
username: postgres_username
|
92
|
+
username: postgres_username,
|
93
|
+
password: postgres_password
|
87
94
|
}
|
88
95
|
end
|
89
96
|
|
@@ -91,14 +98,15 @@ describe 'adapter_activerecord', adapter: :ActiveRecord do
|
|
91
98
|
{
|
92
99
|
adapter: (defined?(JRUBY_VERSION) ? 'jdbcpostgresql' : 'postgresql'),
|
93
100
|
database: postgres_database2,
|
94
|
-
username: postgres_username
|
101
|
+
username: postgres_username,
|
102
|
+
password: postgres_password
|
95
103
|
}
|
96
104
|
end
|
97
105
|
|
98
106
|
include_examples :adapter_activerecord, activerecord_specs
|
99
107
|
end
|
100
108
|
|
101
|
-
context "with SQLite" do
|
109
|
+
context "with SQLite", sqlite: true do
|
102
110
|
let(:connection1) do
|
103
111
|
{
|
104
112
|
adapter: (defined?(JRUBY_VERSION) ? 'jdbcsqlite3' : 'sqlite3'),
|
@@ -1,11 +1,14 @@
|
|
1
|
-
describe "standard_activerecord", adapter: :ActiveRecord do
|
1
|
+
describe "standard_activerecord", adapter: :ActiveRecord, mysql: true do
|
2
2
|
moneta_store :ActiveRecord do
|
3
3
|
{
|
4
4
|
table: 'standard_activerecord',
|
5
5
|
connection: {
|
6
6
|
adapter: (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'),
|
7
|
+
host: mysql_host,
|
8
|
+
port: mysql_port,
|
7
9
|
database: mysql_database1,
|
8
|
-
username: mysql_username
|
10
|
+
username: mysql_username,
|
11
|
+
password: mysql_password
|
9
12
|
}
|
10
13
|
}
|
11
14
|
end
|
@@ -14,5 +17,5 @@ describe "standard_activerecord", adapter: :ActiveRecord do
|
|
14
17
|
::Marshal.load(value.unpack('m').first)
|
15
18
|
end
|
16
19
|
|
17
|
-
moneta_specs STANDARD_SPECS
|
20
|
+
moneta_specs STANDARD_SPECS.with_each_key
|
18
21
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
describe "standard_activerecord_with_expires", adapter: :ActiveRecord do
|
1
|
+
describe "standard_activerecord_with_expires", adapter: :ActiveRecord, mysql: true do
|
2
2
|
let(:t_res) { 0.125 }
|
3
3
|
let(:min_ttl) { t_res }
|
4
4
|
use_timecop
|
@@ -8,8 +8,11 @@ describe "standard_activerecord_with_expires", adapter: :ActiveRecord do
|
|
8
8
|
table: 'standard_activerecord_with_expires',
|
9
9
|
connection: {
|
10
10
|
adapter: (defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'),
|
11
|
+
host: mysql_host,
|
12
|
+
port: mysql_port,
|
11
13
|
database: mysql_database1,
|
12
|
-
username: mysql_username
|
14
|
+
username: mysql_username,
|
15
|
+
password: mysql_password
|
13
16
|
},
|
14
17
|
expires: true
|
15
18
|
}
|
@@ -20,5 +23,5 @@ describe "standard_activerecord_with_expires", adapter: :ActiveRecord do
|
|
20
23
|
::Marshal.load(value.unpack('m').first)
|
21
24
|
end
|
22
25
|
|
23
|
-
moneta_specs STANDARD_SPECS.with_expires
|
26
|
+
moneta_specs STANDARD_SPECS.with_expires.with_each_key
|
24
27
|
end
|
@@ -23,7 +23,7 @@ describe 'adapter_activesupportcache', adapter: :ActiveSupportCache do
|
|
23
23
|
include_examples :adapter_activesupportcache
|
24
24
|
end
|
25
25
|
|
26
|
-
context 'using MemCacheStore' do
|
26
|
+
context 'using MemCacheStore', memcached: true do
|
27
27
|
let(:t_res) { 1 }
|
28
28
|
let(:min_ttl) { 2 }
|
29
29
|
use_timecop
|
@@ -34,12 +34,12 @@ describe 'adapter_activesupportcache', adapter: :ActiveSupportCache do
|
|
34
34
|
include_examples :adapter_activesupportcache
|
35
35
|
end
|
36
36
|
|
37
|
-
context 'using RedisCacheStore' do
|
37
|
+
context 'using RedisCacheStore', redis: true do
|
38
38
|
let(:t_res) { 1 }
|
39
39
|
let(:min_ttl) { t_res }
|
40
40
|
use_timecop
|
41
41
|
|
42
|
-
let(:backend) { ActiveSupport::Cache::RedisCacheStore.new(url:
|
42
|
+
let(:backend) { ActiveSupport::Cache::RedisCacheStore.new(url: "redis://#{redis_host}:#{redis_port}/1") }
|
43
43
|
include_examples :adapter_activesupportcache
|
44
44
|
end
|
45
45
|
|
data/spec/moneta/adapters/activesupportcache/adapter_activesupportcache_with_default_expires_spec.rb
CHANGED
@@ -23,7 +23,7 @@ describe 'adapter_activesupportcache_with_default_expires', adapter: :ActiveSupp
|
|
23
23
|
include_examples :adapter_activesupportcache_with_default_expires
|
24
24
|
end
|
25
25
|
|
26
|
-
context 'using MemCacheStore' do
|
26
|
+
context 'using MemCacheStore', memcached: true do
|
27
27
|
let(:t_res) { 1 }
|
28
28
|
let(:min_ttl) { 2 }
|
29
29
|
use_timecop
|
@@ -39,7 +39,7 @@ describe 'adapter_activesupportcache_with_default_expires', adapter: :ActiveSupp
|
|
39
39
|
let(:min_ttl) { t_res }
|
40
40
|
use_timecop
|
41
41
|
|
42
|
-
let(:backend) { ActiveSupport::Cache::RedisCacheStore.new(url:
|
42
|
+
let(:backend) { ActiveSupport::Cache::RedisCacheStore.new(url: "redis://#{redis_host}:#{redis_port}/2") }
|
43
43
|
include_examples :adapter_activesupportcache_with_default_expires
|
44
44
|
end
|
45
45
|
|
@@ -14,5 +14,5 @@ describe "standard_cassandra", retry: 3, adapter: :Cassandra do
|
|
14
14
|
}
|
15
15
|
end
|
16
16
|
|
17
|
-
moneta_specs STANDARD_SPECS.without_increment.without_create.with_native_expires
|
17
|
+
moneta_specs STANDARD_SPECS.without_increment.without_create.with_native_expires.with_each_key
|
18
18
|
end
|
@@ -1,11 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
require_relative './client_helper.rb'
|
2
|
+
|
3
|
+
describe 'adapter_client', adapter: :Client do
|
4
|
+
include_context :start_server, port: 9002, backend: ->{ Moneta::Adapters::Memory.new }
|
5
5
|
|
6
6
|
moneta_build do
|
7
|
-
Moneta::Adapters::Client.new
|
7
|
+
Moneta::Adapters::Client.new(port: 9002)
|
8
8
|
end
|
9
9
|
|
10
|
-
moneta_specs ADAPTER_SPECS
|
10
|
+
moneta_specs ADAPTER_SPECS.with_each_key
|
11
11
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
RSpec.shared_context :start_server do |**options|
|
2
|
+
before :context do
|
3
|
+
begin
|
4
|
+
options.each do |key, value|
|
5
|
+
options[key] = instance_exec(&value) if value.respond_to? :call
|
6
|
+
end
|
7
|
+
backend = options.delete(:backend)
|
8
|
+
@server = Moneta::Server.new(backend, options)
|
9
|
+
@thread = Thread.new { @server.run }
|
10
|
+
sleep 0.1 until @server.running?
|
11
|
+
rescue Exception => ex
|
12
|
+
puts "Failed to start server - #{ex.message}"
|
13
|
+
tries ||= 0
|
14
|
+
tries += 1
|
15
|
+
sleep Moneta::Server::TIMEOUT
|
16
|
+
tries < 3 ? retry : raise
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
after :context do
|
21
|
+
@server.stop
|
22
|
+
@thread.join
|
23
|
+
end
|
24
|
+
end
|
@@ -1,17 +1,17 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
require_relative './client_helper.rb'
|
2
|
+
|
3
|
+
describe "standard_client_tcp", adapter: :Client do
|
4
|
+
include_context :start_server, port: 9003, backend: ->{ Moneta::Adapters::Memory.new }
|
5
5
|
|
6
|
-
moneta_store :Client
|
7
|
-
moneta_specs STANDARD_SPECS
|
6
|
+
moneta_store :Client, port: 9003
|
7
|
+
moneta_specs STANDARD_SPECS.with_each_key
|
8
8
|
|
9
9
|
it 'supports multiple clients' do
|
10
10
|
store['shared_key'] = 'shared_val'
|
11
|
-
threads = (1..
|
11
|
+
threads = (1..32).map do |i|
|
12
12
|
Thread.new do
|
13
13
|
client = new_store
|
14
|
-
(1..
|
14
|
+
(1..31).each do |j|
|
15
15
|
client['shared_key'].should == 'shared_val'
|
16
16
|
client["key-\#{j}-\#{i}"] = "val-\#{j}-\#{i}"
|
17
17
|
client["key-\#{j}-\#{i}"].should == "val-\#{j}-\#{i}"
|
@@ -1,12 +1,28 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
require_relative './client_helper.rb'
|
2
|
+
|
3
|
+
describe "standard_client_unix", adapter: :Client do
|
4
|
+
include_context :start_server,
|
5
|
+
backend: ->{ Moneta::Adapters::Memory.new },
|
6
|
+
socket: ->{ File.join(tempdir, 'standard_client_unix') }
|
6
7
|
|
7
8
|
moneta_store :Client do
|
8
|
-
{socket: File.join(tempdir, 'standard_client_unix')}
|
9
|
+
{ socket: File.join(tempdir, 'standard_client_unix') }
|
9
10
|
end
|
10
11
|
|
11
|
-
moneta_specs STANDARD_SPECS
|
12
|
+
moneta_specs STANDARD_SPECS.with_each_key
|
13
|
+
|
14
|
+
it 'supports multiple clients' do
|
15
|
+
store['shared_key'] = 'shared_val'
|
16
|
+
threads = (1..32).map do |i|
|
17
|
+
Thread.new do
|
18
|
+
client = new_store
|
19
|
+
(1..31).each do |j|
|
20
|
+
client['shared_key'].should == 'shared_val'
|
21
|
+
client["key-\#{j}-\#{i}"] = "val-\#{j}-\#{i}"
|
22
|
+
client["key-\#{j}-\#{i}"].should == "val-\#{j}-\#{i}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
threads.map(&:join)
|
27
|
+
end
|
12
28
|
end
|
@@ -4,7 +4,7 @@ describe 'adapter_couch', adapter: :Couch do
|
|
4
4
|
include_context :faraday_adapter
|
5
5
|
|
6
6
|
moneta_build do
|
7
|
-
Moneta::Adapters::Couch.new(db: 'adapter_couch', adapter: faraday_adapter)
|
7
|
+
Moneta::Adapters::Couch.new(db: 'adapter_couch', adapter: faraday_adapter, login: couch_login, password: couch_password)
|
8
8
|
end
|
9
9
|
|
10
10
|
moneta_specs ADAPTER_SPECS.without_increment.simplevalues_only.without_path.with_each_key
|