class Quack::Types::Time

Constants

ISO_8601
UTC
YMD_FORMAT

Public Class Methods

built_in_types() click to toggle source
# File lib/quack/types/time.rb, line 26
def built_in_types
  [::Time]
end
iso_8601?(value) click to toggle source
# File lib/quack/types/time.rb, line 30
def iso_8601?(value)
  !!(value.to_s.strip =~ ISO_8601)
end
matches?(value) click to toggle source
# File lib/quack/types/time.rb, line 38
def matches?(value)
  already_coerced?(value) || iso_8601?(value) || ymd?(value)
end
ymd?(value) click to toggle source
# File lib/quack/types/time.rb, line 34
def ymd?(value)
  !!(value.to_s.strip =~ YMD_FORMAT)
end

Public Instance Methods

iso_8601?() click to toggle source
# File lib/quack/types/time.rb, line 43
def iso_8601?
  self.class.iso_8601?(value)
end
parse_iso8601() click to toggle source
# File lib/quack/types/time.rb, line 55
def parse_iso8601
  parts = value.to_s.scan(ISO_8601).flatten
  offset = parse_offset(parts.pop)
  parts = parts.map(&:to_i) << offset
  ::Time.new(*parts)
rescue => ex
  raise ParseError.new(ex.message)
end
parse_offset(offset) click to toggle source
# File lib/quack/types/time.rb, line 51
def parse_offset(offset)
  offset == "Z" ? UTC : offset
end
parse_ymd() click to toggle source
# File lib/quack/types/time.rb, line 64
def parse_ymd
  parts = value.to_s.scan(YMD_FORMAT).flatten
  parts = parts.map(&:to_i) + [0, 0, 0, UTC]
  ::Time.new(*parts)
rescue => ex
  raise ParseError.new(ex.message)
end
to_coerced() click to toggle source
# File lib/quack/types/time.rb, line 72
def to_coerced
  return value if already_coerced?
  return parse_iso8601 if iso_8601?
  parse_ymd
end
to_s() click to toggle source
# File lib/quack/types/time.rb, line 78
def to_s
  to_coerced.iso8601
end
ymd?() click to toggle source
# File lib/quack/types/time.rb, line 47
def ymd?
  self.class.ymd?(value)
end