module ElasticAPM::GraphQL

def self.trace(key, data)

rubocop:disable Style/ExplicitBlockArgument
def self.trace(key, data)
  return yield unless KEYS_TO_NAME.key?(key)
  return yield unless (transaction = ElasticAPM.current_transaction)
  if key == 'execute_query'
    transaction.name =
      "#{PREFIX}#{query_name(data[:query])}"
  end
  results =
    ElasticAPM.with_span(
      KEYS_TO_NAME.fetch(key, key),
      TYPE, subtype: SUBTYPE, action: key
    ) { yield }
  if key == 'execute_multiplex'
    transaction.name = "#{PREFIX}#{concat_names(results)}"
  end
  results
end

def concat_names(results)

def concat_names(results)
  if results.length > MAX_NUMBER_OF_QUERIES_FOR_NAME
    return MULTIPLE_QUERIES
  end
  results.map do |result|
    query_name(result.query)
  end.join(CONCATENATOR)
end

def query_name(query)

def query_name(query)
  query.operation_name || UNNAMED
end