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