mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/psych/lib/psych/scalar_scanner.rb: fix support for negative
years. * ext/psych/lib/psych/visitors/yaml_tree.rb: ditto * test/psych/test_date_time.rb: test for change. Fixes: https://github.com/tenderlove/psych/issues/168 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43864 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
725d6f4970
commit
079ff69ca0
4 changed files with 24 additions and 3 deletions
|
@ -1,3 +1,11 @@
|
|||
Wed Nov 27 06:40:18 2013 Aaron Patterson <aaron@tenderlovemaking.com>
|
||||
|
||||
* ext/psych/lib/psych/scalar_scanner.rb: fix support for negative
|
||||
years.
|
||||
* ext/psych/lib/psych/visitors/yaml_tree.rb: ditto
|
||||
* test/psych/test_date_time.rb: test for change.
|
||||
Fixes: https://github.com/tenderlove/psych/issues/168
|
||||
|
||||
Wed Nov 27 04:46:55 2013 Aaron Patterson <aaron@tenderlovemaking.com>
|
||||
|
||||
* ext/psych/lib/psych/scalar_scanner.rb: fix regexp for matching TIME
|
||||
|
|
|
@ -5,7 +5,7 @@ module Psych
|
|||
# Scan scalars for built in types
|
||||
class ScalarScanner
|
||||
# Taken from http://yaml.org/type/timestamp.html
|
||||
TIME = /^\d{4}-\d{1,2}-\d{1,2}(?:[Tt]|\s+)\d{1,2}:\d\d:\d\d(?:\.\d*)?(?:\s*(?:Z|[-+]\d{1,2}:?(?:\d\d)?))?$/
|
||||
TIME = /^-?\d{4}-\d{1,2}-\d{1,2}(?:[Tt]|\s+)\d{1,2}:\d\d:\d\d(?:\.\d*)?(?:\s*(?:Z|[-+]\d{1,2}:?(?:\d\d)?))?$/
|
||||
|
||||
# Taken from http://yaml.org/type/float.html
|
||||
FLOAT = /^(?:[-+]?([0-9][0-9_,]*)?\.[0-9]*([eE][-+][0-9]+)?(?# base 10)
|
||||
|
@ -123,7 +123,7 @@ module Psych
|
|||
klass = class_loader.load 'Time'
|
||||
|
||||
date, time = *(string.split(/[ tT]/, 2))
|
||||
(yy, m, dd) = date.split('-').map { |x| x.to_i }
|
||||
(yy, m, dd) = date.match(/^(-?\d{4})-(\d{1,2})-(\d{1,2})/).captures.map { |x| x.to_i }
|
||||
md = time.match(/(\d+:\d+:\d+)(?:\.(\d*))?\s*(Z|[-+]\d+(:\d\d)?)?/)
|
||||
|
||||
(hh, mm, ss) = md[1].split(':').map { |x| x.to_i }
|
||||
|
|
|
@ -209,7 +209,11 @@ module Psych
|
|||
end
|
||||
|
||||
def visit_DateTime o
|
||||
formatted = format_time o.to_time
|
||||
formatted = if o.offset.zero?
|
||||
o.strftime("%Y-%m-%d %H:%M:%S.%9N Z".freeze)
|
||||
else
|
||||
o.strftime("%Y-%m-%d %H:%M:%S.%9N %:z".freeze)
|
||||
end
|
||||
tag = '!ruby/object:DateTime'
|
||||
register o, @emitter.scalar(formatted, nil, tag, false, false, Nodes::Scalar::ANY)
|
||||
end
|
||||
|
|
|
@ -3,6 +3,15 @@ require 'date'
|
|||
|
||||
module Psych
|
||||
class TestDateTime < TestCase
|
||||
def test_negative_year
|
||||
time = Time.utc -1, 12, 16
|
||||
assert_cycle time
|
||||
end
|
||||
|
||||
def test_new_datetime
|
||||
assert_cycle DateTime.new
|
||||
end
|
||||
|
||||
def test_invalid_date
|
||||
assert_cycle "2013-10-31T10:40:07-000000000000033"
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue