any_cache 0.2.0 → 0.3.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.
@@ -39,9 +39,16 @@ module AnyCache::Adapters
39
39
  # @since 0.1.0
40
40
  MIN_DECRESEAD_VAL = 0
41
41
 
42
+ # @return [Array]
43
+ #
44
+ # @api private
45
+ # @since 0.3.0
46
+ READ_MULTI_EMPTY_KEYS_SET = [].freeze
47
+
42
48
  # @since 0.1.0
43
49
  def_delegators :driver,
44
50
  :get,
51
+ :get_multi,
45
52
  :set,
46
53
  :incr,
47
54
  :decr,
@@ -59,6 +66,25 @@ module AnyCache::Adapters
59
66
  get(key)
60
67
  end
61
68
 
69
+ # @param keys [Array<String>]
70
+ # @param options [Hash]
71
+ # @return [Hash]
72
+ #
73
+ # @api private
74
+ # @since 0.3.0
75
+ def read_multi(*keys, **options)
76
+ get_multi(*keys).tap do |res|
77
+ res.merge!(Hash[(keys - res.keys).zip(READ_MULTI_EMPTY_KEYS_SET)])
78
+ end
79
+ end
80
+
81
+ # @param key [String]
82
+ # @param value [Object]
83
+ # @option expires_in [Integer]
84
+ # @return [void]
85
+ #
86
+ # @api private
87
+ # @since 0.1.0
62
88
  def write(key, value, **options)
63
89
  expires_in = options.fetch(:expires_in, NO_EXPIRATION_TTL)
64
90
  raw = options.fetch(:raw, true)
@@ -66,6 +92,51 @@ module AnyCache::Adapters
66
92
  set(key, value, expires_in, raw: raw)
67
93
  end
68
94
 
95
+ # @param entries [Hash]
96
+ # @param options [Hash]
97
+ # @return [void]
98
+ #
99
+ # @api private
100
+ # @since 0.3.0
101
+ def write_multi(entries, **options)
102
+ raw = options.fetch(:raw, true)
103
+
104
+ entries.each_pair { |key, value| write(key, value, raw: raw) }
105
+ end
106
+
107
+ # @param key [String]
108
+ # @param fallback [Proc]
109
+ # @option expires_in [Integer]
110
+ # @option force [Boolean, Proc]
111
+ # @return [Object]
112
+ #
113
+ # @api private
114
+ # @since 0.2.0
115
+ def fetch(key, **options, &fallback)
116
+ force_rewrite = options.fetch(:force, false)
117
+ force_rewrite = force_rewrite.call(key) if force_rewrite.respond_to?(:call)
118
+
119
+ # NOTE: can conflict with :cache_nils Dalli::Client's config
120
+ read(key).tap { |value| return value if value } unless force_rewrite
121
+
122
+ yield(key).tap { |value| write(key, value, **options) } if block_given?
123
+ end
124
+
125
+ # @param keys [Array<String>]
126
+ # @param fallback [Proc]
127
+ # @option force [Boolean, Proc]
128
+ # @option expires_in [Integer]
129
+ # @return [Hash]
130
+ #
131
+ # @api private
132
+ # @since 0.3.0
133
+ def fetch_multi(*keys, **options, &fallback)
134
+ # TODO: think about multi-thread approach
135
+ keys.each_with_object({}) do |key, dataset|
136
+ dataset[key] = fetch(key, **options, &fallback)
137
+ end
138
+ end
139
+
69
140
  # @param key [String]
70
141
  # @param options [Hash]
71
142
  # @return [void]
@@ -76,6 +147,16 @@ module AnyCache::Adapters
76
147
  driver.delete(key)
77
148
  end
78
149
 
150
+ # @param pattern [String, Regexp]
151
+ # @param options [Hash]
152
+ # @return [void]
153
+ #
154
+ # @api private
155
+ # @since 0.3.0
156
+ def delete_matched(pattern, **options)
157
+ # TODO: make it real >:]
158
+ end
159
+
79
160
  # @param key [String]
80
161
  # @param amount [Integer]
