class Struct

Public Class Methods

printclass=(pc) click to toggle source
# File lib/structformatter.rb, line 91
def Struct::printclass=(pc)
        @@printclass = pc
end

Public Instance Methods

render_xml(element_name, element) click to toggle source
# File lib/structformatter.rb, line 94
def render_xml(element_name, element)
        str = ""
        if element.class == Date
                str = "<#{element_name}>#{element.strftime("%Y-%m-%d")}</#{element_name}>"
        elsif element.class == Time or element.class == DateTime
                str = "<#{element_name}>#{element.strftime("%Y-%m-%dT%H:%M:%SZ")}</#{element_name}>"
        elsif element.kind_of? Struct
                str = element.to_xml
        elsif element.kind_of? Hash or element.kind_of? Array
                str = "<#{element_name}>"+element.to_xml+"</#{element_name}>"
        else
                str = "<#{element_name}>#{element.to_s.xml_escape}</#{element_name}>"
        end
end
to(format) click to toggle source
# File lib/structformatter.rb, line 157
def to(format)
        case format
        when 'xml'
                self.to_xml
        when 'json'
                self.to_json
        when 'string'
                self.to_s
        else
                raise "invalid format: #{format}, use one of xml, json, or string"
        end
end
to_json(*a) click to toggle source
# File lib/structformatter.rb, line 149
def to_json(*a)
        hash = (@@printclass) ? { 'class' => self.class } : {}
        self.members.sort.each do |member|
                hash[member] = self[member]
        end
        hash.to_json(*a)
end
to_s(sep = " ") click to toggle source
# File lib/structformatter.rb, line 170
def to_s(sep = " ")
        self.members.map{ |x| self[x].to_s }.join(sep)
end
to_s_header(sep = " ") click to toggle source
# File lib/structformatter.rb, line 174
def to_s_header(sep = " ")
        self.members.map{ |x| x.to_s }.join(sep)
end
to_xml() click to toggle source
# File lib/structformatter.rb, line 108
def to_xml
        children = []
        str = "<#{self.class}"
        self.members.each do |member|
                if self[member].class == Array or self[member].class == Hash or self[member].kind_of? Struct
                        children << member
                elsif self[member].class == Date
                        str += " #{member}='#{self[member].strftime("%Y-%m-%d")}'"
                elsif self[member].class == Time
                        str += " #{member}='#{self[member].strftime("%Y-%m-%dT%H:%M:%SZ")}'"
                else
                        str += " #{member}='#{self[member].to_s.xml_escape}'"
                end
        end
        if children.length == 0
                str += ' />'
        else
                str += '>'
                children.each do |member|
                        if self[member].class == Array
                                str += "<#{member}s>"
                                self[member].each do |item|
                                        str += render_xml(member,item)
                                end
                                str += "</#{member}s>"
                        elsif self[member].class == Hash
                                str += "<#{member}s>"
                                self[member].each do |key,value|
                                        str += "<HashElement><key>#{key}</key><value>"
                                        str += render_xml(member,value)
                                        str += "</value></HashElement>"
                                end
                                str += "</#{member}s>"
                        elsif self[member].kind_of? Struct
                                str += self[member].to_xml
                        end
                end
                str += "</#{self.class}>"
        end
end