class GraphQL::ScalarType
end
coerce_result ->(value) { value.to_f }
coerce_input ->(value) { Time.at(Float(value)) }
description “Time since epoch in seconds”
name “Time”
TimeType = GraphQL::ScalarType.define do
@example defining a type for Time
- ‘coerce_result` is used to turn Ruby values back into serializable values for query responses.
- `coerce_input` is used to prepare incoming values for GraphQL execution. (Incoming values come from variables or literal values in the query string.)
You can define custom scalars for your GraphQL server. It requires some special functions:
## Custom Scalars
(`types` is an instance of `GraphQL::Definition::TypeDefiner`; `.String`, `.Float`, etc are methods which return built-in scalars.)
|`GraphQL::BOOLEAN_TYPE` | `types.Boolean`|
|`GraphQL::ID_TYPE` | `types.ID`|
|`GraphQL::FLOAT_TYPE` | `types.Float`|
|`GraphQL::INT_TYPE` | `types.Int`|
|`GraphQL::STRING_TYPE` | `types.String`|
|——-|——–|
|Constant | `.define` helper|
`GraphQL` comes with standard built-in scalars:
## Built-in Scalars
Scalars are plain values. They are leaf nodes in a GraphQL query tree.
# GraphQL::ScalarType
def coerce=(proc)
def coerce=(proc) self.coerce_input = proc self.coerce_result = proc end
def coerce_input=(proc)
def coerce_input=(proc) if !proc.nil? @coerce_input_proc = proc end end
def coerce_non_null_input(value)
def coerce_non_null_input(value) ensure_defined @coerce_input_proc.call(value) end
def coerce_result(value)
def coerce_result(value) ensure_defined @coerce_result_proc.call(value) end
def coerce_result=(proc)
def coerce_result=(proc) if !proc.nil? @coerce_result_proc = proc end end
def kind
def kind GraphQL::TypeKinds::SCALAR end
def validate_non_null_input(value)
def validate_non_null_input(value) result = Query::InputValidationResult.new if coerce_non_null_input(value).nil? result.add_problem("Could not coerce value #{JSON.dump(value)} to #{name}") end result end