class JSONAPI::Renderer::CachedResourcesProcessor
@private
Public Class Methods
new(cache)
click to toggle source
# File lib/jsonapi/renderer/cached_resources_processor.rb, line 13 def initialize(cache) @cache = cache end
Public Instance Methods
cache_key_map(resources)
click to toggle source
# File lib/jsonapi/renderer/cached_resources_processor.rb, line 36 def cache_key_map(resources) resources.each_with_object({}) do |res, h| ri = [res.jsonapi_type, res.jsonapi_id] include_dir = @include_rels[ri] fields = @fields[ri.first.to_sym] h[res.jsonapi_cache_key(include: include_dir, fields: fields)] = [res, include_dir, fields] end end
process_resources()
click to toggle source
# File lib/jsonapi/renderer/cached_resources_processor.rb, line 17 def process_resources # NOTE(beauby): This is necessary for cache keys consistency. @include_rels = @include_rels.each_with_object({}) do |(k, v), h| h[k] = v.to_a.sort! end [@primary, @included].each do |resources| cache_hash = cache_key_map(resources) processed_resources = @cache.fetch_multi(*cache_hash.keys) do |key| res, include, fields = cache_hash[key] json = res.as_jsonapi(include: include, fields: fields).to_json JSONString.new(json) end resources.replace(processed_resources.values) end end