81
162
  # @option expires_in [NilClass, Integer]
@@ -147,22 +228,5 @@ module AnyCache::Adapters
147
228
  def exist?(key, **options)
148
229
  !get(key).nil? # NOTE: can conflict with :cache_nils Dalli::Client's config
149
230
  end
150
-
151
- # @param key [String]
152
- # @option expires_in [Integer]
153
- # @option force [Boolean]
154
- # @return [Object]
155
- #
156
- # @api private
157
- # @since 0.2.0
158
- def fetch(key, **options)
159
- force_rewrite = options.fetch(:force, false)
160
- force_rewrite = force_rewrite.call if force_rewrite.respond_to?(:call)
161
-
162
- # NOTE: can conflict with :cache_nils Dalli::Client's config
163
- read(key).tap { |value| return value if value } unless force_rewrite
164
-
165
- yield.tap { |value| write(key, value, **options) } if block_given?
166
- end
167
231
  end
168
232
  end
@@ -10,10 +10,15 @@ module AnyCache::Adapters
10
10
  #
11
11
  # @api private
12
12
  # @since 0.1.0
13
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize
13
14
  def supported_driver?(driver)
14
15
  driver.respond_to?(:read) &&
16
+ driver.respond_to?(:read_multi) &&
15
17
  driver.respond_to?(:write) &&
18
+ driver.respond_to?(:write_multi) &&
19
+ driver.respond_to?(:fetch_multi) &&
16
20
  driver.respond_to?(:delete) &&
21
+ driver.respond_to?(:delete_matched) &&
17
22
  driver.respond_to?(:increment) &&
18
23
  driver.respond_to?(:decrement) &&
19
24
  driver.respond_to?(:expire) &&
@@ -22,13 +27,18 @@ module AnyCache::Adapters
22
27
  driver.respond_to?(:exist?) &&
23
28
  driver.respond_to?(:fetch)
24
29
  end
30
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize
25
31
  end
26
32
 
27
33
  # @since 0.1.0
28
34
  def_delegators :driver,
29
35
  :read,
36
+ :read_multi,
30
37
  :write,
38
+ :write_multi,
39
+ :fetch_multi,
31
40
  :delete,
41
+ :delete_matched,
32
42
  :increment,
33
43
  :decrement,
34
44
  :expire,
@@ -33,6 +33,18 @@ module AnyCache::Adapters
33
33
  # @since 0.1.0
34
34
  DEFAULT_INCR_DECR_AMOUNT = 1
35
35
 
36
+ # @return [String]
37
+ #
38
+ # @api private
39
+ # @since 0.3.0
40
+ DELETE_MATCHED_CURSOR_START = '0'
41
+
42
+ # @return [Integer]
43
+ #
44
+ # @api private
45
+ # @since 0.3.0
46
+ DELETE_MATCHED_BATCH_SIZE = 10
47
+
36
48
  # @since 0.1.0
37
49
  def_delegators :driver,
38
50
  :get,
@@ -43,7 +55,10 @@ module AnyCache::Adapters
43
55
  :decrby,
44
56
  :pipelined,
45
57
  :flushdb,
46
- :exists
58
+ :exists,
59
+ :mapped_mget,
60
+ :mapped_mset,
61
+ :scan
47
62
 
48
63
  # @param key [String]
49
64
  # @param options [Hash]
@@ -55,6 +70,16 @@ module AnyCache::Adapters
55
70
  get(key)
56
71
  end
57
72
 
73
+ # @param keys [Array<String>]
74
+ # @param options [Hash]
75
+ # @return [Hash]
76
+ #
77
+ # @api private
78
+ # @since 0.3.0
79
+ def read_multi(*keys, **options)
80
+ mapped_mget(*keys)
81
+ end
82
+
58
83
  # @param key [String]
59
84
  # @param value [Object]
60
85
  # @option expires_in [NilClass, Integer] Time in seconds
@@ -68,6 +93,47 @@ module AnyCache::Adapters
68
93
  expires_in ? setex(key, expires_in, value) : set(key, value)
69
94
  end
70
95
 
