Method: GraphQL::Execution::Interpreter::Arguments#initialize

Defined in:
lib/graphql/execution/interpreter/arguments.rb

#initialize(keyword_arguments: nil, argument_values:) ⇒ Arguments

Returns a new instance of Arguments.

Parameters:

  • argument_values (nil, Hash{Symbol => ArgumentValue})
  • keyword_arguments (nil, Hash{Symbol => Object}) (defaults to: nil)


24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/graphql/execution/interpreter/arguments.rb', line 24

def initialize(keyword_arguments: nil, argument_values:)
  @empty = argument_values.nil? || argument_values.empty?
  # This is only present when `extras` have been merged in:
  if keyword_arguments
    # This is a little crazy. We expect the `:argument_details` extra to _include extras_,
    # but the object isn't created until _after_ extras are put together.
    # So, we have to use a special flag here to say, "at the last minute, add yourself to the keyword args."
    #
    # Otherwise:
    # - We can't access the final Arguments instance _while_ we're preparing extras
    # - After we _can_ access it, it's frozen, so we can't add anything.
    #
    # So, this flag gives us a chance to sneak it in before freezing, _and_ while we have access
    # to the new Arguments instance itself.
    if keyword_arguments[:argument_details] == :__arguments_add_self
      keyword_arguments[:argument_details] = self
    end
    @keyword_arguments = keyword_arguments.freeze
  elsif !@empty
    @keyword_arguments = {}
    argument_values.each do |name, arg_val|
      @keyword_arguments[name] = arg_val.value
    end
    @keyword_arguments.freeze
  else
    @keyword_arguments = NO_ARGS
  end
  @argument_values = argument_values ? argument_values.freeze : NO_ARGS
  freeze
end