Module: DBI::Utils::XMLFormatter

Defined in:
lib/dbi/utils/xmlformatter.rb

Overview

Formats results in XML.

Class Method Summary collapse

Class Method Details

.extended_row(dbrow, rowtag = "row", cols_in_row_tag = [], cols_as_tag = nil, add_row_tag_attrs = {}, output = STDOUT) ⇒ Object

good lord, what a mess.

nil in cols_as_tag, means “all columns expect those listed in cols_in_row_tag” add_row_tag_attrs are additional attributes which are inserted into the row-tag



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/dbi/utils/xmlformatter.rb', line 24

def self.extended_row(dbrow, rowtag="row", cols_in_row_tag=[], cols_as_tag=nil, add_row_tag_attrs={}, output=STDOUT)
    if cols_as_tag.nil?
        cols_as_tag = dbrow.column_names - cols_in_row_tag
    end

    output << "<#{rowtag}"
    add_row_tag_attrs.each do |key, val|  
        # TODO: use textconv ? " substitution?
        output << %{ #{key}="#{textconv(val)}"}
    end
    cols_in_row_tag.each do |key|
        # TODO: use textconv ? " substitution?
        output << %{ #{key}="#{dbrow[key]}"}
    end
    output << ">\n"

    cols_as_tag.each do |key|
        output << "  <#{key}>" + textconv(dbrow[key]) + "</#{key}>\n" 
    end
    output << "</#{rowtag}>\n"
end

.row(dbrow, rowtag = "row", output = STDOUT) ⇒ Object

Generate XML for a row. The column names will surround the the values as tags.

  • dbrow: the array of the result row.

  • rowtag: the name of the tag that encapsulates a row.

  • output: Object that responds to ‘<<`.



11
12
13
14
15
16
17
18
# File 'lib/dbi/utils/xmlformatter.rb', line 11

def self.row(dbrow, rowtag="row", output=STDOUT)
    #XMLFormatter.extended_row(dbrow, "row", [],  
    output << "<#{rowtag}>\n"
    dbrow.each_with_name do |val, name|
        output << "  <#{name}>" + textconv(val) + "</#{name}>\n" 
    end
    output << "</#{rowtag}>\n"
end

.table(rows, roottag = "rows", rowtag = "row", output = STDOUT) ⇒ Object

generate a full XML representation of the table.

Arguments and output are similar to #row, with the exception of roottag, which is a container for the individual row tags.



51
52
53
54
55
56
57
58
# File 'lib/dbi/utils/xmlformatter.rb', line 51

def self.table(rows, roottag = "rows", rowtag = "row", output=STDOUT)
    output << '<?xml version="1.0" encoding="UTF-8" ?>'
    output << "\n<#{roottag}>\n"
    rows.each do |row|
        row(row, rowtag, output)
    end
    output << "</#{roottag}>\n"
end