any_cache 0.3.1 → 0.4.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.
@@ -16,6 +16,7 @@ module AnyCache::Adapters
16
16
  driver.respond_to?(:read_multi) &&
17
17
  driver.respond_to?(:write) &&
18
18
  driver.respond_to?(:write_multi) &&
19
+ driver.respond_to?(:fetch) &&
19
20
  driver.respond_to?(:fetch_multi) &&
20
21
  driver.respond_to?(:delete) &&
21
22
  driver.respond_to?(:delete_matched) &&
@@ -24,8 +25,8 @@ module AnyCache::Adapters
24
25
  driver.respond_to?(:expire) &&
25
26
  driver.respond_to?(:persist) &&
26
27
  driver.respond_to?(:clear) &&
27
- driver.respond_to?(:exist?) &&
28
- driver.respond_to?(:fetch)
28
+ driver.respond_to?(:cleanup) &&
29
+ driver.respond_to?(:exist?)
29
30
  end
30
31
  # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize
31
32
  end
@@ -36,6 +37,7 @@ module AnyCache::Adapters
36
37
  :read_multi,
37
38
  :write,
38
39
  :write_multi,
40
+ :fetch,
39
41
  :fetch_multi,
40
42
  :delete,
41
43
  :delete_matched,
@@ -44,7 +46,7 @@ module AnyCache::Adapters
44
46
  :expire,
45
47
  :persist,
46
48
  :clear,
47
- :exist?,
48
- :fetch
49
+ :cleanup,
50
+ :exist?
49
51
  end
50
52
  end
@@ -3,7 +3,7 @@
3
3
  module AnyCache::Adapters
4
4
  # @api private
5
5
  # @since 0.1.0
6
- class Redis < Basic
6
+ class Redis < Basic # rubocop:disable Metrics/ClassLength
7
7
  class << self
8
8
  # @param driver [Object]
9
9
  # @return [Boolean]
@@ -61,45 +61,57 @@ module AnyCache::Adapters
61
61
  :scan
62
62
 
63
63
  # @param key [String]
64
- # @param options [Hash]
64
+ # @option raw [Boolean]
65
65
  # @return [Object]
66
66
  #
67
67
  # @api private
68
68
  # @since 0.1.0
69
69
  def read(key, **options)
70
- get(key)
70
+ value = get(key)
71
+ raw = options.fetch(:raw, false)
72
+
73
+ raw ? value : detransform_value(value)
71
74
  end
72
75
 
73
76
  # @param keys [Array<String>]
74
- # @param options [Hash]
77
+ # @option raw [Boolean]
75
78
  # @return [Hash]
76
79
  #
77
80
  # @api private
78
81
  # @since 0.3.0
79
82
  def read_multi(*keys, **options)
80
- mapped_mget(*keys)
83
+ raw = options.fetch(:raw, false)
84
+ entries = mapped_mget(*keys)
85
+
86
+ raw ? entries : detransform_pairset(entries)
81
87
  end
82
88
 
83
89
  # @param key [String]
84
90
  # @param value [Object]
91
+ # @option raw [Boolean]
85
92
  # @option expires_in [NilClass, Integer] Time in seconds
86
93
  # @return [void]
87
94
  #
88
95
  # @api private
89
96
  # @since 0.1.0
90
97
  def write(key, value, **options)
98
+ raw = options.fetch(:raw, false)
91
99
  expires_in = options.fetch(:expires_in, NO_EXPIRATION_TTL)
100
+ value = transform_value(value) unless raw
92
101
 
93
102
  expires_in ? setex(key, expires_in, value) : set(key, value)
94
103
  end
95
104
 
96
105
  # @param entries [Hash]
97
- # @param options [Hash]
106
+ # @option raw [Boolean]
98
107
  # @return [void]
99
108
  #
100
109
  # @api private
101
110
  # @since 0.3.0
102
111
  def write_multi(entries, **options)
