зеркало из https://github.com/github/ruby.git
* ext/psych/lib/psych/visitors/emitter.rb: sending emit options to
YAML emitter. [ruby-core:28318] * ext/psych/emitter.c: updating documentation about emit options * ext/psych/lib/psych/core_ext.rb: ditto * ext/psych/lib/psych.rb (dump): passing emit options to emitter. * ext/psych/lib/psych/nodes/node.rb: ditto git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28573 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
a5d37d10a9
Коммит
3a185ede69
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
|||
Thu Jul 8 08:01:03 2010 Aaron Patterson <aaron@tenderlovemaking.com>
|
||||
|
||||
* ext/psych/emitter.c: updating documentation about emit options
|
||||
|
||||
* ext/psych/lib/psych/core_ext.rb: ditto
|
||||
|
||||
* ext/psych/lib/psych.rb (dump): passing emit options to emitter.
|
||||
|
||||
* ext/psych/lib/psych/nodes/node.rb: ditto
|
||||
|
||||
* ext/psych/lib/psych/visitors/emitter.rb: sending emit options to
|
||||
YAML emitter. [ruby-core:28318]
|
||||
|
||||
Thu Jul 8 06:05:58 2010 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* strftime.c (rb_strftime_with_timespec): support %:z and %::z.
|
||||
|
|
|
@ -435,7 +435,8 @@ static VALUE canonical(VALUE self)
|
|||
|
||||
/* call-seq: emitter.indentation = level
|
||||
*
|
||||
* Set the indentation level to +level+.
|
||||
* Set the indentation level to +level+. The level must be less than 10 and
|
||||
* greater than 1.
|
||||
*/
|
||||
static VALUE set_indentation(VALUE self, VALUE level)
|
||||
{
|
||||
|
|
|
@ -155,11 +155,29 @@ module Psych
|
|||
end
|
||||
|
||||
###
|
||||
# Dump Ruby object +o+ to a YAML string using +options+.
|
||||
# call-seq:
|
||||
# Psych.dump(o) -> string of yaml
|
||||
# Psych.dump(o, options) -> string of yaml
|
||||
# Psych.dump(o, io) -> io object passed in
|
||||
# Psych.dump(o, io, options) -> io object passed in
|
||||
#
|
||||
# Dump Ruby object +o+ to a YAML string. Optional +options+ may be passed in
|
||||
# to control the output format. If an IO object is passed in, the YAML will
|
||||
# be dumped to that IO object.
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# # Dump an array, get back a YAML string
|
||||
# Psych.dump(['a', 'b']) # => "---\n- a\n- b\n"
|
||||
#
|
||||
# # Dump an array to an IO object
|
||||
# Psych.dump(['a', 'b'], StringIO.new) # => #<StringIO:0x000001009d0890>
|
||||
#
|
||||
# # Dump an array with indentation set
|
||||
# Psych.dump(['a', ['b']], :indentation => 3) # => "---\n- a\n- - b\n"
|
||||
#
|
||||
# # Dump an array to an IO with indentation set
|
||||
# Psych.dump(['a', ['b']], StringIO.new, :indentation => 3)
|
||||
def self.dump o, io = nil, options = {}
|
||||
if Hash === io
|
||||
options = io
|
||||
|
@ -168,7 +186,7 @@ module Psych
|
|||
|
||||
visitor = Psych::Visitors::YAMLTree.new options
|
||||
visitor << o
|
||||
visitor.tree.to_yaml io
|
||||
visitor.tree.to_yaml io, options
|
||||
end
|
||||
|
||||
###
|
||||
|
|
|
@ -6,9 +6,10 @@ class Object
|
|||
# FIXME: rename this to "to_yaml" when syck is removed
|
||||
|
||||
###
|
||||
# call-seq: to_yaml
|
||||
# call-seq: to_yaml(options = {})
|
||||
#
|
||||
# Convert an object to YAML
|
||||
# Convert an object to YAML. See Psych.dump for more information on the
|
||||
# available +options+.
|
||||
def psych_to_yaml options = {}
|
||||
Psych.dump self, options
|
||||
end
|
||||
|
|
|
@ -30,10 +30,10 @@ module Psych
|
|||
# Convert this node to YAML.
|
||||
#
|
||||
# See also Psych::Visitors::Emitter
|
||||
def to_yaml io = nil
|
||||
def to_yaml io = nil, options = {}
|
||||
real_io = io || StringIO.new
|
||||
|
||||
Visitors::Emitter.new(real_io).accept self
|
||||
Visitors::Emitter.new(real_io, options).accept self
|
||||
return real_io.string unless io
|
||||
io
|
||||
end
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
module Psych
|
||||
module Visitors
|
||||
class Emitter < Psych::Visitors::Visitor
|
||||
def initialize io
|
||||
def initialize io, options = {}
|
||||
@handler = Psych::Emitter.new io
|
||||
@handler.indentation = options[:indentation] if options[:indentation]
|
||||
@handler.canonical = options[:canonical] if options[:canonical]
|
||||
end
|
||||
|
||||
def visit_Psych_Nodes_Stream o
|
||||
|
|
|
@ -8,6 +8,16 @@ class TestPsych < Psych::TestCase
|
|||
Psych.domain_types.clear
|
||||
end
|
||||
|
||||
def test_indent
|
||||
yml = Psych.dump({:a => {'b' => 'c'}}, {:indentation => 5})
|
||||
assert_match(/^[ ]{5}b/, yml)
|
||||
end
|
||||
|
||||
def test_canonical
|
||||
yml = Psych.dump({:a => {'b' => 'c'}}, {:canonical => true})
|
||||
assert_match(/\? ! "b/, yml)
|
||||
end
|
||||
|
||||
def test_load_argument_error
|
||||
assert_raises(TypeError) do
|
||||
Psych.load nil
|
||||
|
|
|
@ -9,6 +9,26 @@ module Psych
|
|||
@visitor = Visitors::Emitter.new @io
|
||||
end
|
||||
|
||||
def test_options
|
||||
io = StringIO.new
|
||||
visitor = Visitors::Emitter.new io, :indentation => 3
|
||||
|
||||
s = Nodes::Stream.new
|
||||
doc = Nodes::Document.new
|
||||
mapping = Nodes::Mapping.new
|
||||
m2 = Nodes::Mapping.new
|
||||
m2.children << Nodes::Scalar.new('a')
|
||||
m2.children << Nodes::Scalar.new('b')
|
||||
|
||||
mapping.children << Nodes::Scalar.new('key')
|
||||
mapping.children << m2
|
||||
doc.children << mapping
|
||||
s.children << doc
|
||||
|
||||
visitor.accept s
|
||||
assert_match(/^[ ]{3}a/, io.string)
|
||||
end
|
||||
|
||||
def test_stream
|
||||
s = Nodes::Stream.new
|
||||
@visitor.accept s
|
||||
|
|
Загрузка…
Ссылка в новой задаче