96
+ # @param entries [Hash]
97
+ # @param options [Hash]
98
+ # @return [void]
99
+ #
100
+ # @api private
101
+ # @since 0.3.0
102
+ def write_multi(entries, **options)
103
+ mapped_mset(entries)
104
+ end
105
+
106
+ # @param key [String]
107
+ # @option expires_in [Integer]
108
+ # @option force [Boolean]
109
+ # @return [Object]
110
+ #
111
+ # @api private
112
+ # @since 0.2.0
113
+ def fetch(key, **options, &fallback)
114
+ force_rewrite = options.fetch(:force, false)
115
+ force_rewrite = force_rewrite.call(key) if force_rewrite.respond_to?(:call)
116
+
117
+ # NOTE: think about #pipelined
118
+ read(key).tap { |value| return value if value } unless force_rewrite
119
+
120
+ yield(key).tap { |value| write(key, value, **options) } if block_given?
121
+ end
122
+
123
+ # @param keys [Array<string>]
124
+ # @param options [Hash]
125
+ # @param fallback [Proc]
126
+ # @return [Hash]
127
+ #
128
+ # @api private
129
+ # @since 0.3.0
130
+ def fetch_multi(*keys, **options, &fallback)
131
+ # TODO: think about multi-thread approach
132
+ keys.each_with_object({}) do |key, dataset|
133
+ dataset[key] = fetch(key, **options, &fallback)
134
+ end
135
+ end
136
+
71
137
  # @param key [String]
72
138
  # @param options [Hash]
73
139
  # @return [void]
@@ -78,6 +144,31 @@ module AnyCache::Adapters
78
144
  del(key)
79
145
  end
80
146
 
147
+ # @param pattern [String, Regexp]
148
+ # @param options [Hash]
149
+ # @return [void]
150
+ #
151
+ # @api private
152
+ # @since 0.3.0
153
+ def delete_matched(pattern, **options)
154
+ cursor = DELETE_MATCHED_CURSOR_START
155
+
156
+ case pattern
157
+ when String
158
+ loop do
159
+ cursor, keys = scan(cursor, match: pattern, count: DELETE_MATCHED_BATCH_SIZE)
160
+ del(keys)
161
+ break if cursor == DELETE_MATCHED_CURSOR_START
162
+ end
163
+ when Regexp
164
+ loop do
165
+ cursor, keys = scan(cursor, count: DELETE_MATCHED_BATCH_SIZE)
166
+ del(keys.grep(pattern))
167
+ break if cursor == DELETE_MATCHED_CURSOR_START
168
+ end
169
+ end
170
+ end
171
+
81
172
  # @param key [String]
82
173
  # @param amount [Integer]
83
174
  # @option expires_in [NilClass, Integer] Time in seconds
@@ -156,22 +247,5 @@ module AnyCache::Adapters
156
247
  def exist?(key, **options)
157
248
  exists(key)
158
249
  end
159
-
160
- # @param key [String]
161
- # @option expires_in [Integer]
162
- # @option force [Boolean]
163
- # @return [Object]
164
- #
165
- # @api private
166
- # @since 0.2.0
167
- def fetch(key, **options)
168
- force_rewrite = options.fetch(:force, false)
169
- force_rewrite = force_rewrite.call if force_rewrite.respond_to?(:call)
170
-
171
- # NOTE: think about #pipelined
172
- read(key).tap { |value| return value if value } unless force_rewrite
173
-
174
- yield.tap { |value| write(key, value, **options) } if block_given?
175
- end
176
250
  end
177
251
  end
@@ -15,6 +15,8 @@ module AnyCache::Adapters
15
15
  end
16
16
  end
17
17
 
18
+ def_delegators :driver, :mset
19
+
18
20
  # @param key [String]
19
21
  # @param options [Hash]
20
22
  # @return [Object]
@@ -27,6 +29,17 @@ module AnyCache::Adapters
27
29
  get(key, raw: raw)
28
30
  end
29
31
 
