Class: GraphQL::Query::Variables
- Inherits:
-
Object
- Object
- GraphQL::Query::Variables
- Extended by:
- Forwardable
- Defined in:
- lib/graphql/query/variables.rb
Overview
Read-only access to query variables, applying default values if needed.
Instance Attribute Summary collapse
-
#context ⇒ Object
readonly
Returns the value of attribute context.
-
#errors ⇒ Array<GraphQL::Query::VariableValidationError>
readonly
Any errors encountered when parsing the provided variables and literal values.
Instance Method Summary collapse
-
#initialize(ctx, ast_variables, provided_variables) ⇒ Variables
constructor
A new instance of Variables.
Constructor Details
#initialize(ctx, ast_variables, provided_variables) ⇒ Variables
Returns a new instance of Variables
13 14 15 16 17 18 19 20 21 22 23 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 54 55 56 57 58 59 60 |
# File 'lib/graphql/query/variables.rb', line 13 def initialize(ctx, ast_variables, provided_variables) schema = ctx.schema @context = ctx @provided_variables = GraphQL::Argument.deep_stringify(provided_variables) @errors = [] @storage = ast_variables.each_with_object({}) do |ast_variable, memo| # Find the right value for this variable: # - First, use the value provided at runtime # - Then, fall back to the default value from the query string # If it's still nil, raise an error if it's required. variable_type = schema.type_from_ast(ast_variable.type) if variable_type.nil? # Pass -- it will get handled by a validator else variable_name = ast_variable.name default_value = ast_variable.default_value provided_value = @provided_variables[variable_name] value_was_provided = @provided_variables.key?(variable_name) begin validation_result = variable_type.validate_input(provided_value, ctx) if validation_result.valid? if value_was_provided # Add the variable if a value was provided memo[variable_name] = schema.error_handler.with_error_handling(context) do variable_type.coerce_input(provided_value, ctx) end elsif default_value != nil # Add the variable if it wasn't provided but it has a default value (including `null`) memo[variable_name] = GraphQL::Query::LiteralInput.coerce(variable_type, default_value, self) end end rescue GraphQL::CoercionError, GraphQL::ExecutionError => ex # TODO: This should really include the path to the problematic node in the variable value # like InputValidationResults generated by validate_non_null_input but unfortunately we don't # have this information available in the coerce_input call chain. Note this path is the path # that appears under errors.extensions.problems.path and NOT the result path under errors.path. validation_result = GraphQL::Query::InputValidationResult.new validation_result.add_problem(ex.) end if !validation_result.valid? @errors << GraphQL::Query::VariableValidationError.new(ast_variable, variable_type, provided_value, validation_result) end end end end |
Instance Attribute Details
#context ⇒ Object (readonly)
Returns the value of attribute context
11 12 13 |
# File 'lib/graphql/query/variables.rb', line 11 def context @context end |
#errors ⇒ Array<GraphQL::Query::VariableValidationError> (readonly)
Returns Any errors encountered when parsing the provided variables and literal values
9 10 11 |
# File 'lib/graphql/query/variables.rb', line 9 def errors @errors end |