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