2021-03-08 18:12:59 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Gitlab
|
|
|
|
module Graphql
|
|
|
|
class BatchKey
|
|
|
|
attr_reader :object
|
2022-05-07 20:08:51 +05:30
|
|
|
|
2021-03-08 18:12:59 +05:30
|
|
|
delegate :hash, to: :object
|
|
|
|
|
|
|
|
def initialize(object, lookahead = nil, object_name: nil)
|
|
|
|
@object = object
|
|
|
|
@lookahead = lookahead
|
|
|
|
@object_name = object_name
|
|
|
|
end
|
|
|
|
|
|
|
|
def requires?(path)
|
|
|
|
return false unless @lookahead
|
|
|
|
return false unless path.present?
|
|
|
|
|
|
|
|
field = path.pop
|
|
|
|
|
|
|
|
path
|
|
|
|
.reduce(@lookahead) { |q, f| q.selection(f) }
|
|
|
|
.selects?(field)
|
|
|
|
end
|
|
|
|
|
|
|
|
def eql?(other)
|
|
|
|
other.is_a?(self.class) && object == other.object
|
|
|
|
end
|
|
|
|
alias_method :==, :eql?
|
|
|
|
|
|
|
|
def method_missing(method_name, *args, **kwargs)
|
|
|
|
return @object if method_name.to_sym == @object_name
|
|
|
|
return @object.public_send(method_name) if args.empty? && kwargs.empty? # rubocop: disable GitlabSecurity/PublicSend
|
|
|
|
|
|
|
|
super
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|