Method: Psych.safe_dump

Defined in:
lib/psych.rb

.safe_dump(o, io = nil, options = {}) ⇒ Object

call-seq:

Psych.safe_dump(o)               -> string of yaml
Psych.safe_dump(o, options)      -> string of yaml
Psych.safe_dump(o, io)           -> io object passed in
Psych.safe_dump(o, io, options)  -> io object passed in

Safely 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. By default, only the following classes are allowed to be serialized:

  • TrueClass

  • FalseClass

  • NilClass

  • Integer

  • Float

  • String

  • Array

  • Hash

Arbitrary classes can be allowed by adding those classes to the permitted_classes keyword argument. They are additive. For example, to allow Date serialization:

Psych.safe_dump(yaml, permitted_classes: [Date])

Now the Date class can be dumped in addition to the classes listed above.

A Psych::DisallowedClass exception will be raised if the object contains a class that isn’t in the permitted_classes list.

Currently supported options are:

:indentation

Number of space characters used to indent. Acceptable value should be in 0..9 range, otherwise option is ignored.

Default: 2.

:line_width

Max character to wrap line at. For unlimited line width use -1.

Default: 0 (meaning “wrap at 81”).

:canonical

Write “canonical” YAML form (very verbose, yet strictly formal).

Default: false.

:header

Write %YAML [version] at the beginning of document.

Default: false.

:stringify_names

Dump symbol keys in Hash objects as string.

Default: false.

Example:

# Dump an array, get back a YAML string
Psych.safe_dump(['a', 'b'])  # => "---\n- a\n- b\n"

# Dump an array to an IO object
Psych.safe_dump(['a', 'b'], StringIO.new)  # => #<StringIO:0x000001009d0890>

# Dump an array with indentation set
Psych.safe_dump(['a', ['b']], indentation: 3) # => "---\n- a\n-  - b\n"

# Dump an array to an IO with indentation set
Psych.safe_dump(['a', ['b']], StringIO.new, indentation: 3)

# Dump hash with symbol keys as string
Psych.dump({a: "b"}, stringify_names: true) # => "---\na: b\n"


596
597
598
599
600
601
602
603
604
605
# File 'lib/psych.rb', line 596

def self.safe_dump o, io = nil, options = {}
  if Hash === io
    options = io
    io      = nil
  end

  visitor = Psych::Visitors::RestrictedYAMLTree.create options
  visitor << o
  visitor.tree.yaml io, options
end