rails-brotli-cache 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 80eea251ed8707e59e4f8a9b829c7046dd9343edcd045e4ef83aa840d8fc5fae
4
- data.tar.gz: fbe018c38651848f9aba05d3b59e96c802b7afddc36099cc8d5a5a1099fd3975
3
+ metadata.gz: 3bb8214df1fb2d155f5ae121938b65e447206dba8480066ce6fe0ae3224a18f5
4
+ data.tar.gz: 9831643f175b1e5b7d8904ca696302640bd7fc5f3216f93575795ee4192d1fd1
5
5
  SHA512:
6
- metadata.gz: c4b1622f27a59b6b46067a5ee1d354a0696029e6ebdd71b8be913c59f021251a9862600b08ed12fb7111c7a9183bc07903227a3dc0f3d9ee1563e60de0546dc8
7
- data.tar.gz: 80a043902519762f273c65ce864ed0c9e64397c72a3a750f513e335502b46e7c1876a8d28653147db01b4762ba28be3c8f2dd4657e06671d140959a4aa0f3c09
6
+ metadata.gz: 0c8297ac281da41e9923721bc24984aa5f795eede3748ee93aa4a47c2d614dfbfe5641255217b010d126852723c69858f27b58f985125fd1b024472641ac46ff
7
+ data.tar.gz: 7ad44d4c2c4f1a9411d13fa44d11cbea56b262328e1a62b72f6b14ad8d397f6a53cc09542d5b918d80b504bcd4df6f27c08cec8ae4467a26ab494f1644ab1159
@@ -49,20 +49,8 @@ module RailsBrotliCache
49
49
  )
50
50
  end
51
51
 
52
- serialized = Marshal.dump(value)
53
52
  options = (options || {}).reverse_merge(compress: true)
54
-
55
- payload = if serialized.bytesize >= COMPRESS_THRESHOLD && !options.fetch(:compress) == false
56
- compressor = compressor_class(options, default: @compressor_class)
57
- compressed_payload = compressor.deflate(serialized)
58
- if compressed_payload.bytesize < serialized.bytesize
59
- MARK_BR_COMPRESSED + compressed_payload
60
- else
61
- serialized
62
- end
63
- else
64
- serialized
65
- end
53
+ payload = compressed(value, options)
66
54
 
67
55
  @core_store.write(
68
56
  cache_key(name),
@@ -77,39 +65,35 @@ module RailsBrotliCache
77
65
  options
78
66
  )
79
67
 
80
- return nil unless payload.present?
81
-
82
- return payload if payload.is_a?(Integer)
83
-
84
- serialized = if payload.start_with?(MARK_BR_COMPRESSED)
85
- compressor = compressor_class(options, default: @compressor_class)
86
- compressor.inflate(payload.byteslice(1..-1))
87
- else
88
- payload
89
- end
90
-
91
- Marshal.load(serialized)
68
+ uncompressed(payload)
92
69
  end
93
70
 
94
71
  def write_multi(hash, options = nil)
95
- hash.each do |key, val|
96
- write(key, val, options)
72
+ new_hash = hash.map do |key, val|
73
+ [
74
+ cache_key(key),
75
+ compressed(val, options)
76
+ ]
97
77
  end
78
+
79
+ @core_store.write_multi(new_hash, options)
98
80
  end
99
81
 
100
82
  def read_multi(*names)
101
83
  options = names.extract_options!
84
+ names = names.map { |name| cache_key(name) }
102
85
 
