memcached_store 2.0.3 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 11b2d36add426b80ef8570fd72cdf247d0ebdf28
4
- data.tar.gz: ee4e959a7cad3844bdbd18eba3c274ba70a840f2
2
+ SHA256:
3
+ metadata.gz: 9e7243c82d777973585ebe50de354665846e66aed6e03e3464bc076037b291e0
4
+ data.tar.gz: fd1698923aa5ace4e2ec6ecfbcfc02d04111bd92ba06c3ee85c961440a2d535a
5
5
  SHA512:
6
- metadata.gz: e795749ad3162e9dffc249edfdef2408b5abff431942913ea690a3c13322957c9553cd2e997f4555a6f04422b9ed52d338b8a230c97b3e74dbaf8f203bd90df9
7
- data.tar.gz: 168f47809b0d3d74a61c1a7d82a021f6242ca1c2387d94f5a25f35c6ba70ad772a3ba6ca4ea632b1a59e08550e6ea82c9778961efe2f3f3937befca934fe9481
6
+ metadata.gz: 3bf90bd2fb5cc5a339dfe0d25c36a35494141ed091759015bfaac4fa913333dc5979220e0f44cb654d974e86aed295287d19e78824c42340af5a0b71b5aa00f2
7
+ data.tar.gz: d004c8b93109d62d7faec3484c5227d2819b5beaffb67d695f680beb2a7e458484d34f1efef4f2730a442ad1bdfa0eff261b363d65954dee35e2f8da096e2b29
@@ -58,6 +58,8 @@ module ActiveSupport
58
58
 
59
59
  attr_accessor :read_only, :swallow_exceptions
60
60
 
61
+ prepend(Strategy::LocalCache)
62
+
61
63
  def initialize(*addresses, **options)
62
64
  addresses = addresses.flatten
63
65
  options[:codec] ||= Codec.new
@@ -67,17 +69,28 @@ module ActiveSupport
67
69
  super(options)
68
70
 
69
71
  if addresses.first.is_a?(Memcached)
70
- @data = addresses.first
72
+ @connection = addresses.first
71
73
  raise "Memcached::Rails is no longer supported, "\
72
- "use a Memcached instance instead" if @data.is_a?(Memcached::Rails)
74
+ "use a Memcached instance instead" if @connection.is_a?(Memcached::Rails)
73
75
  else
74
76
  mem_cache_options = options.dup
75
77
  servers = mem_cache_options.delete(:servers)
76
78
  UNIVERSAL_OPTIONS.each { |name| mem_cache_options.delete(name) }
77
- @data = Memcached.new([*addresses, *servers], mem_cache_options)
79
+ @connection = Memcached.new([*addresses, *servers], mem_cache_options)
78
80
  end
81
+ end
82
+
83
+ def append(name, value, options = nil)
84
+ return true if read_only
85
+ options = merged_options(options)
86
+ normalized_key = normalize_key(name, options)
79
87
 
80
- extend Strategy::LocalCache
88
+ handle_exceptions(return_value_on_error: nil, on_miss: false, miss_exceptions: [Memcached::NotStored]) do
89
+ instrument(:append, name) do
90
+ @connection.append(normalized_key, value)
91
+ end
92
+ true
93
+ end
81
94
  end
82
95
 
83
96
  def write(*)
@@ -100,7 +113,7 @@ module ActiveSupport
100
113
 
101
114
  handle_exceptions(return_value_on_error: {}) do
102
115
  instrument(:read_multi, names, options) do
103
- if raw_values = @data.get(keys_to_names.keys)
116
+ if raw_values = @connection.get(keys_to_names.keys)
104
117
  raw_values.each do |key, value|
105
118
  entry = deserialize_entry(value)
106
119
  values[keys_to_names[key]] = entry.value unless entry.expired?
@@ -117,11 +130,11 @@ module ActiveSupport
117
130
 
118
131
  handle_exceptions(return_value_on_error: false) do
119
132
  instrument(:cas, name, options) do
120
- @data.cas(key, expiration(options)) do |raw_value|
133
+ @connection.cas(key, expiration(options)) do |raw_value|
121
134
  entry = deserialize_entry(raw_value)
122
135
  value = yield entry.value
123
136
  break true if read_only
124
- serialize_entry(Entry.new(value, options), options)
137
+ serialize_entry(Entry.new(value, **options), options)
125
138
  end
126
139
  end
127
140
  true
@@ -136,7 +149,7 @@ module ActiveSupport
136
149
 
137
150
  handle_exceptions(return_value_on_error: false) do
138
151
  instrument(:cas_multi, names, options) do
139
- @data.cas(keys_to_names.keys, expiration(options)) do |raw_values|
152
+ @connection.cas(keys_to_names.keys, expiration(options)) do |raw_values|
140
153
  values = {}
141
154
 
142
155
  raw_values.each do |key, raw_value|
@@ -149,7 +162,7 @@ module ActiveSupport
149
162
  break true if read_only
150
163
 
151
164
  serialized_values = values.map do |name, value|
152
- [normalize_key(name, options), serialize_entry(Entry.new(value, options), options)]
165
+ [normalize_key(name, options), serialize_entry(Entry.new(value, **options), options)]
153
166
  end
154
167
 
155
168
  Hash[serialized_values]
@@ -163,7 +176,7 @@ module ActiveSupport
163
176
  options = merged_options(options)
164
177
  handle_exceptions(return_value_on_error: nil) do
