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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b1a107c67b6ae1ccb5ad9abcd8f13b1255e46b07d48726c44b89e2e41186a2bb
4
- data.tar.gz: be454318e55f60ca236b4fbb1ecb9a68fe144e636e13deb43587f94385f7c0cf
3
+ metadata.gz: b6b2c3e2e7b905079dce0ddbbf0b48028a36d68b10da5ab4278d597eaf70713a
4
+ data.tar.gz: 9e730e031d3b73eaa9fb27f838fb4f6761256755281257cb99db9b3b15659ded
5
5
  SHA512:
6
- metadata.gz: 7af60e8a27c62b336d31ec574aa5b3321ec7d73e3097c90d4027763f71148dc587d5113c9ae36576ea8869f4908d40145997c657ce2d5f4321fa9695df56128b
7
- data.tar.gz: 4b3e8f9aebd58d53de0dc13688fdfb3d0b8f4ffdf0015d688e8329fc0d50b3dc8d81cc69dda3e16e51c08fbc82fb35fd2755c984cd8de53f9ea0c59650c8cd7c
6
+ metadata.gz: 70bba5bd544d0d2e95ae9bec6b5c4762eec9b036fe750a0777ef7663903b9894e05f8c2fcb703f2d021023594132ab2d6d6cecea4a1d8e2c12a3b72dd1c1d7e2
7
+ data.tar.gz: 27594e6cb05baefffd863555b226f2b672a3c84dcebbb661672266cba0ede47181efe39e702b7a44872582b0a873d5957e91200b4e8a1c6ef34aaf3f76abba98
@@ -1,8 +1,8 @@
1
1
  require 'active_support/concern'
2
- require 'serializer/application_serializer'
2
+ require_relative 'serializer/application_serializer'
3
3
  Dir[File.join(Rails.root, 'app', 'serializers', '**', '*.rb')].each {|file| require file }
4
- require 'serializer/configuration'
5
- require 'serializer/concern'
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/
@@ -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?("#{self.class.name}Serializer")
9
- serializer_klass = "#{self.class.name}Serializer".constantize
10
- serializer_klass.public_instance_methods.each do |query_name|
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
- Rails.logger.info "Serializer: Class #{self.class.name} does not have the serializer module #{self.class.name}Serializer defined." if Serializer.configuration.debug
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?("SerializerMethods")
73
- serializer_klass.const_set('SerializerMethods', Module.new {})
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
- serializer_klass.public_instance_methods.each do |query_name|
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::SerializerMethods.send(:define_method, serializer_name) do |opts = {}|
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::SerializerMethods.send(:define_method, serializer_name) do |opts = {}|
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
- # Inject instance methods
96
- subclass.send(:include, serializer_klass::SerializerMethods)
97
- # Inject class methods
98
- subclass.send(:extend, serializer_klass::SerializerMethods)
99
- # Inject class methods that has queries
100
- subclass.send(:extend, serializer_klass)
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.0.0
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.0'
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.0'
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
- - GNU
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.1.2
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