class Mkxms::Mssql::Mkxms::Mssql::Engine
Constants
- MissingHandler
- ParseItem
Attributes
missing_handlers[R]
Public Class Methods
new(document, initial_context)
click to toggle source
# File lib/mkxms/mssql/engine.rb, line 31 def initialize(document, initial_context) @initial_context = initial_context @parse_items = [ParseItem.new(initial_context, document.root)] @missing_handlers = [] end
Public Instance Methods
run()
click to toggle source
# File lib/mkxms/mssql/engine.rb, line 39 def run until @parse_items.empty? parse_item end errors = @missing_handlers raise ParseErrors.new(errors) unless errors.empty? end
Private Instance Methods
element_handler_method_name(node)
click to toggle source
# File lib/mkxms/mssql/engine.rb, line 77 def element_handler_method_name(node) case node when REXML::Element "handle_#{Utils.code_sym_for node.name}_element".to_sym end end
parse_item()
click to toggle source
# File lib/mkxms/mssql/engine.rb, line 49 def parse_item item = @parse_items.shift case item.node when REXML::Element begin handler = item.context.method(handler_name = element_handler_method_name(item.node)) rescue NameError record_missing_handler(item.context.class, handler_name) return end result = ParseItem.new(item.context, item.node) handler[result] @parse_items = item.node.children.select do |node| [REXML::Element, REXML::Text].any? {|c| node.kind_of? c} end.map do |node| ParseItem.new(result.context, node) end + @parse_items when REXML::Text begin handler = item.context.method(:handle_text) rescue record_missing_handler(item.context.class, :handle_text) unless item.node.value =~ /^\s*$/ return end handler[item.node.value, item.node.parent] end end
record_missing_handler(context_class, method_name)
click to toggle source
# File lib/mkxms/mssql/engine.rb, line 84 def record_missing_handler(context_class, method_name) @missing_handlers << MissingHandler.new(context_class, method_name) end