Class | XSD::XSDDuration |
In: |
lib/xsd/datatypes.rb
|
Parent: | XSDAnySimpleType |
Type | = | QName.new(Namespace, DurationLiteral) |
day | [RW] | |
hour | [RW] | |
min | [RW] | |
month | [RW] | |
sec | [RW] | |
sign | [RW] | |
year | [RW] |
# File lib/xsd/datatypes.rb, line 433 433: def initialize(value = nil) 434: init(Type, value) 435: end
# File lib/xsd/datatypes.rb, line 458 458: def _set(data) 459: if data.nil? 460: @sign = @year = @month = @day = @hour = @min = @sec = @data = nil 461: return 462: end 463: @sign, @year, @month, @day, @hour, @min, @sec = data 464: @data = _to_s 465: @data.freeze 466: end
# File lib/xsd/datatypes.rb, line 468 468: def _to_s 469: str = '' 470: str << @sign if @sign 471: str << 'P' 472: l = '' 473: l << "#{ @year }Y" if @year.nonzero? 474: l << "#{ @month }M" if @month.nonzero? 475: l << "#{ @day }D" if @day.nonzero? 476: r = '' 477: r << "#{ @hour }H" if @hour.nonzero? 478: r << "#{ @min }M" if @min.nonzero? 479: r << "#{ @sec }S" if @sec.nonzero? 480: str << l 481: if l.empty? 482: str << "0D" 483: end 484: unless r.empty? 485: str << "T" << r 486: end 487: str 488: end
# File lib/xsd/datatypes.rb, line 439 439: def screen_data(value) 440: /^([+\-]?)P(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)D)?(T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$/ =~ value.to_s.strip 441: unless Regexp.last_match 442: raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.") 443: end 444: if ($5 and ((!$2 and !$3 and !$4) or (!$6 and !$7 and !$8))) 445: # Should we allow 'PT5S' here? 446: raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.") 447: end 448: sign = $1 449: year = $2.to_i 450: month = $3.to_i 451: day = $4.to_i 452: hour = $6.to_i 453: min = $7.to_i 454: sec = $8 ? XSDDecimal.new($8) : 0 455: [sign, year, month, day, hour, min, sec] 456: end