moneta 1.5.1 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES +18 -0
- data/CONTRIBUTORS +4 -0
- data/LICENSE +1 -1
- data/README.md +4 -6
- data/lib/active_support/cache/moneta_store.rb +32 -6
- data/lib/moneta/adapters/activerecord/backend.rb +50 -0
- data/lib/moneta/adapters/activerecord/v5_backend.rb +80 -0
- data/lib/moneta/adapters/activerecord.rb +50 -95
- data/lib/moneta/adapters/activesupportcache.rb +69 -14
- data/lib/moneta/adapters/client.rb +1 -1
- data/lib/moneta/adapters/hbase.rb +1 -1
- data/lib/moneta/adapters/mongo.rb +5 -3
- data/lib/moneta/adapters/redis.rb +2 -1
- data/lib/moneta/adapters/sequel/mysql.rb +6 -18
- data/lib/moneta/adapters/sequel/postgres_hstore.rb +8 -1
- data/lib/moneta/adapters/sqlite.rb +4 -2
- data/lib/moneta/adapters/tokyotyrant.rb +1 -1
- data/lib/moneta/adapters/yaml.rb +7 -1
- data/lib/moneta/pool.rb +16 -18
- data/lib/moneta/proxy.rb +1 -1
- data/lib/moneta/server.rb +9 -11
- data/lib/moneta/transformer/config.rb +4 -4
- data/lib/moneta/transformer.rb +4 -0
- data/lib/moneta/version.rb +1 -1
- data/lib/moneta.rb +1 -1
- metadata +10 -453
- data/.github/workflows/ruby.yml +0 -425
- data/.gitignore +0 -15
- data/.rspec +0 -4
- data/.rubocop.yml +0 -194
- data/.yardopts +0 -6
- data/Gemfile +0 -210
- data/feature_matrix.yaml +0 -227
- data/moneta.gemspec +0 -36
- data/script/benchmarks +0 -605
- data/script/contributors +0 -12
- data/script/memusage +0 -40
- data/script/parallel-tests +0 -82
- data/script/start-couchdb +0 -27
- data/script/start-hbase +0 -47
- data/script/start-services +0 -10
- data/script/travis-logs +0 -14
- data/script/update-feature-matrix +0 -148
- data/spec/active_support/cache_moneta_store_spec.rb +0 -282
- data/spec/features/concurrent_create.rb +0 -42
- data/spec/features/concurrent_increment.rb +0 -39
- data/spec/features/create.rb +0 -25
- data/spec/features/create_expires.rb +0 -19
- data/spec/features/default_expires.rb +0 -14
- data/spec/features/each_key.rb +0 -119
- data/spec/features/expires.rb +0 -296
- data/spec/features/features.rb +0 -16
- data/spec/features/increment.rb +0 -98
- data/spec/features/marshallable_key.rb +0 -43
- data/spec/features/marshallable_value.rb +0 -7
- data/spec/features/multiprocess.rb +0 -8
- data/spec/features/not_create.rb +0 -7
- data/spec/features/not_each_key.rb +0 -7
- data/spec/features/not_increment.rb +0 -13
- data/spec/features/not_persist.rb +0 -9
- data/spec/features/null.rb +0 -66
- data/spec/features/persist.rb +0 -14
- data/spec/features/returndifferent.rb +0 -9
- data/spec/features/returnsame.rb +0 -9
- data/spec/features/store.rb +0 -261
- data/spec/features/store_large.rb +0 -13
- data/spec/features/transform_value.rb +0 -44
- data/spec/features/transform_value_expires.rb +0 -41
- data/spec/helper.rb +0 -444
- data/spec/moneta/adapters/activerecord/adapter_activerecord_existing_connection_spec.rb +0 -61
- data/spec/moneta/adapters/activerecord/adapter_activerecord_spec.rb +0 -126
- data/spec/moneta/adapters/activerecord/standard_activerecord_spec.rb +0 -21
- data/spec/moneta/adapters/activerecord/standard_activerecord_with_expires_spec.rb +0 -27
- data/spec/moneta/adapters/activesupportcache/adapter_activesupportcache_spec.rb +0 -54
- data/spec/moneta/adapters/activesupportcache/adapter_activesupportcache_with_default_expires_spec.rb +0 -54
- data/spec/moneta/adapters/activesupportcache/standard_activesupportcache_spec.rb +0 -14
- data/spec/moneta/adapters/cassandra/adapter_cassandra_spec.rb +0 -17
- data/spec/moneta/adapters/cassandra/adapter_cassandra_with_default_expires_spec.rb +0 -18
- data/spec/moneta/adapters/cassandra/helper.rb +0 -18
- data/spec/moneta/adapters/cassandra/standard_cassandra_spec.rb +0 -18
- data/spec/moneta/adapters/client/adapter_client_spec.rb +0 -11
- data/spec/moneta/adapters/client/client_helper.rb +0 -25
- data/spec/moneta/adapters/client/standard_client_tcp_spec.rb +0 -23
- data/spec/moneta/adapters/client/standard_client_unix_spec.rb +0 -28
- data/spec/moneta/adapters/cookie/adapter_cookie_spec.rb +0 -7
- data/spec/moneta/adapters/couch/adapter_couch_spec.rb +0 -204
- data/spec/moneta/adapters/couch/standard_couch_spec.rb +0 -15
- data/spec/moneta/adapters/couch/standard_couch_with_expires_spec.rb +0 -19
- data/spec/moneta/adapters/datamapper/adapter_datamapper_spec.rb +0 -60
- data/spec/moneta/adapters/datamapper/standard_datamapper_spec.rb +0 -21
- data/spec/moneta/adapters/datamapper/standard_datamapper_with_expires_spec.rb +0 -26
- data/spec/moneta/adapters/datamapper/standard_datamapper_with_repository_spec.rb +0 -22
- data/spec/moneta/adapters/daybreak/adapter_daybreak_spec.rb +0 -7
- data/spec/moneta/adapters/daybreak/standard_daybreak_spec.rb +0 -7
- data/spec/moneta/adapters/daybreak/standard_daybreak_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/dbm/adapter_dbm_spec.rb +0 -7
- data/spec/moneta/adapters/dbm/standard_dbm_spec.rb +0 -7
- data/spec/moneta/adapters/dbm/standard_dbm_with_expires_spec.rb +0 -12
- data/spec/moneta/adapters/faraday_helper.rb +0 -10
- data/spec/moneta/adapters/file/adapter_file_spec.rb +0 -7
- data/spec/moneta/adapters/file/standard_file_spec.rb +0 -7
- data/spec/moneta/adapters/file/standard_file_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/fog/adapter_fog_spec.rb +0 -16
- data/spec/moneta/adapters/fog/standard_fog_spec.rb +0 -15
- data/spec/moneta/adapters/fog/standard_fog_with_expires_spec.rb +0 -20
- data/spec/moneta/adapters/gdbm/adapter_gdbm_spec.rb +0 -7
- data/spec/moneta/adapters/gdbm/standard_gdbm_spec.rb +0 -7
- data/spec/moneta/adapters/gdbm/standard_gdbm_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/hashfile/standard_hashfile_spec.rb +0 -7
- data/spec/moneta/adapters/hashfile/standard_hashfile_with_expires_spec.rb +0 -12
- data/spec/moneta/adapters/hbase/adapter_hbase_spec.rb +0 -7
- data/spec/moneta/adapters/hbase/standard_hbase_spec.rb +0 -4
- data/spec/moneta/adapters/hbase/standard_hbase_with_expires_spec.rb +0 -8
- data/spec/moneta/adapters/kyotocabinet/adapter_kyotocabinet_spec.rb +0 -7
- data/spec/moneta/adapters/kyotocabinet/standard_kyotocabinet_spec.rb +0 -7
- data/spec/moneta/adapters/kyotocabinet/standard_kyotocabinet_with_expires_spec.rb +0 -14
- data/spec/moneta/adapters/leveldb/adapter_leveldb_spec.rb +0 -7
- data/spec/moneta/adapters/leveldb/standard_leveldb_spec.rb +0 -7
- data/spec/moneta/adapters/leveldb/standard_leveldb_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/lmdb/adapter_lmdb_spec.rb +0 -7
- data/spec/moneta/adapters/lmdb/adapter_lmdb_with_db_spec.rb +0 -7
- data/spec/moneta/adapters/lmdb/standard_lmdb_spec.rb +0 -7
- data/spec/moneta/adapters/lmdb/standard_lmdb_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/localmemcache/adapter_localmemcache_spec.rb +0 -7
- data/spec/moneta/adapters/localmemcache/standard_localmemcache_spec.rb +0 -7
- data/spec/moneta/adapters/localmemcache/standard_localmemcache_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/lruhash/adapter_lruhash_spec.rb +0 -118
- data/spec/moneta/adapters/lruhash/standard_lruhash_spec.rb +0 -4
- data/spec/moneta/adapters/lruhash/standard_lruhash_with_expires_spec.rb +0 -8
- data/spec/moneta/adapters/memcached/adapter_memcached_spec.rb +0 -13
- data/spec/moneta/adapters/memcached/dalli/adapter_memcached_dalli_spec.rb +0 -25
- data/spec/moneta/adapters/memcached/dalli/standard_memcached_dalli_spec.rb +0 -11
- data/spec/moneta/adapters/memcached/native/adapter_memcached_native_spec.rb +0 -25
- data/spec/moneta/adapters/memcached/native/standard_memcached_native_spec.rb +0 -11
- data/spec/moneta/adapters/memcached/standard_memcached_spec.rb +0 -17
- data/spec/moneta/adapters/memcached_helper.rb +0 -20
- data/spec/moneta/adapters/memory/adapter_memory_spec.rb +0 -7
- data/spec/moneta/adapters/memory/standard_memory_spec.rb +0 -4
- data/spec/moneta/adapters/memory/standard_memory_with_compress_spec.rb +0 -9
- data/spec/moneta/adapters/memory/standard_memory_with_expires_spec.rb +0 -8
- data/spec/moneta/adapters/memory/standard_memory_with_json_key_serializer_spec.rb +0 -4
- data/spec/moneta/adapters/memory/standard_memory_with_json_serializer_spec.rb +0 -9
- data/spec/moneta/adapters/memory/standard_memory_with_json_value_serializer_spec.rb +0 -9
- data/spec/moneta/adapters/memory/standard_memory_with_prefix_spec.rb +0 -41
- data/spec/moneta/adapters/memory/standard_memory_with_snappy_compress_spec.rb +0 -9
- data/spec/moneta/adapters/mongo/adapter_mongo_spec.rb +0 -41
- data/spec/moneta/adapters/mongo/adapter_mongo_with_default_expires_spec.rb +0 -14
- data/spec/moneta/adapters/mongo/standard_mongo_spec.rb +0 -7
- data/spec/moneta/adapters/null/null_adapter_spec.rb +0 -7
- data/spec/moneta/adapters/null/standard_null_spec.rb +0 -4
- data/spec/moneta/adapters/pstore/adapter_pstore_spec.rb +0 -7
- data/spec/moneta/adapters/pstore/standard_pstore_spec.rb +0 -9
- data/spec/moneta/adapters/pstore/standard_pstore_with_expires_spec.rb +0 -13
- data/spec/moneta/adapters/redis/adapter_redis_spec.rb +0 -20
- data/spec/moneta/adapters/redis/standard_redis_spec.rb +0 -14
- data/spec/moneta/adapters/restclient/adapter_restclient_spec.rb +0 -13
- data/spec/moneta/adapters/restclient/helper.rb +0 -12
- data/spec/moneta/adapters/restclient/standard_restclient_spec.rb +0 -13
- data/spec/moneta/adapters/riak/adapter_riak_spec.rb +0 -14
- data/spec/moneta/adapters/riak/standard_riak_spec.rb +0 -10
- data/spec/moneta/adapters/riak/standard_riak_with_expires_spec.rb +0 -14
- data/spec/moneta/adapters/sdbm/adapter_sdbm_spec.rb +0 -7
- data/spec/moneta/adapters/sdbm/standard_sdbm_spec.rb +0 -7
- data/spec/moneta/adapters/sdbm/standard_sdbm_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/sequel/adapter_sequel_spec.rb +0 -133
- data/spec/moneta/adapters/sequel/helper.rb +0 -80
- data/spec/moneta/adapters/sequel/standard_sequel_spec.rb +0 -8
- data/spec/moneta/adapters/sequel/standard_sequel_with_expires_spec.rb +0 -18
- data/spec/moneta/adapters/sqlite/adapter_sqlite_spec.rb +0 -7
- data/spec/moneta/adapters/sqlite/standard_sqlite_spec.rb +0 -7
- data/spec/moneta/adapters/sqlite/standard_sqlite_with_expires_spec.rb +0 -15
- data/spec/moneta/adapters/tdb/adapter_tdb_spec.rb +0 -7
- data/spec/moneta/adapters/tdb/standard_tdb_spec.rb +0 -7
- data/spec/moneta/adapters/tdb/standard_tdb_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/tokyocabinet/adapter_tokyocabinet_bdb_spec.rb +0 -7
- data/spec/moneta/adapters/tokyocabinet/adapter_tokyocabinet_hdb_spec.rb +0 -7
- data/spec/moneta/adapters/tokyocabinet/standard_tokyocabinet_spec.rb +0 -7
- data/spec/moneta/adapters/tokyocabinet/standard_tokyocabinet_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/tokyotyrant/adapter_tokyotyrant_spec.rb +0 -11
- data/spec/moneta/adapters/tokyotyrant/helper.rb +0 -12
- data/spec/moneta/adapters/tokyotyrant/standard_tokyotyrant_spec.rb +0 -7
- data/spec/moneta/adapters/tokyotyrant/standard_tokyotyrant_with_expires_spec.rb +0 -12
- data/spec/moneta/adapters/yaml/adapter_yaml_spec.rb +0 -7
- data/spec/moneta/adapters/yaml/standard_yaml_spec.rb +0 -9
- data/spec/moneta/adapters/yaml/standard_yaml_with_expires_spec.rb +0 -13
- data/spec/moneta/builder_spec.rb +0 -50
- data/spec/moneta/config_spec.rb +0 -219
- data/spec/moneta/mutex_spec.rb +0 -55
- data/spec/moneta/proxies/cache/cache_file_memory_spec.rb +0 -24
- data/spec/moneta/proxies/cache/cache_memory_null_spec.rb +0 -12
- data/spec/moneta/proxies/enumerable/enumerable_spec.rb +0 -26
- data/spec/moneta/proxies/expires/expires_file_spec.rb +0 -28
- data/spec/moneta/proxies/expires/expires_memory_spec.rb +0 -15
- data/spec/moneta/proxies/expires/expires_memory_with_default_expires_spec.rb +0 -16
- data/spec/moneta/proxies/fallback/fallback_spec.rb +0 -42
- data/spec/moneta/proxies/lock/lock_spec.rb +0 -10
- data/spec/moneta/proxies/optionmerger/optionmerger_spec.rb +0 -96
- data/spec/moneta/proxies/pool/pool_spec.rb +0 -353
- data/spec/moneta/proxies/proxy/proxy_expires_memory_spec.rb +0 -16
- data/spec/moneta/proxies/shared/shared_tcp_spec.rb +0 -59
- data/spec/moneta/proxies/shared/shared_unix_spec.rb +0 -58
- data/spec/moneta/proxies/transformer/transformer_bencode_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_bert_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_bson_spec.rb +0 -25
- data/spec/moneta/proxies/transformer/transformer_bzip2_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_json_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_key_inspect_spec.rb +0 -17
- data/spec/moneta/proxies/transformer/transformer_key_marshal_spec.rb +0 -17
- data/spec/moneta/proxies/transformer/transformer_key_to_s_spec.rb +0 -17
- data/spec/moneta/proxies/transformer/transformer_key_yaml_spec.rb +0 -17
- data/spec/moneta/proxies/transformer/transformer_lz4_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_lzma_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_lzo_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_marshal_base64_spec.rb +0 -20
- data/spec/moneta/proxies/transformer/transformer_marshal_city128_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_city32_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_city64_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_escape_spec.rb +0 -21
- data/spec/moneta/proxies/transformer/transformer_marshal_hex_spec.rb +0 -20
- data/spec/moneta/proxies/transformer/transformer_marshal_hmac_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_marshal_md5_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_md5_spread_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_prefix_base64_spec.rb +0 -33
- data/spec/moneta/proxies/transformer/transformer_marshal_prefix_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_qp_spec.rb +0 -20
- data/spec/moneta/proxies/transformer/transformer_marshal_rmd160_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_sha1_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_sha256_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_sha384_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_sha512_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_marshal_truncate_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_urlsafe_base64_spec.rb +0 -20
- data/spec/moneta/proxies/transformer/transformer_marshal_uuencode_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_msgpack_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_ox_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_php_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_quicklz_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_snappy_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_tnet_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_value_marshal_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_value_yaml_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_yaml_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_zlib_spec.rb +0 -19
- data/spec/moneta/proxies/weak_create/weak_create_spec.rb +0 -21
- data/spec/moneta/proxies/weak_each_key/weak_each_key_spec.rb +0 -22
- data/spec/moneta/proxies/weak_increment/weak_increment_spec.rb +0 -21
- data/spec/moneta/semaphore_spec.rb +0 -68
- data/spec/moneta/stack_file_memory_spec.rb +0 -15
- data/spec/moneta/stack_memory_file_spec.rb +0 -13
- data/spec/rack/cache_moneta_spec.rb +0 -355
- data/spec/rack/moneta_cookies_spec.rb +0 -83
- data/spec/rack/moneta_store_spec.rb +0 -83
- data/spec/rack/session_moneta_spec.rb +0 -350
- data/spec/restserver.rb +0 -44
- data/test/action_dispatch/fixtures/session_autoload_test/foo.rb +0 -10
- data/test/action_dispatch/session_moneta_store_test.rb +0 -204
@@ -15,20 +15,29 @@ module Moneta
|
|
15
15
|
|
16
16
|
# (see Proxy#key?)
|
17
17
|
def key?(key, options = {})
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
exists =
|
19
|
+
begin
|
20
|
+
backend_exist?(key)
|
21
|
+
rescue ArgumentError, TypeError
|
22
|
+
# these errors happen when certain adapters try to deserialize
|
23
|
+
# values, which means there's something present
|
24
|
+
true
|
22
25
|
end
|
26
|
+
|
27
|
+
if exists && (expires = expires_value(options, nil)) != nil
|
28
|
+
value = backend_read(key, **options)
|
29
|
+
backend_write(key, value, expires_in: expires ? expires.seconds : nil, **options)
|
23
30
|
end
|
31
|
+
|
32
|
+
exists
|
24
33
|
end
|
25
34
|
|
26
35
|
# (see Proxy#load)
|
27
36
|
def load(key, options = {})
|
28
37
|
expires = expires_value(options, nil)
|
29
|
-
value =
|
38
|
+
value = backend_read(key, **options)
|
30
39
|
if value and expires != nil
|
31
|
-
|
40
|
+
backend_write(key, value, expires_in: expires ? expires.seconds : nil, **options)
|
32
41
|
end
|
33
42
|
value
|
34
43
|
end
|
@@ -36,7 +45,7 @@ module Moneta
|
|
36
45
|
# (see Proxy#store)
|
37
46
|
def store(key, value, options = {})
|
38
47
|
expires = expires_value(options)
|
39
|
-
|
48
|
+
backend_write(key, value, expires_in: expires ? expires.seconds : nil, **options)
|
40
49
|
value
|
41
50
|
end
|
42
51
|
|
@@ -44,11 +53,11 @@ module Moneta
|
|
44
53
|
def increment(key, amount = 1, options = {})
|
45
54
|
expires = expires_value(options)
|
46
55
|
options.delete(:raw)
|
47
|
-
existing = Integer(
|
56
|
+
existing = Integer(backend_fetch(key, raw: true, **options) { 0 })
|
48
57
|
if amount > 0
|
49
|
-
|
58
|
+
backend_increment(key, amount, expires_in: expires ? expires.seconds : nil, **options)
|
50
59
|
elsif amount < 0
|
51
|
-
|
60
|
+
backend_decrement(key, -amount, expires_in: expires ? expires.seconds : nil, **options)
|
52
61
|
else
|
53
62
|
existing
|
54
63
|
end
|
@@ -56,9 +65,9 @@ module Moneta
|
|
56
65
|
|
57
66
|
# (see Proxy#delete)
|
58
67
|
def delete(key, options = {})
|
59
|
-
value =
|
68
|
+
value = backend_read(key, options)
|
60
69
|
if value != nil
|
61
|
-
|
70
|
+
backend_delete(key, **options)
|
62
71
|
options[:raw] ? value.to_s : value
|
63
72
|
end
|
64
73
|
end
|
@@ -74,7 +83,7 @@ module Moneta
|
|
74
83
|
hash = backend.read_multi(*keys)
|
75
84
|
if (expires = expires_value(options, nil)) != nil
|
76
85
|
hash.each do |key, value|
|
77
|
-
|
86
|
+
backend_write(key, value, expires_in: expires ? expires.seconds : nil, **options)
|
78
87
|
end
|
79
88
|
end
|
80
89
|
if options[:raw]
|
@@ -106,7 +115,7 @@ module Moneta
|
|
106
115
|
|
107
116
|
hash = Hash === pairs ? pairs : Hash[pairs.to_a]
|
108
117
|
expires = expires_value(options)
|
109
|
-
|
118
|
+
backend_write_multi(hash, expires_in: expires ? expires.seconds : nil, **options)
|
110
119
|
self
|
111
120
|
end
|
112
121
|
|
@@ -115,6 +124,52 @@ module Moneta
|
|
115
124
|
def expires_value(options, default = config.expires)
|
116
125
|
super.tap { options.delete(:expires) unless options.frozen? }
|
117
126
|
end
|
127
|
+
|
128
|
+
delegate :decrement, :delete, :exist?, :fetch, :increment, :read, :write, :write_multi,
|
129
|
+
to: :@backend,
|
130
|
+
prefix: :backend
|
131
|
+
private :backend_decrement, :backend_delete, :backend_exist?,
|
132
|
+
:backend_fetch, :backend_increment, :backend_read,
|
133
|
+
:backend_write, :backend_write_multi
|
134
|
+
|
135
|
+
# @api private
|
136
|
+
module Rails5Support
|
137
|
+
private
|
138
|
+
|
139
|
+
def backend_decrement(*args, **options)
|
140
|
+
super(*args, options)
|
141
|
+
end
|
142
|
+
|
143
|
+
def backend_delete(*args, **options)
|
144
|
+
super(*args, options)
|
145
|
+
end
|
146
|
+
|
147
|
+
def backend_exist?(*args, **options)
|
148
|
+
super(*args, options)
|
149
|
+
end
|
150
|
+
|
151
|
+
def backend_fetch(*args, **options)
|
152
|
+
super(*args, options)
|
153
|
+
end
|
154
|
+
|
155
|
+
def backend_increment(*args, **options)
|
156
|
+
super(*args, options)
|
157
|
+
end
|
158
|
+
|
159
|
+
def backend_read(*args, **options)
|
160
|
+
super(*args, options)
|
161
|
+
end
|
162
|
+
|
163
|
+
def backend_write(*args, **options)
|
164
|
+
super(*args, options)
|
165
|
+
end
|
166
|
+
|
167
|
+
def backend_write_multi(*args, **options)
|
168
|
+
super(*args, options)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
prepend Rails5Support if ::ActiveSupport.version < ::Gem::Version.new('6.1.0')
|
118
173
|
end
|
119
174
|
end
|
120
175
|
end
|
@@ -164,9 +164,11 @@ module Moneta
|
|
164
164
|
existing = Hash[slice(*pairs.map { |key, _| key })]
|
165
165
|
update_pairs, insert_pairs = pairs.partition { |key, _| existing.key?(key) }
|
166
166
|
|
167
|
-
|
168
|
-
|
169
|
-
|
167
|
+
unless insert_pairs.empty?
|
168
|
+
@collection.insert_many(insert_pairs.map do |key, value|
|
169
|
+
value_to_doc(to_binary(key), value, options)
|
170
|
+
end)
|
171
|
+
end
|
170
172
|
|
171
173
|
update_pairs.each do |key, value|
|
172
174
|
value = yield(key, existing[key], value) if block_given?
|
@@ -106,7 +106,8 @@ module Moneta
|
|
106
106
|
|
107
107
|
# (see Defaults#merge!)
|
108
108
|
def merge!(pairs, options = {})
|
109
|
-
keys = pairs.map { |key, _| key }
|
109
|
+
keys = pairs.map { |key, _| key }.to_a
|
110
|
+
return self if keys.empty?
|
110
111
|
|
111
112
|
if block_given?
|
112
113
|
old_values = @backend.mget(*keys)
|
@@ -9,21 +9,10 @@ module Moneta
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def increment(key, amount = 1, options = {})
|
12
|
-
@backend.transaction do
|
13
|
-
|
14
|
-
|
15
|
-
if row = @load_for_update.call(key: key)
|
16
|
-
# Integer() will raise an exception if the existing value cannot be parsed
|
17
|
-
amount += Integer(row[config.value_column])
|
18
|
-
@increment_update.call(key: key, value: amount)
|
19
|
-
else
|
20
|
-
@create.call(key: key, value: amount)
|
21
|
-
end
|
22
|
-
amount
|
12
|
+
@backend.transaction(retry_on: [::Sequel::SerializationFailure]) do
|
13
|
+
@increment.call(key: key, amount: amount)
|
14
|
+
Integer(load(key))
|
23
15
|
end
|
24
|
-
rescue ::Sequel::SerializationFailure # Thrown on deadlock
|
25
|
-
tries ||= 0
|
26
|
-
(tries += 1) <= 3 ? retry : raise
|
27
16
|
end
|
28
17
|
|
29
18
|
def merge!(pairs, options = {}, &block)
|
@@ -55,10 +44,9 @@ module Moneta
|
|
55
44
|
end
|
56
45
|
|
57
46
|
def prepare_increment
|
58
|
-
@
|
59
|
-
.
|
60
|
-
.prepare(:
|
61
|
-
super
|
47
|
+
@increment = @table
|
48
|
+
.on_duplicate_key_update(config.value_column => ::Sequel.cast(config.value_column, Integer) + :$amount)
|
49
|
+
.prepare(:insert, statement_id(:increment_insert), config.key_column => :$key, config.value_column => :$amount)
|
62
50
|
end
|
63
51
|
end
|
64
52
|
end
|
@@ -213,9 +213,16 @@ module Moneta
|
|
213
213
|
end
|
214
214
|
|
215
215
|
def prepare_values_at
|
216
|
+
# Sequel's hstore_ops gets confused if we try to construct this
|
217
|
+
# directly, because the CAST is not an array literal, or a PG array
|
218
|
+
lookup = ::Sequel::SQL::PlaceholderLiteralString.new(
|
219
|
+
['(', '->', ')'],
|
220
|
+
[config.value_column, ::Sequel.cast(:$keys, :"text[]")]
|
221
|
+
)
|
222
|
+
|
216
223
|
@values_at = @table
|
217
224
|
.where(config.key_column => :$row)
|
218
|
-
.select(
|
225
|
+
.select(lookup.as(:values))
|
219
226
|
.prepare(:first, statement_id(:hstore_values_at))
|
220
227
|
end
|
221
228
|
|
@@ -148,8 +148,10 @@ module Moneta
|
|
148
148
|
pairs = pairs.to_a
|
149
149
|
end
|
150
150
|
|
151
|
-
|
152
|
-
|
151
|
+
unless pairs.empty?
|
152
|
+
query = "replace into #{config.table} (k, v) values" + (['(?, ?)'] * pairs.length).join(',')
|
153
|
+
backend.query(query, pairs.flatten).close
|
154
|
+
end
|
153
155
|
rescue
|
154
156
|
backend.rollback if transaction
|
155
157
|
raise
|
data/lib/moneta/adapters/yaml.rb
CHANGED
@@ -5,7 +5,13 @@ module Moneta
|
|
5
5
|
# YAML::Store backend
|
6
6
|
# @api public
|
7
7
|
class YAML < PStore
|
8
|
-
|
8
|
+
# @!method initialize(options = {})
|
9
|
+
# @param [Hash] options
|
10
|
+
# @option options [YAML::Store] :backend YAML store to use
|
11
|
+
# @option options [String] :file YAML file to open - required unless using :backend
|
12
|
+
# @option options [Boolean] :threadsafe (false) Makes the YAML store thread-safe
|
13
|
+
# @option options Other options passed to `YAML::Store#new`
|
14
|
+
backend { |file:, threadsafe: false, **options| ::YAML::Store.new(file, threadsafe, options) }
|
9
15
|
end
|
10
16
|
end
|
11
17
|
end
|
data/lib/moneta/pool.rb
CHANGED
@@ -123,30 +123,28 @@ module Moneta
|
|
123
123
|
|
124
124
|
def run
|
125
125
|
Thread.new do
|
126
|
-
|
127
|
-
populate_stores
|
126
|
+
populate_stores
|
128
127
|
|
129
|
-
|
130
|
-
|
128
|
+
until @stopping && @stores.empty?
|
129
|
+
loop_start = Time.now
|
131
130
|
|
132
|
-
|
133
|
-
|
131
|
+
# Block until a message arrives, or until we time out for some reason
|
132
|
+
request = pop
|
134
133
|
|
135
|
-
|
136
|
-
|
134
|
+
# Record how long we were idle, for stats purposes
|
135
|
+
@idle_time = Time.now - loop_start
|
137
136
|
|
138
|
-
|
139
|
-
|
137
|
+
# If a message arrived, handle it
|
138
|
+
handle_request(request) if request
|
140
139
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
end
|
146
|
-
rescue => e
|
147
|
-
reject_waiting(e.message)
|
148
|
-
raise
|
140
|
+
# Handle any stale checkout requests
|
141
|
+
handle_timed_out_requests
|
142
|
+
# Drop any stores that are no longer needed
|
143
|
+
remove_unneeded_stores
|
149
144
|
end
|
145
|
+
rescue => e
|
146
|
+
reject_waiting(e.message)
|
147
|
+
raise
|
150
148
|
end
|
151
149
|
end
|
152
150
|
|
data/lib/moneta/proxy.rb
CHANGED
data/lib/moneta/server.rb
CHANGED
@@ -60,7 +60,7 @@ module Moneta
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def read_msg
|
63
|
-
size = read(4).
|
63
|
+
size = read(4).unpack1('N')
|
64
64
|
throw :closed, 'Message too big' if size > @max_size
|
65
65
|
Marshal.load(read(size))
|
66
66
|
end
|
@@ -107,16 +107,14 @@ module Moneta
|
|
107
107
|
|
108
108
|
# Detect support for socket#sendmsg_nonblock
|
109
109
|
Socket.new(Socket::AF_INET, Socket::SOCK_STREAM).tap do |socket|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
@io.write_nonblock(msg)
|
119
|
-
end
|
110
|
+
socket.sendmsg_nonblock('probe')
|
111
|
+
rescue Errno::EPIPE, Errno::ENOTCONN
|
112
|
+
def sendmsg(msg)
|
113
|
+
@io.sendmsg_nonblock(msg)
|
114
|
+
end
|
115
|
+
rescue NotImplementedError
|
116
|
+
def sendmsg(msg)
|
117
|
+
@io.write_nonblock(msg)
|
120
118
|
end
|
121
119
|
end
|
122
120
|
|
@@ -20,7 +20,7 @@ module Moneta
|
|
20
20
|
snappy: [ :compress, '::Snappy.inflate(%s)', '::Snappy.deflate(%s)', 'snappy' ],
|
21
21
|
quicklz: [ :compress, '::QuickLZ.decompress(%s)', '::QuickLZ.compress(%s)', 'qlzruby' ],
|
22
22
|
zlib: [ :compress, '::Zlib::Inflate.inflate(%s)', '::Zlib::Deflate.deflate(%s)', 'zlib' ],
|
23
|
-
base64: [ :encode, "%s.
|
23
|
+
base64: [ :encode, "%s.unpack1('m0')", "[%s].pack('m0')" ],
|
24
24
|
urlsafe_base64: [
|
25
25
|
:encode,
|
26
26
|
'Base64.urlsafe_decode64(%s)',
|
@@ -28,9 +28,9 @@ module Moneta
|
|
28
28
|
'base64'
|
29
29
|
],
|
30
30
|
escape: [ :encode, 'Helper.unescape(%s)', 'Helper.escape(%s)' ],
|
31
|
-
hex: [ :encode, "[%s].pack('H*')", "%s.
|
32
|
-
qp: [ :encode, "%s.
|
33
|
-
uuencode: [ :encode, "%s.
|
31
|
+
hex: [ :encode, "[%s].pack('H*')", "%s.unpack1('H*')" ],
|
32
|
+
qp: [ :encode, "%s.unpack1('M')", "[%s].pack('M')" ],
|
33
|
+
uuencode: [ :encode, "%s.unpack1('u')", "[%s].pack('u')" ],
|
34
34
|
hmac: [
|
35
35
|
:hmac,
|
36
36
|
'Helper.hmacverify(%s, options[:secret] || @secret)',
|
data/lib/moneta/transformer.rb
CHANGED
@@ -141,6 +141,8 @@ module Moneta
|
|
141
141
|
end
|
142
142
|
def merge!(pairs, options = {})
|
143
143
|
keys, values = pairs.to_a.transpose
|
144
|
+
keys ||= []
|
145
|
+
values ||= []
|
144
146
|
t_keys = keys.map { |key| #{key} }
|
145
147
|
block = if block_given?
|
146
148
|
key_lookup = Hash[t_keys.zip(keys)]
|
@@ -296,6 +298,8 @@ module Moneta
|
|
296
298
|
end
|
297
299
|
def merge!(pairs, options = {})
|
298
300
|
keys, values = pairs.to_a.transpose
|
301
|
+
keys ||= []
|
302
|
+
values ||= []
|
299
303
|
t_keys = keys.map { |key| #{key} }
|
300
304
|
key_lookup = Hash[t_keys.zip(keys)]
|
301
305
|
|
data/lib/moneta/version.rb
CHANGED
data/lib/moneta.rb
CHANGED
@@ -144,7 +144,7 @@ module Moneta
|
|
144
144
|
a = Adapters.const_get(name).new(options)
|
145
145
|
build do
|
146
146
|
use :Logger, Hash === logger ? logger : {} if logger
|
147
|
-
use :Expires, expires: options[:expires] if !a.supports?(:expires)
|
147
|
+
use :Expires, expires: options[:expires] if expires && !a.supports?(:expires)
|
148
148
|
use :Transformer, transformer
|
149
149
|
use :Lock if threadsafe
|
150
150
|
adapter a
|