rails_json_serializer 1.0.0 → 1.1.4
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.rb +3 -3
- data/lib/serializer/concern.rb +75 -15
- metadata +91 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6b2c3e2e7b905079dce0ddbbf0b48028a36d68b10da5ab4278d597eaf70713a
|
4
|
+
data.tar.gz: 9e730e031d3b73eaa9fb27f838fb4f6761256755281257cb99db9b3b15659ded
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70bba5bd544d0d2e95ae9bec6b5c4762eec9b036fe750a0777ef7663903b9894e05f8c2fcb703f2d021023594132ab2d6d6cecea4a1d8e2c12a3b72dd1c1d7e2
|
7
|
+
data.tar.gz: 27594e6cb05baefffd863555b226f2b672a3c84dcebbb661672266cba0ede47181efe39e702b7a44872582b0a873d5957e91200b4e8a1c6ef34aaf3f76abba98
|
data/lib/serializer.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'active_support/concern'
|
2
|
-
|
2
|
+
require_relative 'serializer/application_serializer'
|
3
3
|
Dir[File.join(Rails.root, 'app', 'serializers', '**', '*.rb')].each {|file| require file }
|
4
|
-
|
5
|
-
|
4
|
+
require_relative 'serializer/configuration'
|
5
|
+
require_relative 'serializer/concern'
|
6
6
|
|
7
7
|
module Serializer
|
8
8
|
# config src: http://lizabinante.com/blog/creating-a-configurable-ruby-gem/
|
data/lib/serializer/concern.rb
CHANGED
@@ -1,20 +1,30 @@
|
|
1
1
|
module Serializer
|
2
|
+
DELETE_MATCHED_SUPPORTED_CACHE_TYPES = [:memory_store, :file_store]
|
2
3
|
module Concern
|
3
4
|
# ActiveSupport extend src: https://stackoverflow.com/questions/2328984/rails-extending-activerecordbase
|
4
5
|
extend ActiveSupport::Concern
|
5
6
|
|
6
7
|
# START MODEL INSTANCE METHODS
|
7
8
|
def clear_serializer_cache
|
8
|
-
if self.class.const_defined?("
|
9
|
-
|
10
|
-
|
9
|
+
if self.class.const_defined?("SERIALIZER_QUERY_KEYS_CACHE")
|
10
|
+
|
11
|
+
# list_of_serializer_query_names = "#{self.class.name}::SERIALIZER_QUERY_KEYS_CACHE".constantize
|
12
|
+
self.class.get_cumulatively_inherited_serializer_query_list.each do |query_name|
|
11
13
|
cache_key = "#{self.class.name}_____#{query_name}___#{self.id}"
|
12
14
|
Rails.logger.info "Serializer: CLEARING CACHE KEY: #{cache_key}" if Serializer.configuration.debug
|
13
15
|
Rails.cache.delete(cache_key)
|
14
16
|
end
|
15
17
|
return true
|
16
18
|
else
|
17
|
-
|
19
|
+
# if Serializer.configuration.debug
|
20
|
+
Rails.logger.error(
|
21
|
+
"""
|
22
|
+
ERROR. COULD NOT CLEAR SERIALIZER CACHE FOR: Class #{self.class.name}
|
23
|
+
Serializer: Class #{self.class.name} may not have the serializer module #{self.class.name}Serializer defined.
|
24
|
+
Nor was it defined on an inheriting class.
|
25
|
+
"""
|
26
|
+
)
|
27
|
+
# end
|
18
28
|
return nil
|
19
29
|
end
|
20
30
|
end
|
@@ -69,11 +79,23 @@ module Serializer
|
|
69
79
|
serializer_klass = "#{subclass.name}Serializer".constantize
|
70
80
|
|
71
81
|
if serializer_klass.class == Module
|
72
|
-
if !serializer_klass.const_defined?("
|
73
|
-
serializer_klass.const_set('
|
82
|
+
if !serializer_klass.const_defined?("SerializerClassAndInstanceMethods")
|
83
|
+
serializer_klass.const_set('SerializerClassAndInstanceMethods', Module.new {})
|
74
84
|
end
|
85
|
+
if !serializer_klass.const_defined?("SerializerClassMethods")
|
86
|
+
serializer_klass.const_set('SerializerClassMethods', Module.new {})
|
87
|
+
serializer_klass::SerializerClassMethods.send(:define_method, :get_cumulatively_inherited_serializer_query_list) do |opts = {}|
|
88
|
+
if defined?(super)
|
89
|
+
return (subclass::SERIALIZER_QUERY_KEYS_CACHE + superclass.get_cumulatively_inherited_serializer_query_list).uniq
|
90
|
+
else
|
91
|
+
return subclass::SERIALIZER_QUERY_KEYS_CACHE
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
serializer_query_names = serializer_klass.public_instance_methods
|
75
97
|
|
76
|
-
|
98
|
+
serializer_query_names.each do |query_name|
|
77
99
|
serializer_name = query_name[/(?<name>.+)_query/, :name]
|
78
100
|
if serializer_name.nil?
|
79
101
|
Rails.logger.info "Serializer: #{serializer_klass.name} method #{query_name} does not end in '(.+)_query', as is expected of serializers" if Serializer.configuration.debug
|
@@ -82,22 +104,43 @@ module Serializer
|
|
82
104
|
# Skip if chosen to override it.
|
83
105
|
next if serializer_klass.respond_to?(serializer_name)
|
84
106
|
if serializer_name == 'serializer'
|
85
|
-
serializer_klass::
|
107
|
+
serializer_klass::SerializerClassAndInstanceMethods.send(:define_method, serializer_name) do |opts = {}|
|
86
108
|
super({json_query_override: query_name}.merge(opts))
|
87
109
|
end
|
88
110
|
else
|
89
|
-
serializer_klass::
|
111
|
+
serializer_klass::SerializerClassAndInstanceMethods.send(:define_method, serializer_name) do |opts = {}|
|
90
112
|
serializer({json_query_override: query_name}.merge(opts))
|
91
113
|
end
|
92
114
|
end
|
93
115
|
end
|
116
|
+
if serializer_query_names.any?
|
117
|
+
# Inject instance methods
|
118
|
+
subclass.send(:include, serializer_klass::SerializerClassAndInstanceMethods)
|
119
|
+
# Inject class methods
|
120
|
+
subclass.send(:extend, serializer_klass::SerializerClassAndInstanceMethods)
|
121
|
+
# Inject class methods that has queries
|
122
|
+
if Serializer.configuration.debug
|
123
|
+
Rails.logger.info "Injecting queries: #{serializer_klass.public_instance_methods} into class: #{subclass}"
|
124
|
+
end
|
125
|
+
puts "Injecting queries: #{serializer_klass.public_instance_methods} into class: #{subclass}"
|
126
|
+
subclass.send(:extend, serializer_klass)
|
127
|
+
# Injecting the Serializer Methods as a namespaced class of the rails class, so we can have
|
128
|
+
# access to the list of methods to clear their cache.
|
129
|
+
# 'Class Name + Serializer' does not work with inheritence.
|
130
|
+
subclass.const_set('SERIALIZER_QUERY_KEYS_CACHE', serializer_query_names)
|
131
|
+
# Inject class methods
|
132
|
+
subclass.send(:extend, serializer_klass::SerializerClassMethods)
|
94
133
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
134
|
+
# Issue with inheritting classes caching the serializer data from queries in super classes.
|
135
|
+
# Only on the rails server, not the console strangely.
|
136
|
+
if DELETE_MATCHED_SUPPORTED_CACHE_TYPES.include?(Rails.configuration.cache_store)
|
137
|
+
serializer_query_names.each do |query_name|
|
138
|
+
cache_key_prefix = /#{subclass.name}_____#{query_name}___(\d+)/
|
139
|
+
puts "Deleting cache here: Rails.cache.delete_matched(#{cache_key_prefix})"
|
140
|
+
Rails.cache.delete_matched(cache_key_prefix)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
101
144
|
else
|
102
145
|
Rails.logger.info "Serializer: #{serializer_klass.name} was not a Module as expected" if Serializer.configuration.debug
|
103
146
|
end
|
@@ -105,6 +148,23 @@ module Serializer
|
|
105
148
|
super(subclass)
|
106
149
|
end
|
107
150
|
|
151
|
+
# Class defined clear serializer
|
152
|
+
if DELETE_MATCHED_SUPPORTED_CACHE_TYPES.include?(Rails.configuration.cache_store)
|
153
|
+
def clear_serializer_cache
|
154
|
+
self.get_cumulatively_inherited_serializer_query_list.each do |query_name|
|
155
|
+
cache_key_prefix = /#{self.name}_____#{query_name}___(\d+)/
|
156
|
+
Rails.logger.info "Serializer: CLEARING CACHE KEY Prefix: #{cache_key_prefix}" if Serializer.configuration.debug
|
157
|
+
Rails.cache.delete_matched(cache_key_prefix)
|
158
|
+
end
|
159
|
+
return true
|
160
|
+
end
|
161
|
+
else
|
162
|
+
def clear_serializer_cache
|
163
|
+
puts "Not supported by rails cache store: #{Rails.configuration.cache_store}. Supported: #{DELETE_MATCHED_SUPPORTED_CACHE_TYPES}"
|
164
|
+
return false
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
108
168
|
# Can override the query, using the options. ex: {json_query_override: :tiny_children_serializer_query}
|
109
169
|
def serializer opts = {}
|
110
170
|
query = opts[:json_query_override].present? ? self.send(opts[:json_query_override], opts) : serializer_query(opts)
|
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: 1.
|
4
|
+
version: 1.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- benjamin.dana.software.dev@gmail.com
|
@@ -14,16 +14,100 @@ dependencies:
|
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '5.
|
19
|
+
version: '5.1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '5.
|
26
|
+
version: '5.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rails
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '5.1'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '5.1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.9'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.9'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: listen
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.2'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec-rails
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '4.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '4.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: database_cleaner
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.8'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.8'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: sqlite3
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.4'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.4'
|
27
111
|
description:
|
28
112
|
email:
|
29
113
|
executables: []
|
@@ -36,7 +120,7 @@ files:
|
|
36
120
|
- lib/serializer/configuration.rb
|
37
121
|
homepage: https://github.com/danabr75/rails_json_serializer
|
38
122
|
licenses:
|
39
|
-
-
|
123
|
+
- LGPL-3.0-only
|
40
124
|
metadata: {}
|
41
125
|
post_install_message:
|
42
126
|
rdoc_options: []
|
@@ -53,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
53
137
|
- !ruby/object:Gem::Version
|
54
138
|
version: '0'
|
55
139
|
requirements: []
|
56
|
-
rubygems_version: 3.
|
140
|
+
rubygems_version: 3.0.8
|
57
141
|
signing_key:
|
58
142
|
specification_version: 4
|
59
143
|
summary: An ActiveRecord JSON Serializer with supported caching and eager-loading
|