any_cache 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
  - - ">="