Class | Kwalify::YamlParser |
In: |
kwalify/yaml-parser.rb
|
Parent: | PlainYamlParser |
(OBSOLETE) yaml parser
this class has been obsoleted. use Kwalify::Yaml::Parser instead.
ex.
# load document with YamlParser str = ARGF.read() parser = Kwalify::YamlParser.new(str) document = parser.parse() # validate document schema = YAML.load(File.read('schema.yaml')) validator = Kwalify::Validator.new(schema) errors = validator.validate(document) # print validation result if errors && !errors.empty? parser.set_errors_linenum(errors) errors.sort.each do |error| print "line %d: path %s: %s" % [error.linenum, error.path, error.message] end end
# File kwalify/yaml-parser.rb, line 754 def initialize(*args) super @linenums_table = {} # object_id -> hash or array end
# File kwalify/yaml-parser.rb, line 764 def path_linenum(path) return 1 if path.empty? || path == '/' elems = path.split('/') elems.shift if path[0] == ?/ # delete empty string on head last_elem = elems.pop c = @doc # collection elems.each do |elem| if c.is_a?(Array) c = c[elem.to_i] elsif c.is_a?(Hash) c = c[elem] else assert false end end linenums = @linenums_table[c.__id__] if c.is_a?(Array) linenum = linenums[last_elem.to_i] elsif c.is_a?(Hash) linenum = linenums[last_elem] end return linenum end
# File kwalify/yaml-parser.rb, line 794 def set_error_linenums(errors) warn "*** Kwalify::YamlParser#set_error_linenums() is obsolete. You should use set_errors_linenum() instead." set_errors_linenum(errors) end
# File kwalify/yaml-parser.rb, line 788 def set_errors_linenum(errors) errors.each do |error| error.linenum = path_linenum(error.path) end end
# File kwalify/yaml-parser.rb, line 823 def add_to_map(map, key, value, linenum) map[key] = value @linenums_table[map.__id__][key] = linenum end
# File kwalify/yaml-parser.rb, line 807 def add_to_seq(seq, value, linenum) seq << value @linenums_table[seq.__id__] << linenum end
# File kwalify/yaml-parser.rb, line 817 def create_mapping(linenum=current_linenum()) map = {} @linenums_table[map.__id__] = {} return map end
# File kwalify/yaml-parser.rb, line 852 def create_scalar(value, linenum=current_linenum()) data = super(value) #return Scalar.new(data, linenum) return data end
# File kwalify/yaml-parser.rb, line 801 def create_sequence(linenum=current_linenum()) seq = [] @linenums_table[seq.__id__] = [] return seq end
# File kwalify/yaml-parser.rb, line 838 def merge_map(map, collection, linenum) t = @linenums_table[map.__id__] list = collection.is_a?(Array) ? collection : [ collection ] list.each do |m| t2 = @linenums_table[m.__id__] m.each do |key, val| unless map.key?(key) map[key] = val t[key] = t2[key] end end end end
# File kwalify/yaml-parser.rb, line 833 def set_default(map, value, linenum) map.default = value @linenums_table[map.__id__]['=''='] = linenum end
# File kwalify/yaml-parser.rb, line 828 def set_map_with(map, key, value, linenum) map[key] = value @linenums_table[map.__id__][key] = linenum end