Sha256: 6bc73137e8a7e0205673f1a07eabded8ab4433e3008b40cb4fc0654c935383c2
Contents?: true
Size: 1.62 KB
Versions: 5
Compression:
Stored size: 1.62 KB
Contents
module RDF; class Literal ## # A date/time literal. # # @see http://www.w3.org/TR/xmlschema-2/#dateTime # @since 0.2.1 class DateTime < Literal DATATYPE = XSD.dateTime GRAMMAR = %r(\A-?\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(([\+\-]\d{2}:\d{2})|UTC|Z)?\Z).freeze ## # @param [DateTime] value # @option options [String] :lexical (nil) def initialize(value, options = {}) @datatype = RDF::URI(options[:datatype] || DATATYPE) @string = options[:lexical] if options.has_key?(:lexical) @string = value if !defined?(@string) && value.is_a?(String) @object = case when value.is_a?(::DateTime) then value when value.respond_to?(:to_datetime) then value.to_datetime # Ruby 1.9+ else ::DateTime.parse(value.to_s) end end ## # Converts this literal into its canonical lexical representation. # # @return [RDF::Literal] `self` # @see http://www.w3.org/TR/xmlschema-2/#dateTime def canonicalize! @string = @object.new_offset(0).strftime('%Y-%m-%dT%H:%M:%S%Z').sub(/\+00:00|UTC/, 'Z') self end ## # Returns `true` if the value adheres to the defined grammar of the # datatype. # # Special case for date and dateTime, for which '0000' is not a valid year # # @return [Boolean] # @since 0.2.1 def valid? !!(value =~ GRAMMAR) && value !~ %r(\A0000) end ## # Returns the value as a string. # # @return [String] def to_s @string || @object.strftime('%Y-%m-%dT%H:%M:%S%Z').sub(/\+00:00|UTC/, 'Z') end end # DateTime end; end # RDF::Literal
Version data entries
5 entries across 5 versions & 1 rubygems