Sha256: 5b663aa19065b68cfacfbe6ecca61009ecae63afae3533c9c0ddd4c37b2be489

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

# frozen_string_literal: true

require 'graphql/cache/builder'

module GraphQL
  module Cache
    # Used to marshal data to/from cache on cache hits/misses
    class Marshal
      attr_accessor :key

      def self.[](key)
        new(key)
      end

      def initialize(key)
        self.key = key.to_s
      end

      def read(config, &block)
        cached = cache.read(key)

        if cached.nil?
          logger.debug "Cache miss: (#{key})"
          write config, &block
        else
          logger.debug "Cache hit: (#{key})"
          build cached, config
        end
      end

      def write(config)
        resolved = yield
        expiry = config[:metadata][:expiry] || GraphQL::Cache.expiry

        document = Builder[resolved].deconstruct

        cache.write(key, document, expires_in: expiry)
        resolved
      end

      def build(cached, config)
        Builder[cached].build(config)
      end

      def cache
        GraphQL::Cache.cache
      end

      def logger
        GraphQL::Cache.logger
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
graphql-cache-0.2.0 lib/graphql/cache/marshal.rb