* 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:
parent
a5d37d10a9
commit
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>
|
Thu Jul 8 06:05:58 2010 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* strftime.c (rb_strftime_with_timespec): support %:z and %::z.
|
* strftime.c (rb_strftime_with_timespec): support %:z and %::z.
|
||||||
|
@ -435,7 +435,8 @@ static VALUE canonical(VALUE self)
|
|||||||
|
|
||||||
/* call-seq: emitter.indentation = level
|
/* 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)
|
static VALUE set_indentation(VALUE self, VALUE level)
|
||||||
{
|
{
|
||||||
|
@ -155,11 +155,29 @@ module Psych
|
|||||||
end
|
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:
|
# Example:
|
||||||
#
|
#
|
||||||
|
# # Dump an array, get back a YAML string
|
||||||
# Psych.dump(['a', 'b']) # => "---\n- a\n- b\n"
|
# 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 = {}
|
def self.dump o, io = nil, options = {}
|
||||||
if Hash === io
|
if Hash === io
|
||||||
options = io
|
options = io
|
||||||
@ -168,7 +186,7 @@ module Psych
|
|||||||
|
|
||||||
visitor = Psych::Visitors::YAMLTree.new options
|
visitor = Psych::Visitors::YAMLTree.new options
|
||||||
visitor << o
|
visitor << o
|
||||||
visitor.tree.to_yaml io
|
visitor.tree.to_yaml io, options
|
||||||
end
|
end
|
||||||
|
|
||||||
###
|
###
|
||||||
|
@ -6,9 +6,10 @@ class Object
|
|||||||
# FIXME: rename this to "to_yaml" when syck is removed
|
# 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 = {}
|
def psych_to_yaml options = {}
|
||||||
Psych.dump self, options
|
Psych.dump self, options
|
||||||
end
|
end
|
||||||
|
@ -30,10 +30,10 @@ module Psych
|
|||||||
# Convert this node to YAML.
|
# Convert this node to YAML.
|
||||||
#
|
#
|
||||||
# See also Psych::Visitors::Emitter
|
# See also Psych::Visitors::Emitter
|
||||||
def to_yaml io = nil
|
def to_yaml io = nil, options = {}
|
||||||
real_io = io || StringIO.new
|
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
|
return real_io.string unless io
|
||||||
io
|
io
|
||||||
end
|
end
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
module Psych
|
module Psych
|
||||||
module Visitors
|
module Visitors
|
||||||
class Emitter < Psych::Visitors::Visitor
|
class Emitter < Psych::Visitors::Visitor
|
||||||
def initialize io
|
def initialize io, options = {}
|
||||||
@handler = Psych::Emitter.new io
|
@handler = Psych::Emitter.new io
|
||||||
|
@handler.indentation = options[:indentation] if options[:indentation]
|
||||||
|
@handler.canonical = options[:canonical] if options[:canonical]
|
||||||
end
|
end
|
||||||
|
|
||||||
def visit_Psych_Nodes_Stream o
|
def visit_Psych_Nodes_Stream o
|
||||||
|
@ -8,6 +8,16 @@ class TestPsych < Psych::TestCase
|
|||||||
Psych.domain_types.clear
|
Psych.domain_types.clear
|
||||||
end
|
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
|
def test_load_argument_error
|
||||||
assert_raises(TypeError) do
|
assert_raises(TypeError) do
|
||||||
Psych.load nil
|
Psych.load nil
|
||||||
|
@ -9,6 +9,26 @@ module Psych
|
|||||||
@visitor = Visitors::Emitter.new @io
|
@visitor = Visitors::Emitter.new @io
|
||||||
end
|
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
|
def test_stream
|
||||||
s = Nodes::Stream.new
|
s = Nodes::Stream.new
|
||||||
@visitor.accept s
|
@visitor.accept s
|
||||||
|
Loading…
x
Reference in New Issue
Block a user