165
178
  instrument(:increment, name, amount: amount) do
166
- @data.incr(normalize_key(name, options), amount)
179
+ @connection.incr(normalize_key(name, options), amount)
167
180
  end
168
181
  end
169
182
  end
@@ -172,20 +185,20 @@ module ActiveSupport
172
185
  options = merged_options(options)
173
186
  handle_exceptions(return_value_on_error: nil) do
174
187
  instrument(:decrement, name, amount: amount) do
175
- @data.decr(normalize_key(name, options), amount)
188
+ @connection.decr(normalize_key(name, options), amount)
176
189
  end
177
190
  end
178
191
  end
179
192
 
180
193
  def clear(options = nil)
181
194
  ActiveSupport::Notifications.instrument("cache_clear.active_support", options || {}) do
182
- @data.flush
195
+ @connection.flush
183
196
  end
184
197
  end
185
198
 
186
199
  def stats
187
200
  ActiveSupport::Notifications.instrument("cache_stats.active_support") do
188
- @data.stats
201
+ @connection.stats
189
202
  end
190
203
  end
191
204
 
@@ -195,7 +208,7 @@ module ActiveSupport
195
208
 
196
209
  def reset #:nodoc:
197
210
  handle_exceptions(return_value_on_error: false) do
198
- @data.reset
211
+ @connection.reset
199
212
  end
200
213
  end
201
214
 
@@ -203,7 +216,7 @@ module ActiveSupport
203
216
 
204
217
  def read_entry(key, _options) # :nodoc:
205
218
  handle_exceptions(return_value_on_error: nil) do
206
- deserialize_entry(@data.get(escape_key(key)))
219
+ deserialize_entry(@connection.get(escape_key(key)))
207
220
  end
208
221
  end
209
222
 
@@ -213,7 +226,7 @@ module ActiveSupport
213
226
  expires_in = expiration(options)
214
227
  value = serialize_entry(entry, options)
215
228
  handle_exceptions(return_value_on_error: false) do
216
- @data.send(method, escape_key(key), value, expires_in)
229
+ @connection.send(method, escape_key(key), value, expires_in)
217
230
  true
218
231
  end
219
232
  end
@@ -221,7 +234,7 @@ module ActiveSupport
221
234
  def delete_entry(key, _options) # :nodoc:
222
235
  return true if read_only
223
236
  handle_exceptions(return_value_on_error: false, on_miss: true) do
224
- @data.delete(escape_key(key))
237
+ @connection.delete(escape_key(key))
225
238
  true
226
239
  end
227
240
  end
@@ -271,16 +284,15 @@ module ActiveSupport
271
284
 
272
285
  def expiration(options)
273
286
  expires_in = options[:expires_in].to_i
274
- if expires_in > 0 && !options[:raw]
275
- # Set the memcache expire a few minutes in the future to support race condition ttls on read
276
- expires_in += 5.minutes.to_i
287
+ if expires_in > 0 && options[:race_condition_ttl] && !options[:raw]
288
+ expires_in += options[:race_condition_ttl].to_i
277
289
  end
278
290
  expires_in
279
291
  end
280
292
 
281
- def handle_exceptions(return_value_on_error:, on_miss: return_value_on_error)
293
+ def handle_exceptions(return_value_on_error:, on_miss: return_value_on_error, miss_exceptions: [])
282
294
  yield
283
- rescue Memcached::NotFound, Memcached::ConnectionDataExists
295
+ rescue Memcached::NotFound, Memcached::ConnectionDataExists, *miss_exceptions
284
296
  on_miss
285
297
  rescue Memcached::Error => e
286
298
  log_warning(e)
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module MemcachedStore
3
- VERSION = "2.0.3"
3
+ VERSION = "2.2.0"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memcached_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Camilo Lopez
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2018-10-23 00:00:00.000000000 Z
14
+ date: 2021-05-26 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport
@@ -33,14 +33,14 @@ dependencies:
33
33
  requirements:
34
34
  - - "~>"
35
35
  - !ruby/object:Gem::Version
36
- version: 1.8.0
36
+ version: '1.8'
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - "~>"
42
42
  - !ruby/object:Gem::Version
43
- version: 1.8.0
43
+ version: '1.8'
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: rake
46
46
  requirement: !ruby/object:Gem::Requirement
@@ -55,6 +55,34 @@ dependencies:
55
55
  - - ">="
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0'
58
+ - !ruby/object:Gem::Dependency
59
+ name: mocha
60
+ requirement: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ - !ruby/object:Gem::Dependency
73
+ name: timecop
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
58
86
  description: Plugin-able Memcached adapters to add features (compression, safety)
59
87
  email:
60
88
  - camilo@camilolopez.com
@@ -75,7 +103,8 @@ files:
75
103
  homepage: https://github.com/Shopify/memcached_store/
76
104
  licenses:
77
105
  - MIT
78
- metadata: {}
106
+ metadata:
107
+ allowed_push_host: https://rubygems.org
79
108
  post_install_message:
80
109
  rdoc_options: []
81
110
  require_paths:
@@ -91,8 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
120
  - !ruby/object:Gem::Version
92
121
  version: '0'
93
122
  requirements: []
94
- rubyforge_project:
95
- rubygems_version: 2.6.14
123
+ rubygems_version: 3.2.17
96
124
  signing_key:
97
125
  specification_version: 4
98
126
  summary: Plugin-able Memcached adapters to add features (compression, safety)