112
+ raw = options.fetch(:raw, false)
113
+ entries = transform_pairset(entries) unless raw
114
+
103
115
  mapped_mset(entries)
104
116
  end
105
117
 
@@ -115,7 +127,7 @@ module AnyCache::Adapters
115
127
  force_rewrite = force_rewrite.call(key) if force_rewrite.respond_to?(:call)
116
128
 
117
129
  # NOTE: think about #pipelined
118
- read(key).tap { |value| return value if value } unless force_rewrite
130
+ read(key, **options).tap { |value| return value if value } unless force_rewrite
119
131
 
120
132
  yield(key).tap { |value| write(key, value, **options) } if block_given?
121
133
  end
@@ -238,6 +250,15 @@ module AnyCache::Adapters
238
250
  flushdb
239
251
  end
240
252
 
253
+ # @param options [Hash]
254
+ # @return [void]
255
+ #
256
+ # @api private
257
+ # @since 0.4.0
258
+ def cleanup(**options)
259
+ # NOTE: manual removing is not suppored (redis doing this by itself)
260
+ end
261
+
241
262
  # @param key [String]
242
263
  # @param options [Hash]
243
264
  # @return [Boolean]
@@ -18,15 +18,16 @@ module AnyCache::Adapters
18
18
  def_delegators :driver, :mset
19
19
 
20
20
  # @param key [String]
21
- # @param options [Hash]
21
+ # @option raw [Boolean]
22
22
  # @return [Object]
23
23
  #
24
24
  # @api private
25
25
  # @since 0.1.0
26
26
  def read(key, **options)
27
- raw = options.fetch(:raw, true)
27
+ raw = options.fetch(:raw, false)
28
+ value = get(key, raw: true)
28
29
 
29
- get(key, raw: raw)
30
+ raw ? value : detransform_value(value)
30
31
  end
31
32
 
32
33
  # @param keys [Array<String>]
@@ -43,24 +44,29 @@ module AnyCache::Adapters
43
44
  # @param key [String]
44
45
  # @param value [Object]
45
46
  # @option expires_in [NilClass, Integer] Time in seconds
47
+ # @option raw [Boolean]
46
48
  # @return [void]
47
49
  #
48
50
  # @api private
49
51
  # @since 0.1.0
50
52
  def write(key, value, **options)
51
53
  expires_in = options.fetch(:expires_in, NO_EXPIRATION_TTL)
52
- raw = options.fetch(:raw, true)
54
+ raw = options.fetch(:raw, false)
55
+ value = transform_value(value) unless raw
53
56
 
54
- expires_in ? setex(key, expires_in, value, raw: raw) : set(key, value, raw: raw)
57
+ expires_in ? setex(key, expires_in, value, raw: true) : set(key, value, raw: true)
55
58
  end
56
59
 
57
60
  # @param entries [Hash]
58
- # @param options [Hash]
61
+ # @option raw [Boolean]
59
62
  # @return [void]
60
63
  #
61
64
  # @api private
62
65
  # @since 0.3.0
63
66
  def write_multi(entries, **options)
67
+ raw = options.fetch(:raw, false)
68
+ entries = transform_pairset(entries) unless raw
69
+
64
70
  mset(*entries.to_a.flatten!, raw: true)
65
71
  end
66
72
  end
@@ -40,7 +40,7 @@ module AnyCache::Delegation
40
40
  AnyCache::Logging::Activity.log(
41
41
  self, logger, activity: delegat, message:
42
42
  "performed <#{delegat}> operation with " \
43
- "params: #{args.inspect} and options: #{opts.inspect}."
43
+ "attributes: #{args.inspect} and options: #{opts.inspect}."
44
44
  ) if logger
45
45
  end
46
46
  end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.4.0