103
- Hash[names.map do |name|
104
- [name, read(name, options)]
86
+ Hash[core_store.read_multi(*names, options).map do |key, val|
87
+ [source_cache_key(key), uncompressed(val)]
105
88
  end]
106
89
  end
107
90
 
108
91
  def fetch_multi(*names)
109
92
  options = names.extract_options!
93
+ names = names.map { |name| cache_key(name) }
110
94
 
111
- names.each do |name|
112
- fetch(name, options) { yield(name) }
95
+ @core_store.fetch_multi(*names, options) do |name|
96
+ compressed(yield(name), options)
113
97
  end
114
98
  end
115
99
 
@@ -141,6 +125,38 @@ module RailsBrotliCache
141
125
 
142
126
  private
143
127
 
128
+ def compressed(value, options)
129
+ options ||= {}
130
+ serialized = Marshal.dump(value)
131
+
132
+ if serialized.bytesize >= COMPRESS_THRESHOLD && !options.fetch(:compress) == false
133
+ compressor = compressor_class(options, default: @compressor_class)
134
+ compressed_payload = compressor.deflate(serialized)
135
+ if compressed_payload.bytesize < serialized.bytesize
136
+ MARK_BR_COMPRESSED + compressed_payload
137
+ else
138
+ serialized
139
+ end
140
+ else
141
+ serialized
142
+ end
143
+ end
144
+
145
+ def uncompressed(payload)
146
+ return nil unless payload.present?
147
+
148
+ return payload if payload.is_a?(Integer)
149
+
150
+ serialized = if payload.start_with?(MARK_BR_COMPRESSED)
151
+ compressor = compressor_class(options, default: @compressor_class)
152
+ compressor.inflate(payload.byteslice(1..-1))
153
+ else
154
+ payload
155
+ end
156
+
157
+ Marshal.load(serialized)
158
+ end
159
+
144
160
  def compressor_class(options, default:)
145
161
  options = options || {}
146
162
  if (klass = options[:compressor_class])
@@ -154,6 +170,10 @@ module RailsBrotliCache
154
170
  "#{@prefix}#{name}"
155
171
  end
156
172
 
173
+ def source_cache_key(name)
174
+ name.remove(@prefix)
175
+ end
176
+
157
177
  class BrotliCompressor
158
178
  def self.deflate(payload)
159
179
  ::Brotli.deflate(payload, quality: BR_COMPRESS_QUALITY)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsBrotliCache
4
- VERSION = "0.3.7"
4
+ VERSION = "0.3.8"
5
5
  end
@@ -62,7 +62,6 @@ describe RailsBrotliCache do
62
62
  end
63
63
 
64
64
  it "for #write_multi and #read_multi" do
65
- if standard_cache.class != ActiveSupport::Cache::NullStore ## NullStore does not support read/write multi
66
65
  values = {
67
66
  "key_1" => "val_1",
68
67
  "key_2" => "val_2"
@@ -70,17 +69,14 @@ describe RailsBrotliCache do
70
69
 
71
70
  brotli_store.write_multi(values)
72
71
  standard_cache.write_multi(values)
73
- expect(brotli_store.read("key_1")).to eq "val_1"
74
- expect(brotli_store.read("key_2")).to eq "val_2"
75
- expect(standard_cache.read("key_1")).to eq "val_1"
76
- expect(standard_cache.read("key_2")).to eq "val_2"
72
+
73
+ expect(brotli_store.read("key_1")).to eq standard_cache.read("key_1")
74
+ expect(brotli_store.read("key_2")).to eq standard_cache.read("key_2")
77
75
 
78
76
  expect(brotli_store.read_multi("key_1", "key_2")).to eq(standard_cache.read_multi("key_1", "key_2"))
79
- end
80
77
  end
81
78
 
82
79
  it "for #fetch_multi" do
83
- if standard_cache.class != ActiveSupport::Cache::NullStore ## NullStore does not support fetch multi
84
80
  values = {
85
81
  "key_1" => "val_1",
86
82
  "key_2" => "val_2"
@@ -94,11 +90,10 @@ describe RailsBrotliCache do
94
90
  "val_#{key.split('_').last}"
95
91
  end
96
92
 
97
- expect(brotli_store.read("key_1")).to eq "val_1"
98
- expect(brotli_store.read("key_2")).to eq "val_2"
93
+ expect(brotli_store.read("key_1")).to eq standard_cache.read("key_1")
94
+ expect(brotli_store.read("key_2")).to eq standard_cache.read("key_2")
99
95
 
100
96
  expect(brotli_store.read_multi("key_1", "key_2")).to eq(standard_cache.read_multi("key_1", "key_2"))
101
- end
102
97
  end
103
98
  end
104
99
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-brotli-cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.3.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - pawurb