Class: GraphQL::Query::LiteralInput
- Inherits:
-
Object
- Object
- GraphQL::Query::LiteralInput
- Defined in:
- lib/graphql/query/literal_input.rb
Overview
Turn query string values into something useful for query execution
Class Method Summary collapse
- .coerce(type, ast_node, variables) ⇒ Object
- .from_arguments(ast_arguments, argument_defns, variables) ⇒ Object
Class Method Details
.coerce(type, ast_node, variables) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/graphql/query/literal_input.rb', line 6 def self.coerce(type, ast_node, variables) case ast_node when nil nil when Language::Nodes::VariableIdentifier variables[ast_node.name] else case type when GraphQL::ScalarType type.coerce_input(ast_node) when GraphQL::EnumType type.coerce_input(ast_node.name) when GraphQL::NonNullType LiteralInput.coerce(type.of_type, ast_node, variables) when GraphQL::ListType if ast_node.is_a?(Array) ast_node.map { |element_ast| LiteralInput.coerce(type.of_type, element_ast, variables) } else [LiteralInput.coerce(type.of_type, ast_node, variables)] end when GraphQL::InputObjectType from_arguments(ast_node.arguments, type.arguments, variables) end end end |
.from_arguments(ast_arguments, argument_defns, variables) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/graphql/query/literal_input.rb', line 32 def self.from_arguments(ast_arguments, argument_defns, variables) values_hash = {} indexed_arguments = ast_arguments.each_with_object({}) { |a, memo| memo[a.name] = a } argument_defns.each do |arg_name, arg_defn| ast_arg = indexed_arguments[arg_name] # First, check the argument in the AST. # If the value is a variable, # only add a value if the variable is actually present. # Otherwise, coerce the value in the AST and add it. if ast_arg if ast_arg.value.is_a?(GraphQL::Language::Nodes::VariableIdentifier) if variables.key?(ast_arg.value.name) values_hash[ast_arg.name] = coerce(arg_defn.type, ast_arg.value, variables) end else values_hash[ast_arg.name] = coerce(arg_defn.type, ast_arg.value, variables) end end # Then, the definition for a default value. # If the definition has a default value and # a value wasn't provided from the AST, # then add the default value. if arg_defn.default_value? && !values_hash.key?(arg_name) values_hash[arg_name] = arg_defn.default_value end end GraphQL::Query::Arguments.new(values_hash, argument_definitions: argument_defns) end |