rails_json_serializer 3.0.2 → 3.1.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.
- checksums.yaml +4 -4
- data/lib/serializer/configuration.rb +15 -1
- data/lib/serializer/model_serializer.rb +23 -10
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d3fc5e7e81a63f10f7944eed51908b6b0c64b348398b78119a2cb5613a5624d5
|
4
|
+
data.tar.gz: 107b8bb149af177a79c96ed017b42ebe3008d1685811225de3b25209d01a780c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '083495f8ec6a05a677273d64d86ac31920d6f37b4b55cb81995812d7f24520630562cfce1905d87cb91bc8c31284a60430aef164dc9826b19f435eff24b1ac2b'
|
7
|
+
data.tar.gz: 1feb1b497f6e4d5ab03f9ff7e9de02f672990b5555606fe896c58351656f4c3937b75e8334404c87b309a5cd300ec213bb0e556c7f3a686d0601e9137f835495
|
@@ -1,12 +1,26 @@
|
|
1
|
+
require "zlib"
|
2
|
+
|
1
3
|
module Serializer
|
2
4
|
class Configuration
|
3
|
-
attr_accessor :enable_includes, :default_cache_time, :disable_model_caching, :debug
|
5
|
+
attr_accessor :enable_includes, :default_cache_time, :disable_model_caching, :debug, :cache_key
|
6
|
+
attr_accessor :compress, :compressor, :decompressor
|
4
7
|
|
5
8
|
def initialize
|
6
9
|
@enable_includes = true
|
7
10
|
@default_cache_time = 360
|
8
11
|
@disable_model_caching = false
|
9
12
|
@debug = false
|
13
|
+
@compress = false
|
14
|
+
@cache_key = Proc.new { |class_name, query_name, object_id| "#{class_name}_____#{query_name}___#{object_id}" }
|
15
|
+
@compressor = Proc.new { |incoming_data| Base64.encode64(Zlib::Deflate.deflate(incoming_data.to_json)) }
|
16
|
+
|
17
|
+
# have to use 'temp_val', or else there's an issue with the libraries. Won't work as a 1-liner
|
18
|
+
@decompressor = Proc.new do |outgoing_data|
|
19
|
+
temp_val1 = Base64.decode64(outgoing_data)
|
20
|
+
temp_val2 = Zlib::Inflate.inflate(temp_val1)
|
21
|
+
JSON.parse(temp_val2)
|
22
|
+
end
|
23
|
+
|
10
24
|
end
|
11
25
|
end
|
12
26
|
end
|
@@ -30,8 +30,8 @@ module ModelSerializer
|
|
30
30
|
end
|
31
31
|
id_or_ids.each do |object_id|
|
32
32
|
self::SERIALIZER_QUERY_KEYS_CACHE.each do |query_name|
|
33
|
-
cache_key =
|
34
|
-
|
33
|
+
cache_key = Serializer.configuration.cache_key.call(self.name, query_name, object_id)
|
34
|
+
Rails.logger.debug "(class) CLEARING SERIALIZER CACHE: #{cache_key}" if Serializer.configuration.debug
|
35
35
|
Rails.cache.delete(cache_key)
|
36
36
|
end
|
37
37
|
end
|
@@ -121,18 +121,31 @@ module ModelSerializer
|
|
121
121
|
return super(options)
|
122
122
|
end
|
123
123
|
options[:ran_serialization] = true
|
124
|
+
|
124
125
|
# Not caching records that don't have IDs.
|
125
126
|
if !Serializer.configuration.disable_model_caching && self.id && options[:cache_key].present? && !(options.key?(:cache_for) && options[:cache_for].nil?)
|
126
|
-
cache_key =
|
127
|
+
cache_key = Serializer.configuration.cache_key.call(self.class.name, options[:cache_key], self.id)
|
128
|
+
|
127
129
|
if Rails.cache.exist?(cache_key)
|
128
|
-
Rails.logger.
|
129
|
-
|
130
|
+
Rails.logger.debug "Serializer: Cache reading #{cache_key}" if Serializer.configuration.debug
|
131
|
+
outgoing_data = Rails.cache.read(cache_key)
|
132
|
+
if (options.key?(:compress) && options[:compress] == true) || (!options.key?(:compress) && Serializer.configuration.compress)
|
133
|
+
outgoing_data = Serializer.configuration.decompressor.call(outgoing_data)
|
134
|
+
end
|
135
|
+
return outgoing_data
|
130
136
|
else
|
131
137
|
data = super(options)
|
132
138
|
data = self.class.as_json_associations_alias_fix(options, data)
|
139
|
+
|
140
|
+
# compress data
|
141
|
+
cachable_data = data
|
142
|
+
if (options.key?(:compress) && options[:compress] == true) || (!options.key?(:compress) && Serializer.configuration.compress)
|
143
|
+
cachable_data = Serializer.configuration.compressor.call(data)
|
144
|
+
end
|
145
|
+
|
133
146
|
begin
|
134
|
-
Rails.logger.
|
135
|
-
Rails.cache.write(cache_key,
|
147
|
+
Rails.logger.debug "Serializer: Caching #{cache_key} for #{(options[:cache_for] || Serializer.configuration.default_cache_time)} minutes." if Serializer.configuration.debug
|
148
|
+
Rails.cache.write(cache_key, cachable_data, expires_in: (options[:cache_for] || Serializer.configuration.default_cache_time).minute)
|
136
149
|
rescue Exception => e
|
137
150
|
Rails.logger.error "Serializer: Internal Server Error on #{self.class}#as_json ID: #{self.id} for cache key: #{cache_key}"
|
138
151
|
Rails.logger.error e.class
|
@@ -143,7 +156,7 @@ module ModelSerializer
|
|
143
156
|
end
|
144
157
|
else
|
145
158
|
if Serializer.configuration.debug && !Serializer.configuration.disable_model_caching && self.id && options[:cache_key].present? && options.key?(:cache_for) && options[:cache_for].nil?
|
146
|
-
Rails.logger.
|
159
|
+
Rails.logger.debug "Serializer: Caching #{cache_key} NOT caching due to `cache_for: nil`"
|
147
160
|
end
|
148
161
|
data = super(options)
|
149
162
|
data = self.class.as_json_associations_alias_fix(options, data)
|
@@ -167,8 +180,8 @@ module ModelSerializer
|
|
167
180
|
klass.send(:define_method, :clear_serializer_cache) do
|
168
181
|
if self.class.const_defined?("SERIALIZER_QUERY_KEYS_CACHE")
|
169
182
|
self.class::SERIALIZER_QUERY_KEYS_CACHE.each do |query_name|
|
170
|
-
cache_key =
|
171
|
-
Rails.logger.
|
183
|
+
cache_key = Serializer.configuration.cache_key.call(self.class.name, query_name, self.id)
|
184
|
+
Rails.logger.debug "Serializer: CLEARING CACHE KEY: #{cache_key}" if Serializer.configuration.debug
|
172
185
|
Rails.cache.delete(cache_key)
|
173
186
|
end
|
174
187
|
return true
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_json_serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- benjamin.dana.software.dev@gmail.com
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '5.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: zlib
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rails
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|