summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-12-12 17:47:29 +0000
committertenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-12-12 17:47:29 +0000
commita7c2faebb0b4d564653c1d0cdc11f6da881c2bb4 (patch)
tree7b077428bb11ecd037917bc5b39a093644ff07a4
parent83d1eebb71cbce708cce9c23b3ccb69cf8bb4470 (diff)
merge revision(s) 33160,33381,33382,33383,33384,33385:
* ext/psych/lib/psych.rb: update psych version. * ext/psych/psych.gemspec: generate new gemspec for new version. * ext/psych/lib/psych.rb: calling `yaml` rather than `to_yaml`. * ext/psych/lib/psych/nodes/node.rb: Rename `to_yaml` to just `yaml` in order to avoid YAML::ENGINE switching from replacing this method. * test/psych/helper.rb: fix tests for method name change. * test/psych/test_document.rb: ditto * test/psych/visitors/test_emitter.rb: ditto * ext/psych/lib/psych/scalar_scanner.rb: Match values against the floating point spec defined in YAML to avoid erronious parses. * test/psych/test_numeric.rb: corresponding test. * ext/psych/lib/psych/visitors/to_ruby.rb: ToRuby visitor can be constructed with a ScalarScanner. * ext/psych/lib/psych/visitors/yaml_tree.rb: ScalarScanner can be passed to the YAMLTree visitor. * ext/psych/lib/psych/visitors/to_ruby.rb: Define Regexp::NOENCODING for 1.9.2 backwards compatibility. * ext/psych/lib/psych/visitors/yaml_tree.rb: Fix Date string generation for 1.9.2 backwards compatibility. * ext/psych/lib/psych/visitors/yaml_tree.rb: emit strings tagged as ascii-8bit as binary in YAML. * test/psych/test_string.rb: corresponding test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@34017 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog40
-rw-r--r--ext/psych/lib/psych.rb8
-rw-r--r--ext/psych/lib/psych/nodes/node.rb3
-rw-r--r--ext/psych/lib/psych/scalar_scanner.rb17
-rw-r--r--ext/psych/lib/psych/visitors/to_ruby.rb10
-rw-r--r--ext/psych/lib/psych/visitors/yaml_tree.rb39
-rw-r--r--test/dtrace/test_object_create.rb13
-rw-r--r--test/psych/helper.rb2
-rw-r--r--test/psych/test_document.rb8
-rw-r--r--test/psych/test_numeric.rb14
-rw-r--r--test/psych/test_string.rb8
-rw-r--r--test/psych/visitors/test_emitter.rb16
-rw-r--r--version.h2
13 files changed, 148 insertions, 32 deletions
diff --git a/ChangeLog b/ChangeLog
index 992c8a8edb..2d1e44077e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,43 @@
+Tue Oct 4 06:43:47 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych.rb: update psych version.
+ * ext/psych/psych.gemspec: generate new gemspec for new version.
+
+Tue Oct 4 06:29:55 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych.rb: calling `yaml` rather than `to_yaml`.
+ * ext/psych/lib/psych/nodes/node.rb: Rename `to_yaml` to just `yaml`
+ in order to avoid YAML::ENGINE switching from replacing this method.
+ * test/psych/helper.rb: fix tests for method name change.
+ * test/psych/test_document.rb: ditto
+ * test/psych/visitors/test_emitter.rb: ditto
+
+Tue Oct 4 06:20:19 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/scalar_scanner.rb: Match values against the
+ floating point spec defined in YAML to avoid erronious parses.
+ * test/psych/test_numeric.rb: corresponding test.
+
+Tue Oct 4 05:59:24 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/to_ruby.rb: ToRuby visitor can be
+ constructed with a ScalarScanner.
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: ScalarScanner can be
+ passed to the YAMLTree visitor.
+
+Tue Oct 4 05:47:23 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/to_ruby.rb: Define Regexp::NOENCODING
+ for 1.9.2 backwards compatibility.
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: Fix Date string
+ generation for 1.9.2 backwards compatibility.
+
+Fri Sep 2 04:05:25 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: emit strings tagged as
+ ascii-8bit as binary in YAML.
+ * test/psych/test_string.rb: corresponding test.
+
Wed Dec 7 19:04:22 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
* configure.in (rpath): fix typo in the help string. a patch from
diff --git a/ext/psych/lib/psych.rb b/ext/psych/lib/psych.rb
index 9507bbb53b..f9052f92a4 100644
--- a/ext/psych/lib/psych.rb
+++ b/ext/psych/lib/psych.rb
@@ -90,7 +90,7 @@ require 'psych/json'
module Psych
# The version is Psych you're using
- VERSION = '1.2.1'
+ VERSION = '1.2.2'
# The version of libyaml Psych is using
LIBYAML_VERSION = Psych.libyaml_version.join '.'
@@ -187,7 +187,7 @@ module Psych
visitor = Psych::Visitors::YAMLTree.new options
visitor << o
- visitor.tree.to_yaml io, options
+ visitor.tree.yaml io, options
end
###
@@ -201,7 +201,7 @@ module Psych
objects.each do |o|
visitor << o
end
- visitor.tree.to_yaml
+ visitor.tree.yaml
end
###
@@ -209,7 +209,7 @@ module Psych
def self.to_json o
visitor = Psych::Visitors::JSONTree.new
visitor << o
- visitor.tree.to_yaml
+ visitor.tree.yaml
end
###
diff --git a/ext/psych/lib/psych/nodes/node.rb b/ext/psych/lib/psych/nodes/node.rb
index 2a5573a2bd..0cefe44e44 100644
--- a/ext/psych/lib/psych/nodes/node.rb
+++ b/ext/psych/lib/psych/nodes/node.rb
@@ -40,13 +40,14 @@ module Psych
# Convert this node to YAML.
#
# See also Psych::Visitors::Emitter
- def to_yaml io = nil, options = {}
+ def yaml io = nil, options = {}
real_io = io || StringIO.new(''.encode('utf-8'))
Visitors::Emitter.new(real_io, options).accept self
return real_io.string unless io
io
end
+ alias :to_yaml :yaml
end
end
end
diff --git a/ext/psych/lib/psych/scalar_scanner.rb b/ext/psych/lib/psych/scalar_scanner.rb
index 29d66ee4cc..3e8acbb21c 100644
--- a/ext/psych/lib/psych/scalar_scanner.rb
+++ b/ext/psych/lib/psych/scalar_scanner.rb
@@ -7,6 +7,12 @@ module Psych
# 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)?)?/
+ # Taken from http://yaml.org/type/float.html
+ FLOAT = /^(?:[-+]?([0-9][0-9_,]*)?\.[0-9.]*([eE][-+][0-9]+)?(?# base 10)
+ |[-+]?[0-9][0-9_,]*(:[0-5]?[0-9])+\.[0-9_]*(?# base 60)
+ |[-+]?\.(inf|Inf|INF)(?# infinity)
+ |\.(nan|NaN|NAN)(?# not a number))$/x
+
# Create a new scanner
def initialize
@string_cache = {}
@@ -67,9 +73,16 @@ module Psych
i += (n.to_f * 60 ** (e - 2).abs)
end
i
- else
- return Integer(string.gsub(/[,_]/, '')) rescue ArgumentError
+ when FLOAT
return Float(string.gsub(/[,_]/, '')) rescue ArgumentError
+
+ @string_cache[string] = true
+ string
+ else
+ if string.count('.') < 2
+ return Integer(string.gsub(/[,_]/, '')) rescue ArgumentError
+ end
+
@string_cache[string] = true
string
end
diff --git a/ext/psych/lib/psych/visitors/to_ruby.rb b/ext/psych/lib/psych/visitors/to_ruby.rb
index b8eb698754..ca046c5da9 100644
--- a/ext/psych/lib/psych/visitors/to_ruby.rb
+++ b/ext/psych/lib/psych/visitors/to_ruby.rb
@@ -1,14 +1,18 @@
require 'psych/scalar_scanner'
+unless defined?(Regexp::NOENCODING)
+ Regexp::NOENCODING = 32
+end
+
module Psych
module Visitors
###
# This class walks a YAML AST, converting each node to ruby
class ToRuby < Psych::Visitors::Visitor
- def initialize
- super
+ def initialize ss = ScalarScanner.new
+ super()
@st = {}
- @ss = ScalarScanner.new
+ @ss = ss
@domain_types = Psych.domain_types
end
diff --git a/ext/psych/lib/psych/visitors/yaml_tree.rb b/ext/psych/lib/psych/visitors/yaml_tree.rb
index eef6125ff1..5a092850c3 100644
--- a/ext/psych/lib/psych/visitors/yaml_tree.rb
+++ b/ext/psych/lib/psych/visitors/yaml_tree.rb
@@ -12,13 +12,13 @@ module Psych
alias :finished? :finished
alias :started? :started
- def initialize options = {}, emitter = Psych::TreeBuilder.new
+ def initialize options = {}, emitter = TreeBuilder.new, ss = ScalarScanner.new
super()
@started = false
@finished = false
@emitter = emitter
@st = {}
- @ss = ScalarScanner.new
+ @ss = ss
@options = options
@dispatch_cache = Hash.new do |h,klass|
@@ -214,12 +214,19 @@ module Psych
end
end
+ def binary? string
+ string.encoding == Encoding::ASCII_8BIT ||
+ string.index("\x00") ||
+ string.count("\x00-\x7F", "^ -~\t\r\n").fdiv(string.length) > 0.3
+ end
+ private :binary?
+
def visit_String o
plain = false
quote = false
style = Nodes::Scalar::ANY
- if o.index("\x00") || o.count("\x00-\x7F", "^ -~\t\r\n").fdiv(o.length) > 0.3
+ if binary?(o)
str = [o].pack('m').chomp
tag = '!binary' # FIXME: change to below when syck is removed
#tag = 'tag:yaml.org,2002:binary'
@@ -304,11 +311,27 @@ module Psych
end
private
- def format_time time
- if time.utc?
- time.strftime("%Y-%m-%d %H:%M:%S.%9N Z")
- else
- time.strftime("%Y-%m-%d %H:%M:%S.%9N %:z")
+ # '%:z' was no defined until 1.9.3
+ if RUBY_VERSION < '1.9.3'
+ def format_time time
+ formatted = time.strftime("%Y-%m-%d %H:%M:%S.%9N")
+
+ if time.utc?
+ formatted += " Z"
+ else
+ zone = time.strftime('%z')
+ formatted += " #{zone[0,3]}:#{zone[3,5]}"
+ end
+
+ formatted
+ end
+ else
+ def format_time time
+ if time.utc?
+ time.strftime("%Y-%m-%d %H:%M:%S.%9N Z")
+ else
+ time.strftime("%Y-%m-%d %H:%M:%S.%9N %:z")
+ end
end
end
diff --git a/test/dtrace/test_object_create.rb b/test/dtrace/test_object_create.rb
new file mode 100644
index 0000000000..11a5f3de19
--- /dev/null
+++ b/test/dtrace/test_object_create.rb
@@ -0,0 +1,13 @@
+require 'minitest/autorun'
+
+module DTrace
+ class TestObjectCreate < MiniTest::Unit::TestCase
+ def setup
+ skip "must be setuid 0 to run dtrace tests" unless Process.euid == 0
+ end
+
+ def test_zomg
+ flunk "rawr"
+ end
+ end
+end
diff --git a/test/psych/helper.rb b/test/psych/helper.rb
index 61049d6cf2..8108e993c1 100644
--- a/test/psych/helper.rb
+++ b/test/psych/helper.rb
@@ -32,7 +32,7 @@ module Psych
def assert_cycle( obj )
v = Visitors::YAMLTree.new
v << obj
- assert_equal(obj, Psych.load(v.tree.to_yaml))
+ assert_equal(obj, Psych.load(v.tree.yaml))
assert_equal( obj, Psych::load(Psych.dump(obj)))
assert_equal( obj, Psych::load( obj.psych_to_yaml ) )
end
diff --git a/test/psych/test_document.rb b/test/psych/test_document.rb
index 55add5f4dd..05d9bbfb87 100644
--- a/test/psych/test_document.rb
+++ b/test/psych/test_document.rb
@@ -18,12 +18,12 @@ module Psych
end
def test_emit_tag
- assert_match('%TAG ! tag:tenderlovemaking.com,2009:', @stream.to_yaml)
+ assert_match('%TAG ! tag:tenderlovemaking.com,2009:', @stream.yaml)
end
def test_emit_multitag
@doc.tag_directives << ['!!', 'foo.com,2009:']
- yaml = @stream.to_yaml
+ yaml = @stream.yaml
assert_match('%TAG ! tag:tenderlovemaking.com,2009:', yaml)
assert_match('%TAG !! foo.com,2009:', yaml)
end
@@ -31,7 +31,7 @@ module Psych
def test_emit_bad_tag
assert_raises(RuntimeError) do
@doc.tag_directives = [['!']]
- @stream.to_yaml
+ @stream.yaml
end
end
@@ -40,7 +40,7 @@ module Psych
end
def test_emit_version
- assert_match('%YAML 1.1', @stream.to_yaml)
+ assert_match('%YAML 1.1', @stream.yaml)
end
end
end
diff --git a/test/psych/test_numeric.rb b/test/psych/test_numeric.rb
new file mode 100644
index 0000000000..9adb058a32
--- /dev/null
+++ b/test/psych/test_numeric.rb
@@ -0,0 +1,14 @@
+require 'psych/helper'
+
+module Psych
+ ###
+ # Test numerics from YAML spec:
+ # http://yaml.org/type/float.html
+ # http://yaml.org/type/int.html
+ class TestNumeric < TestCase
+ def test_non_float_with_0
+ str = Psych.load('--- 090')
+ assert_equal '090', str
+ end
+ end
+end
diff --git a/test/psych/test_string.rb b/test/psych/test_string.rb
index 96d77e0f42..51f1280abf 100644
--- a/test/psych/test_string.rb
+++ b/test/psych/test_string.rb
@@ -2,6 +2,14 @@ require 'psych/helper'
module Psych
class TestString < TestCase
+ def test_tagged_binary_should_be_dumped_as_binary
+ string = "hello world!"
+ string.force_encoding 'ascii-8bit'
+ yml = Psych.dump string
+ assert_match(/binary/, yml)
+ assert_equal string, Psych.load(yml)
+ end
+
def test_binary_string_null
string = "\x00"
yml = Psych.dump string
diff --git a/test/psych/visitors/test_emitter.rb b/test/psych/visitors/test_emitter.rb
index de27b4588c..780c953693 100644
--- a/test/psych/visitors/test_emitter.rb
+++ b/test/psych/visitors/test_emitter.rb
@@ -46,7 +46,7 @@ module Psych
@visitor.accept s
assert_match(/1.1/, @io.string)
- assert_equal @io.string, s.to_yaml
+ assert_equal @io.string, s.yaml
end
def test_document_implicit_end
@@ -61,8 +61,8 @@ module Psych
@visitor.accept s
assert_match(/key: value/, @io.string)
- assert_equal @io.string, s.to_yaml
- assert(/\.\.\./ !~ s.to_yaml)
+ assert_equal @io.string, s.yaml
+ assert(/\.\.\./ !~ s.yaml)
end
def test_scalar
@@ -76,7 +76,7 @@ module Psych
@visitor.accept s
assert_match(/hello/, @io.string)
- assert_equal @io.string, s.to_yaml
+ assert_equal @io.string, s.yaml
end
def test_scalar_with_tag
@@ -91,7 +91,7 @@ module Psych
assert_match(/str/, @io.string)
assert_match(/hello/, @io.string)
- assert_equal @io.string, s.to_yaml
+ assert_equal @io.string, s.yaml
end
def test_sequence
@@ -107,7 +107,7 @@ module Psych
@visitor.accept s
assert_match(/- hello/, @io.string)
- assert_equal @io.string, s.to_yaml
+ assert_equal @io.string, s.yaml
end
def test_mapping
@@ -122,7 +122,7 @@ module Psych
@visitor.accept s
assert_match(/key: value/, @io.string)
- assert_equal @io.string, s.to_yaml
+ assert_equal @io.string, s.yaml
end
def test_alias
@@ -137,7 +137,7 @@ module Psych
@visitor.accept s
assert_match(/&A key: \*A/, @io.string)
- assert_equal @io.string, s.to_yaml
+ assert_equal @io.string, s.yaml
end
end
end
diff --git a/version.h b/version.h
index db17364bc7..1c8ddfacc7 100644
--- a/version.h
+++ b/version.h
@@ -1,5 +1,5 @@
#define RUBY_VERSION "1.9.3"
-#define RUBY_PATCHLEVEL 5
+#define RUBY_PATCHLEVEL 6
#define RUBY_RELEASE_DATE "2011-12-07"
#define RUBY_RELEASE_YEAR 2011