Class: GraphQL::Types::ISO8601DateTime

Inherits:
Schema::Scalar show all
Defined in:
lib/graphql/types/iso_8601_date_time.rb

Overview

This scalar takes DateTimes and transmits them as strings, using ISO 8601 format.

Use it for fields or arguments as follows:

field :created_at, GraphQL::Types::ISO8601DateTime, null: false

argument :deliver_at, GraphQL::Types::ISO8601DateTime, null: false

Alternatively, use this built-in scalar as inspiration for your own DateTime type.

Constant Summary collapse

DEFAULT_TIME_PRECISION =

It’s not compatible with Rails’ default, i.e. ActiveSupport::JSON::Encoder.time_precision (3 by default)

0

Constants included from Schema::Member::GraphQLTypeNames

Schema::Member::GraphQLTypeNames::Boolean, Schema::Member::GraphQLTypeNames::ID, Schema::Member::GraphQLTypeNames::Int

Class Method Summary collapse

Methods inherited from Schema::Scalar

default_scalar, kind, to_graphql

Methods included from Schema::Member::HasPath

#path

Methods included from Schema::Member::RelayShortcuts

#connection_type, #connection_type_class, #edge_type, #edge_type_class

Methods included from Schema::Member::Scoped

#scope_items

Methods included from Schema::Member::TypeSystemHelpers

#kind, #list?, #non_null?, #to_list_type, #to_non_null_type, #to_type_signature

Methods included from Schema::Member::BaseDSLMethods

#accessible?, #authorized?, #default_graphql_name, #description, #graphql_name, #introspection, #introspection?, #mutation, #name, #overridden_graphql_name, #to_graphql, #visible?

Methods included from Relay::TypeExtensions

#connection_type, #define_connection, #define_edge, #edge_type

Methods included from Schema::Member::CachedGraphQLDefinition

#graphql_definition, #initialize_copy

Class Method Details

.coerce_input(str_value, _ctx) ⇒ DateTime

Parameters:

Returns:

  • (DateTime)


42
43
44
45
46
47
# File 'lib/graphql/types/iso_8601_date_time.rb', line 42

def self.coerce_input(str_value, _ctx)
  DateTime.iso8601(str_value)
rescue ArgumentError
  # Invalid input
  nil
end

.coerce_result(value, _ctx) ⇒ String

Parameters:

  • value (DateTime)

Returns:



34
35
36
37
38
# File 'lib/graphql/types/iso_8601_date_time.rb', line 34

def self.coerce_result(value, _ctx)
  value.iso8601(time_precision)
rescue ArgumentError
  raise GraphQL::Error, "An incompatible object (#{value.class}) was given to #{self}. Make sure that only DateTimes are used with this type."
end

.time_precisionInteger

Returns:

  • (Integer)


23
24
25
# File 'lib/graphql/types/iso_8601_date_time.rb', line 23

def self.time_precision
  @time_precision || DEFAULT_TIME_PRECISION
end

.time_precision=(value) ⇒ Object

Parameters:

  • value (Integer)


28
29
30
# File 'lib/graphql/types/iso_8601_date_time.rb', line 28

def self.time_precision=(value)
  @time_precision = value
end