33 lines
734 B
Ruby
33 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
|