Class: GraphQL::Types::ISO8601DateTime
- Inherits:
 - 
      Schema::Scalar
      
        
- Object
 - Schema::Member
 - Schema::Scalar
 - GraphQL::Types::ISO8601DateTime
 
 
- Defined in:
 - lib/graphql/types/iso_8601_date_time.rb
 
Overview
This scalar takes Times 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::HasDirectives
Schema::Member::HasDirectives::NO_DIRECTIVES
Constants included from Schema::Member::GraphQLTypeNames
Schema::Member::GraphQLTypeNames::Boolean, Schema::Member::GraphQLTypeNames::ID, Schema::Member::GraphQLTypeNames::Int
Class Method Summary collapse
- 
  
    
      .coerce_input(str_value, _ctx)  ⇒ Time 
    
    
  
  
  
  
  
  
  
  
  
    
 - 
  
    
      .coerce_result(value, _ctx)  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    
 - 
  
    
      .time_precision  ⇒ Integer 
    
    
  
  
  
  
  
  
  
  
  
    
 - 
  
    
      .time_precision=(value)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
 
Methods inherited from Schema::Scalar
default_scalar, default_scalar?, kind, specified_by_url, validate_non_null_input
Methods included from Schema::Member::ValidatesInput
#coerce_isolated_input, #coerce_isolated_result, #valid_input?, #valid_isolated_input?, #validate_input
Methods included from Schema::Member::BaseDSLMethods
#accessible?, #authorized?, #default_graphql_name, #description, #graphql_name, #introspection, #introspection?, #mutation, #name, #overridden_graphql_name, #visible?
Methods included from Schema::Member::BaseDSLMethods::ConfigurationExtension
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::Scoped
Methods included from Schema::Member::RelayShortcuts
#connection_type, #connection_type_class, #edge_type, #edge_type_class
Methods included from Schema::Member::HasPath
Methods included from Schema::Member::HasAstNode
Methods included from Schema::Member::HasDirectives
#directive, #directives, #remove_directive
Class Method Details
.coerce_input(str_value, _ctx) ⇒ Time
      53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69  | 
    
      # File 'lib/graphql/types/iso_8601_date_time.rb', line 53 def self.coerce_input(str_value, _ctx) Time.iso8601(str_value) rescue ArgumentError, TypeError begin dt = Date.iso8601(str_value).to_time # For compatibility, continue accepting dates given without times # But without this, it would zero out given any time part of `str_value` (hours and/or minutes) if dt.iso8601.start_with?(str_value) dt else nil end rescue ArgumentError, TypeError # Invalid input nil end end  | 
  
.coerce_result(value, _ctx) ⇒ String
      37 38 39 40 41 42 43 44 45 46 47 48 49  | 
    
      # File 'lib/graphql/types/iso_8601_date_time.rb', line 37 def self.coerce_result(value, _ctx) case value when Date return value.to_time.iso8601(time_precision) when ::String return Time.parse(value).iso8601(time_precision) else # Time, DateTime or compatible is given: return value.iso8601(time_precision) end rescue StandardError => error raise GraphQL::Error, "An incompatible object (#{value.class}) was given to #{self}. Make sure that only Times, Dates, DateTimes, and well-formatted Strings are used with this type. (#{error.})" end  | 
  
.time_precision ⇒ Integer
      26 27 28  | 
    
      # File 'lib/graphql/types/iso_8601_date_time.rb', line 26 def self.time_precision @time_precision || DEFAULT_TIME_PRECISION end  | 
  
.time_precision=(value) ⇒ Object
      31 32 33  | 
    
      # File 'lib/graphql/types/iso_8601_date_time.rb', line 31 def self.time_precision=(value) @time_precision = value end  |