Module: ActiveModel::Serializer::Caching::ClassMethods
- Defined in:
- lib/active_model/serializer/caching.rb
Instance Method Summary (collapse)
- - (Object) _cache_digest
- - (Boolean) _skip_digest?
-
- (Object) cache(options = {})
Enables a serializer to be automatically cached.
- - (Boolean) cache_enabled?
-
- (Hash) cache_read_multi(collection_serializer, adapter_instance, include_directive)
Read cache from cache_store.
-
- (nil, ...) cache_store
The canonical method for getting the cache store for the serializer.
-
- (Object) digest_caller_file(caller_line)
Hashes contents of file for
_cache_digest
. - - (Boolean) fragment_cache_enabled?
- - (Object) fragmented_attributes
- - (Object) inherited(base)
-
- (String?) object_cache_key(serializer, adapter_instance)
The cache_key of the serializer or nil.
-
- (Array) object_cache_keys(collection_serializer, adapter_instance, include_directive)
Find all cache_key for the collection_serializer.
-
- (true, false) perform_caching
(also: #perform_caching?)
Value is from ActiveModelSerializers.config.perform_caching.
Instance Method Details
- (Object) _cache_digest
48 49 50 51 |
# File 'lib/active_model/serializer/caching.rb', line 48 def _cache_digest return @_cache_digest if defined?(@_cache_digest) @_cache_digest = digest_caller_file(_cache_digest_file_path) end |
- (Boolean) _skip_digest?
67 68 69 |
# File 'lib/active_model/serializer/caching.rb', line 67 def _skip_digest? && [:skip_digest] end |
- (Object) cache(options = {})
require less code comments. See
Enables a serializer to be automatically cached
Sets ::_cache
object to
ActionController::Base.cache_store
when Rails.configuration.action_controller.perform_caching
github.com/rails-api/active_model_serializers/pull/1249#issuecomment-146567837
105 106 107 108 109 110 111 112 113 114 |
# File 'lib/active_model/serializer/caching.rb', line 105 def cache( = {}) self._cache = .delete(:cache_store) || ActiveModelSerializers.config.cache_store || ActiveSupport::Cache.lookup_store(:null_store) self._cache_key = .delete(:key) self._cache_only = .delete(:only) self._cache_except = .delete(:except) self. = .empty? ? nil : end |
- (Boolean) cache_enabled?
150 151 152 |
# File 'lib/active_model/serializer/caching.rb', line 150 def cache_enabled? perform_caching? && cache_store && !_cache_only && !_cache_except end |
- (Hash) cache_read_multi(collection_serializer, adapter_instance, include_directive)
Read cache from cache_store
161 162 163 164 165 166 167 168 169 |
# File 'lib/active_model/serializer/caching.rb', line 161 def cache_read_multi(collection_serializer, adapter_instance, include_directive) return {} if ActiveModelSerializers.config.cache_store.blank? keys = object_cache_keys(collection_serializer, adapter_instance, include_directive) return {} if keys.blank? ActiveModelSerializers.config.cache_store.read_multi(*keys) end |
- (nil, ...) cache_store
The canonical method for getting the cache store for the serializer.
140 141 142 143 144 145 146 147 148 |
# File 'lib/active_model/serializer/caching.rb', line 140 def cache_store return nil if _cache.nil? return _cache if _cache.class != ActiveSupport::Cache::NullStore if ActiveModelSerializers.config.cache_store self._cache = ActiveModelSerializers.config.cache_store else nil end end |
- (Object) digest_caller_file(caller_line)
Hashes contents of file for _cache_digest
54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/active_model/serializer/caching.rb', line 54 def digest_caller_file(caller_line) serializer_file_path = caller_line[CALLER_FILE] serializer_file_contents = IO.read(serializer_file_path) Digest::MD5.hexdigest(serializer_file_contents) rescue TypeError, Errno::ENOENT warn <<-EOF.strip_heredoc Cannot digest non-existent file: '#{caller_line}'. Please set `::_cache_digest` of the serializer if you'd like to cache it. EOF ''.freeze end |
- (Boolean) fragment_cache_enabled?
154 155 156 157 |
# File 'lib/active_model/serializer/caching.rb', line 154 def fragment_cache_enabled? perform_caching? && cache_store && (_cache_only && !_cache_except || !_cache_only && _cache_except) end |
- (Object) fragmented_attributes
71 72 73 74 75 76 77 78 79 80 |
# File 'lib/active_model/serializer/caching.rb', line 71 def fragmented_attributes cached = _cache_only ? _cache_only : _attributes - _cache_except cached = cached.map! { |field| _attributes_keys.fetch(field, field) } non_cached = _attributes - cached non_cached = non_cached.map! { |field| _attributes_keys.fetch(field, field) } { cached: cached, non_cached: non_cached } end |
- (Object) inherited(base)
42 43 44 45 46 |
# File 'lib/active_model/serializer/caching.rb', line 42 def inherited(base) super caller_line = caller[1] base._cache_digest_file_path = caller_line end |
- (String?) object_cache_key(serializer, adapter_instance)
Returns the cache_key of the serializer or nil
197 198 199 200 201 |
# File 'lib/active_model/serializer/caching.rb', line 197 def object_cache_key(serializer, adapter_instance) return unless serializer.present? && serializer.object.present? serializer.class.cache_enabled? ? serializer.cache_key(adapter_instance) : nil end |
- (Array) object_cache_keys(collection_serializer, adapter_instance, include_directive)
Find all cache_key for the collection_serializer
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/active_model/serializer/caching.rb', line 176 def object_cache_keys(collection_serializer, adapter_instance, include_directive) cache_keys = [] collection_serializer.each do |serializer| cache_keys << object_cache_key(serializer, adapter_instance) serializer.associations(include_directive).each do |association| if association.serializer.respond_to?(:each) association.serializer.each do |sub_serializer| cache_keys << object_cache_key(sub_serializer, adapter_instance) end else cache_keys << object_cache_key(association.serializer, adapter_instance) end end end cache_keys.compact.uniq end |
- (true, false) perform_caching Also known as: perform_caching?
Value is from ActiveModelSerializers.config.perform_caching. Is used to globally enable or disable all serializer caching, just like Rails.configuration.action_controller.perform_caching, which is its default value in a Rails application. Memoizes value of config first time it is called with a non-nil value. rubocop:disable Style/ClassVars
123 124 125 126 |
# File 'lib/active_model/serializer/caching.rb', line 123 def perform_caching return @@perform_caching if defined?(@@perform_caching) && !@@perform_caching.nil? @@perform_caching = ActiveModelSerializers.config.perform_caching end |