module GraphQL::FragmentCache::Cacher
Saves resolved fragment values to cache store
Public Class Methods
call(query)
click to toggle source
# File lib/graphql/fragment_cache/cacher.rb, line 10 def call(query) return unless query.context.fragments? if FragmentCache.cache_store.respond_to?(:write_multi) batched_persist(query) else persist(query) end end
Private Class Methods
batched_persist(query)
click to toggle source
# File lib/graphql/fragment_cache/cacher.rb, line 22 def batched_persist(query) select_valid_fragments(query).group_by(&:options).each do |options, group| hash = group.map { |fragment| [fragment.cache_key, fragment.value] }.to_h FragmentCache.cache_store.write_multi(hash, **options) end end
persist(query)
click to toggle source
# File lib/graphql/fragment_cache/cacher.rb, line 29 def persist(query) select_valid_fragments(query).each do |fragment| FragmentCache.cache_store.write(fragment.cache_key, fragment.value, **fragment.options) end end
select_valid_fragments(query)
click to toggle source
# File lib/graphql/fragment_cache/cacher.rb, line 35 def select_valid_fragments(query) query.context.fragments.select(&:with_final_value?) end