class GraphQL::Types::ISO8601DateTime
This scalar takes `Time`s 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.
Constants
- DEFAULT_TIME_PRECISION
It's not compatible with Rails' default, i.e. ActiveSupport::JSON::Encoder.time_precision (3 by default)
Public Class Methods
coerce_input(str_value, _ctx)
click to toggle source
@param str_value [String] @return [Time]
# 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)
click to toggle source
@param value [Time,Date,DateTime,String] @return [String]
# 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.message})" end
time_precision()
click to toggle source
@return [Integer]
# File lib/graphql/types/iso_8601_date_time.rb, line 26 def self.time_precision @time_precision || DEFAULT_TIME_PRECISION end
time_precision=(value)
click to toggle source
@param [Integer] value
# File lib/graphql/types/iso_8601_date_time.rb, line 31 def self.time_precision=(value) @time_precision = value end