From cfbe158faea79c6c61f04e99d1309e26bf9f1e54 Mon Sep 17 00:00:00 2001 From: kou Date: Sun, 21 Mar 2004 09:54:07 +0000 Subject: * lib/rss/{rss,dublincore,syndication}.rb: handled W3CDTF correctly. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5990 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ lib/rss/dublincore.rb | 2 +- lib/rss/rss.rb | 38 ++++++++++++++++++++++++++++++++++++-- lib/rss/syndication.rb | 2 +- 4 files changed, 42 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7dcab8f684..f244475800 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Sun Mar 21 18:48:20 2004 Kouhei Sutou + + * lib/rss/{rss,dublincore,syndication}.rb: handled W3CDTF correctly. + Sun Mar 21 18:15:29 2004 Kouhei Sutou * test/rss/test_xml-stylesheet.rb: added tests for xml-stylesheet. diff --git a/lib/rss/dublincore.rb b/lib/rss/dublincore.rb index 4b5daf5076..dcf8e46c65 100644 --- a/lib/rss/dublincore.rb +++ b/lib/rss/dublincore.rb @@ -22,7 +22,7 @@ module RSS end %w(date).each do |x| - install_date_element("\#{DC_PREFIX}_\#{x}", 'iso8601', x) + install_date_element("\#{DC_PREFIX}_\#{x}", 'w3cdtf', x) end EOC end diff --git a/lib/rss/rss.rb b/lib/rss/rss.rb index 7ac1f42628..e53934f725 100644 --- a/lib/rss/rss.rb +++ b/lib/rss/rss.rb @@ -1,5 +1,35 @@ require "time" +class Time + class << Time + unless respond_to?(:w3cdtf) + def w3cdtf(date) + if /\A\s* + (-?\d+)-(\d\d)-(\d\d) + (?:T + (\d\d):(\d\d)(?::(\d\d))? + (\.\d+)? + (Z|[+-]\d\d:\d\d)?)? + \s*\z/ix =~ date and (($5 and $8) or (!$5 and !$8)) + datetime = [$1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i] + datetime << $7.to_f * 1000000 if $7 + if $8 + Time.utc(*datetime) - zone_offset($8) + else + Time.local(*datetime) + end + else + raise ArgumentError.new("invalid date: #{date.inspect}") + end + end + end + end + + unless instance_methods.include?("w3cdtf") + alias w3cdtf iso8601 + end +end + require "English" require "rss/utils" require "rss/converter" @@ -168,10 +198,14 @@ EOC rescue ArgumentError raise NotAvailableValueError.new('#{disp_name}', new_value) end - elsif /\\A\\s*\\z/ !~ new_value.to_s - @#{name} = Time.parse(new_value) else @#{name} = nil + if /\\A\\s*\\z/ !~ new_value.to_s + begin + @#{name} = Time.parse(new_value) + rescue ArgumentError + end + end end end diff --git a/lib/rss/syndication.rb b/lib/rss/syndication.rb index 8f9ffb411f..8c10688b57 100644 --- a/lib/rss/syndication.rb +++ b/lib/rss/syndication.rb @@ -20,7 +20,7 @@ module RSS end %w(updateBase).each do |x| - install_date_element("\#{SY_PREFIX}_\#{x}", 'iso8601', x) + install_date_element("\#{SY_PREFIX}_\#{x}", 'w3cdtf', x) end alias_method(:_sy_updatePeriod=, :sy_updatePeriod=) -- cgit v1.2.3