Module: ActiveModel::Serializer::Caching
- Extended by:
- ActiveSupport::Concern
- Included in:
- ActiveModel::Serializer
- Defined in:
- lib/active_model/serializer/concerns/caching.rb
Defined Under Namespace
Modules: ClassMethods
Constant Summary collapse
- CALLER_FILE =
Matches
"c:/git/emberjs/ember-crm-backend/app/serializers/lead_serializer.rb:1:in `<top (required)>'" AND "/c/git/emberjs/ember-crm-backend/app/serializers/lead_serializer.rb:1:in `<top (required)>'" AS c/git/emberjs/ember-crm-backend/app/serializers/lead_serializer.rb / \A # start of string .+ # file path (one or more characters) (?= # stop previous match when :\d+ # a colon is followed by one or more digits :in # followed by a colon followed by in ) /x
Instance Method Summary collapse
- #cache_key(adapter_instance) ⇒ Object
- #expand_cache_key(parts) ⇒ Object
- #fetch(adapter_instance, cache_options = serializer_class._cache_options, key = nil) ⇒ Object
-
#fetch_attributes(fields, cached_attributes, adapter_instance) ⇒ Object
INSTANCE METHODS.
-
#fetch_attributes_fragment(adapter_instance, cached_attributes = {}) ⇒ Object
1.
-
#object_cache_key ⇒ Object
Use object’s cache_key if available, else derive a key from the object Pass the
keyoption to thecachedeclaration or override this method to customize the cache key. - #serializer_class ⇒ Object
Instance Method Details
#cache_key(adapter_instance) ⇒ Object
267 268 269 270 271 272 273 274 275 |
# File 'lib/active_model/serializer/concerns/caching.rb', line 267 def cache_key(adapter_instance) return @cache_key if defined?(@cache_key) parts = [] parts << object_cache_key parts << adapter_instance.cache_key parts << serializer_class._cache_digest unless serializer_class._skip_digest? @cache_key = (parts) end |
#expand_cache_key(parts) ⇒ Object
277 278 279 |
# File 'lib/active_model/serializer/concerns/caching.rb', line 277 def (parts) ActiveSupport::Cache.(parts) end |
#fetch(adapter_instance, cache_options = serializer_class._cache_options, key = nil) ⇒ Object
229 230 231 232 233 234 235 236 237 238 |
# File 'lib/active_model/serializer/concerns/caching.rb', line 229 def fetch(adapter_instance, = serializer_class., key = nil) if serializer_class.cache_store key ||= cache_key(adapter_instance) serializer_class.cache_store.fetch(key, ) do yield end else yield end end |
#fetch_attributes(fields, cached_attributes, adapter_instance) ⇒ Object
INSTANCE METHODS
220 221 222 223 224 225 226 227 |
# File 'lib/active_model/serializer/concerns/caching.rb', line 220 def fetch_attributes(fields, cached_attributes, adapter_instance) key = cache_key(adapter_instance) cached_attributes.fetch(key) do fetch(adapter_instance, serializer_class., key) do attributes(fields, true) end end end |
#fetch_attributes_fragment(adapter_instance, cached_attributes = {}) ⇒ Object
-
Determine cached fields from serializer class options
-
Get non_cached_fields and fetch cache_fields
-
Merge the two hashes using adapter_instance#fragment_cache
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 |
# File 'lib/active_model/serializer/concerns/caching.rb', line 243 def fetch_attributes_fragment(adapter_instance, cached_attributes = {}) serializer_class. ||= {} serializer_class.[:key] = serializer_class._cache_key if serializer_class._cache_key fields = serializer_class.fragmented_attributes non_cached_fields = fields[:non_cached].dup non_cached_hash = attributes(non_cached_fields, true) include_directive = JSONAPI::IncludeDirective.new(non_cached_fields - non_cached_hash.keys) non_cached_hash.merge! associations_hash({}, { include_directive: include_directive }, adapter_instance) cached_fields = fields[:cached].dup key = cache_key(adapter_instance) cached_hash = cached_attributes.fetch(key) do fetch(adapter_instance, serializer_class., key) do hash = attributes(cached_fields, true) include_directive = JSONAPI::IncludeDirective.new(cached_fields - hash.keys) hash.merge! associations_hash({}, { include_directive: include_directive }, adapter_instance) end end # Merge both results adapter_instance.fragment_cache(cached_hash, non_cached_hash) end |
#object_cache_key ⇒ Object
Use object’s cache_key if available, else derive a key from the object Pass the key option to the cache declaration or override this method to customize the cache key
283 284 285 286 287 288 289 290 291 292 293 |
# File 'lib/active_model/serializer/concerns/caching.rb', line 283 def object_cache_key if object.respond_to?(:cache_key) object.cache_key elsif (serializer_cache_key = (serializer_class._cache_key || serializer_class.[:key])) object_time_safe = object.updated_at object_time_safe = object_time_safe.strftime('%Y%m%d%H%M%S%9N') if object_time_safe.respond_to?(:strftime) "#{serializer_cache_key}/#{object.id}-#{object_time_safe}" else fail UndefinedCacheKey, "#{object.class} must define #cache_key, or the 'key:' option must be passed into '#{serializer_class}.cache'" end end |
#serializer_class ⇒ Object
295 296 297 |
# File 'lib/active_model/serializer/concerns/caching.rb', line 295 def serializer_class @serializer_class ||= self.class end |