32
+ # @param keys [Array<String>]
33
+ # @param options [Hash]
34
+ # @return [Hash]
35
+ #
36
+ # @api private
37
+ # @since 0.3.0
38
+ def read_multi(*keys, **options)
39
+ # NOTE: cant use Redis::Store#mget cuz it has some marshalling errors :(
40
+ Hash[keys.zip(keys.map { |key| read(key, **options) })]
41
+ end
42
+
30
43
  # @param key [String]
31
44
  # @param value [Object]
32
45
  # @option expires_in [NilClass, Integer] Time in seconds
@@ -40,5 +53,15 @@ module AnyCache::Adapters
40
53
 
41
54
  expires_in ? setex(key, expires_in, value, raw: raw) : set(key, value, raw: raw)
42
55
  end
56
+
57
+ # @param entries [Hash]
58
+ # @param options [Hash]
59
+ # @return [void]
60
+ #
61
+ # @api private
62
+ # @since 0.3.0
63
+ def write_multi(entries, **options)
64
+ mset(*entries.to_a.flatten!, raw: true)
65
+ end
43
66
  end
44
67
  end
@@ -13,6 +13,7 @@ module AnyCache::Adapters
13
13
  require_relative 'adapters/active_support_redis_cache_store'
14
14
  require_relative 'adapters/active_support_memory_store'
15
15
  require_relative 'adapters/active_support_mem_cache_store'
16
+ require_relative 'adapters/active_support_dalli_store'
16
17
 
17
18
  class << self
18
19
  # @param driver [Object]
@@ -22,7 +23,7 @@ module AnyCache::Adapters
22
23
  #
23
24
  # @api private
24
25
  # @since 0.1.0
25
- # rubocop:disable Metrics/LineLength
26
+ # rubocop:disable Metrics/LineLength, Metrics/AbcSize
26
27
  def build(driver)
27
28
  case
28
29
  when RedisStore.supported_driver?(driver) then RedisStore.new(driver)
@@ -32,11 +33,12 @@ module AnyCache::Adapters
32
33
  when ActiveSupportMemoryStore.supported_driver?(driver) then ActiveSupportMemoryStore.new(driver)
33
34
  when ActiveSupportFileStore.supported_driver?(driver) then ActiveSupportFileStore.new(driver)
34
35
  when ActiveSupportMemCacheStore.supported_driver?(driver) then ActiveSupportMemCacheStore.new(driver)
36
+ when ActiveSupportDalliStore.supported_driver?(driver) then ActiveSupportDalliStore.new(driver)
35
37
  when Delegator.supported_driver?(driver) then Delegator.new(driver)
36
38
  else
37
39
  raise AnyCache::UnsupportedDriverError
38
40
  end
39
41
  end
40
- # rubocop:enable Metrics/LineLength
42
+ # rubocop:enable Metrics/LineLength, Metrics/AbcSize
41
43
  end
42
44
  end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.3.0
5
+ module AnyCache::Delegation
6
+ class << self
7
+ # @param base_klass [Class]
8
+ # @return [void]
9
+ #
10
+ # @api private
11
+ # @since 0.3.0
12
+ def included(base_klass)
13
+ base_klass.extend(ClassMethods)
14
+ end
15
+ end
16
+
17
+ # @api private
18
+ # @since 0.3.0
19
+ module ClassMethods
20
+ # @param receiver [Symbol, String]
21
+ # @param delegators [Array<Symbol, String>]
22
+ # @return [void]
23
+ #
24
+ # @api private
25
+ # @since 0.3.0
26
+ def def_loggable_delegators(receiver, *delegators)
27
+ delegators.each { |delegat| def_loggable_delegator(receiver, delegat) }
28
+ end
29
+
30
+ # @param receiver [Symbol, String]
31
+ # @param delegat [Symbol, String]
32
+ # @return [void]
33
+ #
34
+ # @api private
35
+ # @since 0.3.0
36
+ def def_loggable_delegator(receiver, delegat)
37
+ define_method(delegat) do |*args, **opts, &block|
38
+ send(receiver).send(delegat, *args, **opts, &block).tap do
39
+ shared_config[:logger].tap do |logger|
40
+ AnyCache::Logging::Activity.log(
41
+ self, logger, activity: delegat, message:
42
+ "performed <#{delegat}> operation with " \
43
+ "params: #{args.inspect} and options: #{opts.inspect}."
44
+ ) if logger
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AnyCache::Drivers::ActiveSupportDalliStore
4
+ class << self
5
+ # @param driver [::ActiveSupport::Cache::DalliStore]
6
+ # @return [Boolean]
7
+ #
8
+ # @api private
9
+ # @since 0.3.0
10
+ def supported_source?(driver)
11
+ defined?(::Dalli) &&
12
+ defined?(::ActiveSupport::Cache::DalliStore) &&
13
+ driver.is_a?(::ActiveSupport::Cache::DalliStore)
14
+ end
15
+
16
+ # @param settings [Qonfig:Settings]
17
+ # @return [::ActiveSupport::Cache::DalliStore]
18
+ #
19
+ # @api private
20
+ # @since 0.3.0
21
+ def build(settings)
22
+ ::ActiveSupport::Cache::DalliStore.new([Array(settings.servers), settings.options])
23
+ end
24
+ end
25
+ end
@@ -10,6 +10,7 @@ module AnyCache::Drivers
10
10
  require_relative 'drivers/active_support_memory_store'