5
+ module AnyCache::Dumper
6
+ require_relative 'dumper/interface_access_mixin'
7
+
8
+ class << self
9
+ # @param hash [Hash]
10
+ # @return [Hash]
11
+ #
12
+ # @api private
13
+ # @since 0.4.0
14
+ def transform_hash(hash)
15
+ {}.tap do |entries|
16
+ hash.each_pair do |key, value|
17
+ entries[key] = dump(value)
18
+ end
19
+ end
20
+ end
21
+
22
+ # @param hash [Hash]
23
+ # @return [Hash]
24
+ #
25
+ # @api private
26
+ # @since 0.4.0
27
+ def detransform_hash(hash)
28
+ {}.tap do |entries|
29
+ hash.each_pair do |key, value|
30
+ entries[key] = load(value)
31
+ end
32
+ end
33
+ end
34
+
35
+ # @param value [Object]
36
+ # @return [String]
37
+ #
38
+ # @api private
39
+ # @since 0.4.0
40
+ def dump(value)
41
+ return value if value.nil?
42
+ Zlib::Deflate.deflate(Marshal.dump(value))
43
+ end
44
+
45
+ # @param value [String]
46
+ # @return [Object]
47
+ #
48
+ # @api private
49
+ # @since 0.4.0
50
+ def load(value)
51
+ return value if value.nil?
52
+ Marshal.load(Zlib::Inflate.inflate(value))
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.4.0
5
+ module AnyCache::Dumper::InterfaceAccessMixin
6
+ # @param value [Object]
7
+ # @return [Object]
8
+ #
9
+ # @api private
10
+ # @since 0.4.0
11
+ def transform_value(value)
12
+ AnyCache::Dumper.dump(value)
13
+ end
14
+
15
+ # @param value [Object]
16
+ # @return [Object]
17
+ #
18
+ # @api private
19
+ # @since 0.4.0
20
+ def detransform_value(value)
21
+ AnyCache::Dumper.load(value)
22
+ end
23
+
24
+ # @param pairset [Hash]
25
+ # @return [Hash]
26
+ #
27
+ # @api private
28
+ # @since 0.4.0
29
+ def transform_pairset(pairset)
30
+ AnyCache::Dumper.transform_hash(pairset)
31
+ end
32
+
33
+ # @param pairset [Hash]
34
+ # @return [Hash]
35
+ #
36
+ # @api private
37
+ # @since 0.4.0
38
+ def detransform_pairset(pairset)
39
+ AnyCache::Dumper.detransform_hash(pairset)
40
+ end
41
+ end
@@ -58,4 +58,3 @@ module AnyCache::Patches::DalliStore
58
58
  # rubocop:enable all
59
59
  end
60
60
  end
61
-
@@ -5,5 +5,5 @@ class AnyCache
5
5
  #
6
6
  # @api public
7
7
  # @since 0.1.0
8
- VERSION = '0.3.1'
8
+ VERSION = '0.4.0'
9
9
  end
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.1
4
+ version: 0.4.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-10-08 00:00:00.000000000 Z
11
+ date: 2018-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.6'
33
+ version: '0.8'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.6'
40
+ version: '0.8'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: coveralls
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.9'
75
+ version: '0.13'
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.9'
82
+ version: '0.13'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rspec
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -205,6 +205,8 @@ files:
205
205
  - lib/any_cache/drivers/dalli.rb
206
206
  - lib/any_cache/drivers/redis.rb
207
207
  - lib/any_cache/drivers/redis_store.rb
208
+ - lib/any_cache/dumper.rb
209
+ - lib/any_cache/dumper/interface_access_mixin.rb
208
210
  - lib/any_cache/error.rb
209
211
  - lib/any_cache/logging.rb
210
212
  - lib/any_cache/logging/activity.rb
@@ -224,7 +226,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
224
226
  requirements:
225
227
  - - ">="
226
228
  - !ruby/object:Gem::Version
227
- version: 2.3.7
229
+ version: 2.3.8
228
230
  required_rubygems_version: !ruby/object:Gem::Requirement
229
231
  requirements:
230
232
  - - ">="