1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* 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/trunk@33160 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
tenderlove 2011-09-01 19:07:44 +00:00
parent 6e6feaf8da
commit 8659de2e0f
3 changed files with 22 additions and 1 deletions

View file

@ -1,3 +1,9 @@
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.
Fri Sep 2 01:07:14 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
* numeric.c (flo_round): substitute machine dependent magic number.

View file

@ -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'

View file

@ -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