any_cache 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +3 -0
- data/lib/any_cache.rb +3 -1
- data/lib/any_cache/error.rb +3 -0
- data/lib/any_cache/patches.rb +41 -0
- data/lib/any_cache/patches/dalli_store.rb +61 -0
- data/lib/any_cache/version.rb +4 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ffa4d18aa6e7fdabf6cbb94da73a58c5daf2ced4aa74b28a7f16a73ed24cfc3e
|
4
|
+
data.tar.gz: 3a275c65d65426dfa41ba0fc00ac9b9de2da3684427e6ead5de9586021bcd574
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 01e02bdaa716816ff2be016843337c1968a865b99ac98418ae2b7fa6bc5d7e32b9be986e48ffcd417b65fd6e88dc635b2087d14ee12b057c7e7b1cddf8e7706f
|
7
|
+
data.tar.gz: cf62adafcbf850fd47147e6b35f2dd9fc8adaf34735bebed6a66b86bb89bbc0d76d035774dfae885a708c5ef542684fea13891d06d7e93d2fb8e50d002d9c488
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
# Changelog
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
+
## [0.3.1] - 2018-10-08
|
5
|
+
### Added
|
6
|
+
- patch interface `AnyCache.enable_patch!(:patch_series_name)`:
|
7
|
+
- `ActiveSupport::Cache::DalliStore` patch: now the `#fetch` method provides
|
8
|
+
a cache key attribute to the fallback proc (can be enabled via `.enable(:dalli_store)`);
|
9
|
+
|
4
10
|
## [0.3.0] - 2018-10-06
|
5
11
|
### Added
|
6
12
|
- support for `ActiveSupport::Cache::DalliStore` client;
|
data/README.md
CHANGED
@@ -60,6 +60,7 @@ require 'any_cache'
|
|
60
60
|
- [Persist](#persist)
|
61
61
|
- [Existence](#existence)
|
62
62
|
- [Clear](#clear)
|
63
|
+
- [Roadmap](#roadmap)
|
63
64
|
|
64
65
|
---
|
65
66
|
|
@@ -195,6 +196,8 @@ require 'dalli'
|
|
195
196
|
require 'active_support'
|
196
197
|
require 'any_cache'
|
197
198
|
|
199
|
+
AnyCache.enable_patch!(:dalli_store)
|
200
|
+
|
198
201
|
AnyCache.configure do |conf|
|
199
202
|
conf.driver = :as_dalli_store
|
200
203
|
conf.as_dalli_store.servers = ... # string or array of strings
|
data/lib/any_cache.rb
CHANGED
@@ -14,12 +14,14 @@ class AnyCache
|
|
14
14
|
require_relative 'any_cache/adapters'
|
15
15
|
require_relative 'any_cache/logging'
|
16
16
|
require_relative 'any_cache/delegation'
|
17
|
+
require_relative 'any_cache/patches'
|
17
18
|
|
18
19
|
# @since 0.2.0
|
19
20
|
include Qonfig::Configurable
|
20
|
-
|
21
21
|
# @since 0.3.0
|
22
22
|
include Delegation
|
23
|
+
# @since 0.3.1
|
24
|
+
extend Patches::InterfaceAccessMixin
|
23
25
|
|
24
26
|
# @since 0.2.0
|
25
27
|
# rubocop:disable Metrics/BlockLength
|
data/lib/any_cache/error.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# @since 0.3.1
|
5
|
+
module AnyCache::Patches
|
6
|
+
# @since 0.3.1
|
7
|
+
require_relative 'patches/dalli_store'
|
8
|
+
|
9
|
+
class << self
|
10
|
+
# @param patch_series [Symbol, String]
|
11
|
+
# @return [void]
|
12
|
+
#
|
13
|
+
# @raise [AnyCache::NonexistentPatchError]
|
14
|
+
#
|
15
|
+
# @api private
|
16
|
+
# @since 0.3.1
|
17
|
+
def enable!(patch_series)
|
18
|
+
case patch_series
|
19
|
+
when :dalli_store, 'dalli_store'
|
20
|
+
AnyCache::Patches::DalliStore.enable!
|
21
|
+
else
|
22
|
+
raise AnyCache::NonexistentPatchError, "Can't enable nonexistnet patch! (#{patch_series})"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# @api private
|
28
|
+
# @since 0.3.1
|
29
|
+
module InterfaceAccessMixin
|
30
|
+
# @param patch_series [Symbol, String]
|
31
|
+
# @return [void]
|
32
|
+
#
|
33
|
+
# @see AnyCache::Patches#enable!
|
34
|
+
#
|
35
|
+
# @api private
|
36
|
+
# @since 0.3.1
|
37
|
+
def enable_patch!(patch_series)
|
38
|
+
AnyCache::Patches.enable!(patch_series)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# @since 0.3.1
|
5
|
+
module AnyCache::Patches::DalliStore
|
6
|
+
class << self
|
7
|
+
# @return [void]
|
8
|
+
#
|
9
|
+
# @api private
|
10
|
+
# @since 0.3.1
|
11
|
+
def enable!
|
12
|
+
defined?(::Dalli) &&
|
13
|
+
defined?(::ActiveSupport::Cache::DalliStore) &&
|
14
|
+
Gem::Version.new(::Dalli::VERSION) <= Gem::Version.new('2.7.8') &&
|
15
|
+
::ActiveSupport::Cache::DalliStore.prepend(ActiveSupportFetchWithKey)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# @api private
|
20
|
+
# @since 0.3.1
|
21
|
+
module ActiveSupportFetchWithKey
|
22
|
+
# NOTE: original fetch implementation with my own little fix (see #43 line of code below)
|
23
|
+
# rubocop:disable all
|
24
|
+
def fetch(name, options=nil)
|
25
|
+
options ||= {}
|
26
|
+
options[:cache_nils] = true if @options[:cache_nils]
|
27
|
+
namespaced_name = namespaced_key(name, options)
|
28
|
+
not_found = options[:cache_nils] ? Dalli::Server::NOT_FOUND : nil
|
29
|
+
if block_given?
|
30
|
+
entry = not_found
|
31
|
+
unless options[:force]
|
32
|
+
entry = instrument_with_log(:read, namespaced_name, options) do |payload|
|
33
|
+
read_entry(namespaced_name, options).tap do |result|
|
34
|
+
if payload
|
35
|
+
payload[:super_operation] = :fetch
|
36
|
+
payload[:hit] = not_found != result
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
if not_found == entry
|
43
|
+
result = instrument_with_log(:generate, namespaced_name, options) do |payload|
|
44
|
+
# FIX: https://github.com/petergoldstein/dalli/pull/701
|
45
|
+
yield(name)
|
46
|
+
# FIX: https://github.com/petergoldstein/dalli/pull/701
|
47
|
+
end
|
48
|
+
write(name, result, options)
|
49
|
+
result
|
50
|
+
else
|
51
|
+
instrument_with_log(:fetch_hit, namespaced_name, options) { |payload| }
|
52
|
+
entry
|
53
|
+
end
|
54
|
+
else
|
55
|
+
read(name, options)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
# rubocop:enable all
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
data/lib/any_cache/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: any_cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rustam Ibragimov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -209,6 +209,8 @@ files:
|
|
209
209
|
- lib/any_cache/logging.rb
|
210
210
|
- lib/any_cache/logging/activity.rb
|
211
211
|
- lib/any_cache/logging/logger.rb
|
212
|
+
- lib/any_cache/patches.rb
|
213
|
+
- lib/any_cache/patches/dalli_store.rb
|
212
214
|
- lib/any_cache/version.rb
|
213
215
|
homepage: https://github.com/0exp/any_cache
|
214
216
|
licenses:
|