Sha256: fd313f300fda26b7f9dde3da1cbf3264e1a82a2194df70a9f722b687d7121190

Contents?: true

Size: 923 Bytes

Versions: 1

Compression:

Stored size: 923 Bytes

Contents

# frozen_string_literal: true

# preload resolver for queries
Rails.application.config.to_prepare do
  Types::QueryType.class_eval do
    # Add corresponding preloads to query results
    #   Note: key is automatically calculated based on method name
    # @param data (ActiveCollection)
    # @param preload_config (Same as Field: field[:preload])
    def resolve_preloads(data, preload_config)
      node = find_node(caller[0][/`.*'/][1..-2])
      return data unless node

      # relay support (TODO: add support to skip when not using relay)
      node = node.selections.first if %w[nodes edges].include?(node.selections.first.name)
      GraphqlPreloadQueries::Extensions::Preload.resolve_preloads(data, node, preload_config)
    end

    private

    def find_node(key)
      main_node = context.query.document.definitions.first
      main_node.selections.find { |node_i| node_i.name == key.to_s }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
graphql_preload_queries-0.1.0 config/initializers/add_query_resolver.rb