rails_json_serializer 1.0.0 → 1.1.4

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: 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