class SafeYAML::PsychHandler
Public Class Methods
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
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
Source
# File lib/safe_yaml/psych_handler.rb, line 65 def alias(anchor) add_to_current_structure(@anchors[anchor]) end
event handlers
Source
# File lib/safe_yaml/psych_handler.rb, line 55 def end_current_structure @stack.pop @current_structure = @stack.last end
Source
# File lib/safe_yaml/psych_handler.rb, line 73 def end_document(implicit) @block.call(@result) end
Source
# File lib/safe_yaml/psych_handler.rb, line 84 def end_mapping self.end_current_structure() end
Source
# File lib/safe_yaml/psych_handler.rb, line 95 def end_sequence self.end_current_structure() end
Source
# File lib/safe_yaml/psych_handler.rb, line 17 def result @begun ? @result : false end
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
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
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