Files
redux-scraper/app/lib/active_model_utc_time_value.rb
2025-06-27 21:37:02 +00:00

38 lines
743 B
Ruby

# typed: strict
class ActiveModelUtcTimeValue < ActiveModel::Type::Value
extend T::Sig
sig { override.returns(Symbol) }
def type
:time_no_zone
end
sig do
override
.params(
value:
T.nilable(T.any(String, Time, DateTime, ActiveSupport::TimeWithZone)),
)
.returns(T.nilable(Time))
end
def cast(value)
return nil if value.nil?
case value
when String
Time.parse(value).utc
when Time
value
when DateTime
value.to_time.utc
when ActiveSupport::TimeWithZone
value.utc
end
end
sig { override.params(value: T.nilable(Time)).returns(T.nilable(String)) }
def serialize(value)
return nil if value.nil?
value.utc.iso8601
end
end