Skip to content

Commit

Permalink
binary strings should be dumped with literal formatting
Browse files Browse the repository at this point in the history
  • Loading branch information
tenderlove committed Apr 17, 2010
1 parent ce61f13 commit e0e3ea1
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 2 deletions.
7 changes: 5 additions & 2 deletions lib/psych/visitors/yaml_tree.rb
Expand Up @@ -171,10 +171,13 @@ def visit_Float o
def visit_String o
plain = false
quote = false
style = Nodes::Scalar::ANY

if o.index("\x00") || o.count("^ -~\t\r\n").fdiv(o.length) > 0.3
str = [o].pack('m').chomp
tag = '!binary'
tag = '!binary' # FIXME: change to below when syck is removed
#tag = 'tag:yaml.org,2002:binary'
style = Nodes::Scalar::LITERAL
else
str = o
tag = nil
Expand All @@ -184,7 +187,7 @@ def visit_String o

ivars = find_ivars o

scalar = create_scalar str, nil, tag, plain, quote
scalar = create_scalar str, nil, tag, plain, quote, style

if ivars.empty?
append scalar
Expand Down
7 changes: 7 additions & 0 deletions test/psych/visitors/test_yaml_tree.rb
Expand Up @@ -8,6 +8,13 @@ def setup
@v = Visitors::YAMLTree.new
end

def test_binary_formatting
gif = "GIF89a\f\x00\f\x00\x84\x00\x00\xFF\xFF\xF7\xF5\xF5\xEE\xE9\xE9\xE5fff\x00\x00\x00\xE7\xE7\xE7^^^\xF3\xF3\xED\x8E\x8E\x8E\xE0\xE0\xE0\x9F\x9F\x9F\x93\x93\x93\xA7\xA7\xA7\x9E\x9E\x9Eiiiccc\xA3\xA3\xA3\x84\x84\x84\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9!\xFE\x0EMade with GIMP\x00,\x00\x00\x00\x00\f\x00\f\x00\x00\x05, \x8E\x810\x9E\xE3@\x14\xE8i\x10\xC4\xD1\x8A\b\x1C\xCF\x80M$z\xEF\xFF0\x85p\xB8\xB01f\r\e\xCE\x01\xC3\x01\x1E\x10' \x82\n\x01\x00;"
@v << gif
scalar = @v.tree.children.first.children.first
assert_equal Psych::Nodes::Scalar::LITERAL, scalar.style
end

def test_object_has_no_class
yaml = Psych.dump(Object.new)
assert(Psych.dump(Object.new) !~ /Object/, yaml)
Expand Down

0 comments on commit e0e3ea1

Please sign in to comment.