11
11
  require_relative 'drivers/active_support_redis_cache_store'
12
12
  require_relative 'drivers/active_support_mem_cache_store'
13
+ require_relative 'drivers/active_support_dalli_store'
13
14
 
14
15
  class << self
15
16
  # @param config [Qonfig::DataSet]
@@ -19,6 +20,7 @@ module AnyCache::Drivers
19
20
  #
20
21
  # @api private
21
22
  # @since 0.2.0
23
+ # rubocop:disable Metrics/AbcSize
22
24
  def build(config)
23
25
  driver = config[:driver]
24
26
 
@@ -37,9 +39,12 @@ module AnyCache::Drivers
37
39
  ActiveSupportRedisCacheStore.build(config[:as_redis_cache_store])
38
40
  when :as_mem_cache_store
39
41
  ActiveSupportMemCacheStore.build(config[:as_mem_cache_store])
42
+ when :as_dalli_store
43
+ ActiveSupportDalliStore.build(config[:as_dalli_store])
40
44
  else
41
45
  raise AnyCache::UnsupportedDriverError
42
46
  end
43
47
  end
48
+ # rubocop:enable Metrics/AbcSize
44
49
  end
45
50
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.3.0
5
+ module AnyCache::Logging::Activity
6
+ # @return [String]
7
+ #
8
+ # @api private
9
+ # @since 0.3.0
10
+ ANONYMOUS_CACHER_CLASS_NAME = '<__anonymous_cache__>'
11
+
12
+ class << self
13
+ # @param cacher [AnyCache]
14
+ # @param logger [::Logger]
15
+ # @option activity [String, NilClass]
16
+ # @option message [String, NillClass]
17
+ # @return [void]
18
+ #
19
+ # @api private
20
+ # @since 0.3.0
21
+ def log(cacher, logger, activity: nil, message: nil)
22
+ cacher = cacher.class.name || ANONYMOUS_CACHER_CLASS_NAME
23
+ progname = "[AnyCache<#{cacher}>/Activity<#{activity}>]"
24
+ logger.add(logger.level, message, progname)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api public
4
+ # @since 0.3.0
5
+ class AnyCache::Logging::Logger < ::Logger
6
+ # @api public
7
+ # @since 0.3.0
8
+ def initialize(*, **)
9
+ super
10
+ self.level = ::Logger::INFO
11
+ end
12
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.3.0
5
+ module AnyCache::Logging
6
+ require_relative 'logging/logger'
7
+ require_relative 'logging/activity'
8
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  class AnyCache
4
4
  # @since 0.1.0
5
- VERSION = '0.2.0'
5
+ VERSION = '0.3.0'
6
6
  end
data/lib/any_cache.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'logger'
3
4
  require 'qonfig'
4
5
  require 'securerandom'
5
6
  require 'concurrent/atomic/reentrant_read_write_lock'
