30 lines
630 B
Ruby
30 lines
630 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Types
|
||
|
class DurationType < BaseScalar
|
||
|
graphql_name 'Duration'
|
||
|
description <<~DESC
|
||
|
Duration between two instants, represented as a fractional number of seconds.
|
||
|
|
||
|
For example: 12.3334
|
||
|
DESC
|
||
|
|
||
|
def self.coerce_input(value, ctx)
|
||
|
case value
|
||
|
when Float
|
||
|
value
|
||
|
when Integer
|
||
|
value.to_f
|
||
|
when NilClass
|
||
|
raise GraphQL::CoercionError, 'Cannot be nil'
|
||
|
else
|
||
|
raise GraphQL::CoercionError, "Expected number: got #{value.class}"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def self.coerce_result(value, ctx)
|
||
|
value.to_f
|
||
|
end
|
||
|
end
|
||
|
end
|