32 lines
734 B
Ruby
32 lines
734 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Graphql
|
|
module FindArgumentInParent
|
|
# Searches up the GraphQL AST and returns the first matching argument
|
|
# passed to a node
|
|
def self.find(parent, argument, limit_depth: nil)
|
|
argument = argument.to_s.camelize(:lower).to_sym
|
|
depth = 0
|
|
|
|
while parent.respond_to?(:parent)
|
|
args = node_args(parent)
|
|
return args[argument] if args.key?(argument)
|
|
|
|
depth += 1
|
|
return if limit_depth && depth >= limit_depth
|
|
|
|
parent = parent.parent
|
|
end
|
|
end
|
|
|
|
class << self
|
|
private
|
|
|
|
def node_args(node)
|
|
node.irep_node.arguments
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|