@@ -11,17 +12,22 @@ class AnyCache
11
12
  require_relative 'any_cache/error'
12
13
  require_relative 'any_cache/drivers'
13
14
  require_relative 'any_cache/adapters'
14
-
15
- # @since 0.1.0
16
- extend Forwardable
15
+ require_relative 'any_cache/logging'
16
+ require_relative 'any_cache/delegation'
17
17
 
18
18
  # @since 0.2.0
19
19
  include Qonfig::Configurable
20
20
 
21
+ # @since 0.3.0
22
+ include Delegation
23
+
21
24
  # @since 0.2.0
25
+ # rubocop:disable Metrics/BlockLength
22
26
  configuration do
23
27
  setting :driver
24
28
 
29
+ setting :logger, Logging::Logger.new(STDOUT)
30
+
25
31
  setting :redis do
26
32
  setting :options, {}
27
33
  end
@@ -52,7 +58,13 @@ class AnyCache
52
58
  setting :servers, nil
53
59
  setting :options, {}
54
60
  end
61
+
62
+ setting :as_dalli_store do
63
+ setting :servers, nil
64
+ setting :options, {}
65
+ end
55
66
  end
67
+ # rubocop:enable Metrics/BlockLength
56
68
 
57
69
  class << self
58
70
  # @param driver [Object]
@@ -66,18 +78,22 @@ class AnyCache
66
78
  end
67
79
 
68
80
  # @api public
69
- # @since 0.1.0
70
- def_delegators :adapter,
71
- :read,
72
- :write,
73
- :delete,
74
- :increment,
75
- :decrement,
76
- :expire,
77
- :persist,
78
- :clear,
79
- :exist?,
80
- :fetch
81
+ # @since 0.3.0
82
+ def_loggable_delegators :adapter,
83
+ :read,
84
+ :read_multi,
85
+ :write,
86
+ :write_multi,
87
+ :fetch,
88
+ :fetch_multi,
89
+ :delete,
90
+ :delete_matched,
91
+ :increment,
92
+ :decrement,
93
+ :expire,
94
+ :persist,
95
+ :clear,
96
+ :exist?
81
97
 
82
98
  # @return [AnyCache::Adapters::Basic]
83
99
  #
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.2.0
4
+ version: 0.3.0
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-09-04 00:00:00.000000000 Z
11
+ date: 2018-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.7'
75
+ version: '0.9'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0.7'
82
+ version: '0.9'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rspec
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -167,6 +167,7 @@ files:
167
167
  - gemfiles/redis_store.gemfile
168
168
  - lib/any_cache.rb
169
169
  - lib/any_cache/adapters.rb
170
+ - lib/any_cache/adapters/active_support_dalli_store.rb
170
171
  - lib/any_cache/adapters/active_support_file_store.rb
171
172
  - lib/any_cache/adapters/active_support_file_store/decrement.rb
172
173
  - lib/any_cache/adapters/active_support_file_store/expire.rb
@@ -194,7 +195,9 @@ files:
194
195
  - lib/any_cache/adapters/delegator.rb
195
196
  - lib/any_cache/adapters/redis.rb
196
197
  - lib/any_cache/adapters/redis_store.rb
198
+ - lib/any_cache/delegation.rb
197
199
  - lib/any_cache/drivers.rb
200
+ - lib/any_cache/drivers/active_support_dalli_store.rb
198
201
  - lib/any_cache/drivers/active_support_file_store.rb
199
202
  - lib/any_cache/drivers/active_support_mem_cache_store.rb
200
203
  - lib/any_cache/drivers/active_support_memory_store.rb
@@ -203,6 +206,9 @@ files:
203
206
  - lib/any_cache/drivers/redis.rb
204
207
  - lib/any_cache/drivers/redis_store.rb
205
208
  - lib/any_cache/error.rb
209
+ - lib/any_cache/logging.rb
210
+ - lib/any_cache/logging/activity.rb
211
+ - lib/any_cache/logging/logger.rb
206
212
  - lib/any_cache/version.rb
207
213
  homepage: https://github.com/0exp/any_cache
208
214
  licenses: