class SafeYAML::PsychHandler

Public Class Methods

new(options, &block) click to toggle source
# File lib/safe_yaml/psych_handler.rb, line 6
def initialize(options, &block)
  @options      = SafeYAML::OPTIONS.merge(options || {})
  @block        = block
  @initializers = @options[:custom_initializers] || {}
  @anchors      = {}
  @stack        = []
  @current_key  = nil
  @result       = nil
  @begun        = false
end

Public Instance Methods

add_to_current_structure(value, anchor=nil, quoted=nil, tag=nil) click to toggle source
# File lib/safe_yaml/psych_handler.rb, line 21
def add_to_current_structure(value, anchor=nil, quoted=nil, tag=nil)
  value = Transform.to_proper_type(value, quoted, tag, @options)

  @anchors[anchor] = value if anchor

  if !@begun
    @begun = true
    @result = value
    @current_structure = @result
    return
  end

  if @current_structure.respond_to?(:<<)
    @current_structure << value

  elsif @current_structure.respond_to?(:[]=)
    if @current_key.nil?
      @current_key = value

    else
      if @current_key == "<<"
        @current_structure.merge!(value)
      else
        @current_structure[@current_key] = value
      end

      @current_key = nil
    end

  else
    raise "Don't know how to add to a #{@current_structure.class}!"
  end
end
alias(anchor) click to toggle source

event handlers

# File lib/safe_yaml/psych_handler.rb, line 65
def alias(anchor)
  add_to_current_structure(@anchors[anchor])
end
end_current_structure() click to toggle source
# File lib/safe_yaml/psych_handler.rb, line 55
def end_current_structure
  @stack.pop
  @current_structure = @stack.last
end
end_document(implicit) click to toggle source
# File lib/safe_yaml/psych_handler.rb, line 73
def end_document(implicit)
  @block.call(@result)
end
end_mapping() click to toggle source
# File lib/safe_yaml/psych_handler.rb, line 84
def end_mapping
  self.end_current_structure()
end
end_sequence() click to toggle source
# File lib/safe_yaml/psych_handler.rb, line 95
def end_sequence
  self.end_current_structure()
end
result() click to toggle source
# File lib/safe_yaml/psych_handler.rb, line 17
def result
  @begun ? @result : false
end
scalar(value, anchor, tag, plain, quoted, style) click to toggle source
# File lib/safe_yaml/psych_handler.rb, line 69
def scalar(value, anchor, tag, plain, quoted, style)
  add_to_current_structure(value, anchor, quoted, tag)
end
start_mapping(anchor, tag, implicit, style) click to toggle source
# File lib/safe_yaml/psych_handler.rb, line 77
def start_mapping(anchor, tag, implicit, style)
  map = @initializers.include?(tag) ? @initializers[tag].call : {}
  self.add_to_current_structure(map, anchor)
  @current_structure = map
  @stack.push(map)
end
start_sequence(anchor, tag, implicit, style) click to toggle source
# File lib/safe_yaml/psych_handler.rb, line 88
def start_sequence(anchor, tag, implicit, style)
  seq = @initializers.include?(tag) ? @initializers[tag].call : []
  self.add_to_current_structure(seq, anchor)
  @current_structure = seq
  @stack.push(seq)
end
streaming?() click to toggle source
# File lib/safe_yaml/psych_handler.rb, line 60
def streaming?
  true
end