class Paquito::SafeYAML

Constants

ALL_SYMBOLS
BASE_PERMITTED_CLASSNAMES

Public Class Methods

new(permitted_classes: [], deprecated_classes: [], aliases: false) click to toggle source
# File lib/paquito/safe_yaml.rb, line 9
def initialize(permitted_classes: [], deprecated_classes: [], aliases: false)
  permitted_classes += BASE_PERMITTED_CLASSNAMES
  @dumpable_classes = permitted_classes
  @loadable_classes = permitted_classes + deprecated_classes
  @aliases = aliases

  @dump_options = {
    permitted_classes: permitted_classes,
    permitted_symbols: ALL_SYMBOLS,
    aliases: true,
    line_width: -1, # Disable YAML line-wrapping because it causes extremely obscure issues.
  }.freeze
end

Public Instance Methods

dump(obj) click to toggle source
# File lib/paquito/safe_yaml.rb, line 36
def dump(obj)
  visitor = RestrictedYAMLTree.create(@dump_options)
  visitor << obj
  visitor.tree.yaml(nil, @dump_options)
rescue Psych::Exception => psych_error
  raise PackError, psych_error.message
end
load(serial) click to toggle source
# File lib/paquito/safe_yaml.rb, line 23
def load(serial)
  Psych.safe_load(
    serial,
    permitted_classes: @loadable_classes,
    permitted_symbols: ALL_SYMBOLS,
    aliases: @aliases,
  )
rescue Psych::DisallowedClass => psych_error
  raise UnsupportedType, psych_error.message
rescue Psych::Exception => psych_error
  raise UnpackError, psych_error.message
end