[前][次][番号順一覧][スレッド一覧]

ruby-changes:22018

From: tenderlove <ko1@a...>
Date: Sun, 18 Dec 2011 12:05:12 +0900 (JST)
Subject: [ruby-changes:22018] tenderlove:r34067 (trunk): * ext/psych/lib/psych/scalar_scanner.rb: Strings that look like dates

tenderlove	2011-12-18 12:05:02 +0900 (Sun, 18 Dec 2011)

  New Revision: 34067

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=34067

  Log:
    * ext/psych/lib/psych/scalar_scanner.rb: Strings that look like dates
      should be treated as strings and not dates.
    
    * test/psych/test_scalar_scanner.rb: corresponding tests.

  Modified files:
    trunk/ChangeLog
    trunk/ext/psych/lib/psych/scalar_scanner.rb
    trunk/test/psych/test_scalar_scanner.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 34066)
+++ ChangeLog	(revision 34067)
@@ -1,3 +1,10 @@
+Sun Dec 18 12:03:13 2011  Aaron Patterson <aaron@t...>
+
+	* ext/psych/lib/psych/scalar_scanner.rb: Strings that look like dates
+	  should be treated as strings and not dates.
+
+	* test/psych/test_scalar_scanner.rb: corresponding tests.
+
 Sun Dec 18 09:43:21 2011  CHIKANAGA Tomoyuki  <nagachika00@g...>
 
 	* test/thread/test_queue.rb (test_thr_kill): extend timeout.
Index: ext/psych/lib/psych/scalar_scanner.rb
===================================================================
--- ext/psych/lib/psych/scalar_scanner.rb	(revision 34066)
+++ ext/psych/lib/psych/scalar_scanner.rb	(revision 34067)
@@ -46,9 +46,13 @@
         end
       when TIME
         parse_time string
-      when /^\d{4}-\d{1,2}-\d{1,2}$/
+      when /^\d{4}-(?:1[012]|0\d|\d)-(?:[12]\d|3[01]|0\d|\d)$/
         require 'date'
-        Date.strptime(string, '%Y-%m-%d')
+        begin
+          Date.strptime(string, '%Y-%m-%d')
+        rescue ArgumentError
+          string
+        end
       when /^\.inf$/i
         1 / 0.0
       when /^-\.inf$/i
Index: test/psych/test_scalar_scanner.rb
===================================================================
--- test/psych/test_scalar_scanner.rb	(revision 34066)
+++ test/psych/test_scalar_scanner.rb	(revision 34067)
@@ -1,4 +1,5 @@
 require 'psych/helper'
+require 'date'
 
 module Psych
   class TestScalarScanner < TestCase
@@ -20,6 +21,27 @@
       end
     end
 
+    def test_scan_bad_dates
+      x = '2000-15-01'
+      assert_equal x, @ss.tokenize(x)
+
+      x = '2000-10-51'
+      assert_equal x, @ss.tokenize(x)
+
+      x = '2000-10-32'
+      assert_equal x, @ss.tokenize(x)
+    end
+
+    def test_scan_good_edge_date
+      x = '2000-1-31'
+      assert_equal Date.strptime(x, '%Y-%m-%d'), @ss.tokenize(x)
+    end
+
+    def test_scan_bad_edge_date
+      x = '2000-11-31'
+      assert_equal x, @ss.tokenize(x)
+    end
+
     def test_scan_date
       date = '1980-12-16'
       token = @ss.tokenize date

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]