Class: REXMLUtilityNode
- Defined in:
- lib/quickbooks/extlib/hash.rb,
lib/quickbooks/xsd/xml_parse.rb
Overview
:nodoc:
Instance Attribute Summary collapse
-
#attributes ⇒ Object
Returns the value of attribute attributes.
-
#children ⇒ Object
Returns the value of attribute children.
-
#name ⇒ Object
Returns the value of attribute name.
-
#type ⇒ Object
Returns the value of attribute type.
Instance Method Summary collapse
- #add_node(node) ⇒ Object
-
#initialize(name, attributes = {}) ⇒ REXMLUtilityNode
constructor
A new instance of REXMLUtilityNode.
-
#inner_html ⇒ Object
Get the inner_html of the REXML node.
- #to_hash ⇒ Object
-
#to_html ⇒ String
Converts the node into a readable HTML node.
- #to_s ⇒ Object
-
#translate_xml_entities(value) ⇒ #gsub
Convert basic XML entities into their literal values.
-
#typecast_value(value) ⇒ Integer, ...
Typecasts a value based upon its type.
-
#undasherize_keys(params) ⇒ Object
Take keys of the form foo-bar and convert them to foo_bar.
Constructor Details
#initialize(name, attributes = {}) ⇒ REXMLUtilityNode
Returns a new instance of REXMLUtilityNode.
194 195 196 197 198 199 200 201 202 203 |
# File 'lib/quickbooks/extlib/hash.rb', line 194 def initialize(name, attributes = {}) @name = name.tr("-", "_") # leave the type alone if we don't know what it is @type = self.class.available_typecasts.include?(attributes["type"]) ? attributes.delete("type") : attributes["type"] @nil_element = attributes.delete("nil") == "true" @attributes = undasherize_keys(attributes) @children = [] @text = false end |
Instance Attribute Details
#attributes ⇒ Object
Returns the value of attribute attributes.
175 176 177 |
# File 'lib/quickbooks/extlib/hash.rb', line 175 def attributes @attributes end |
#children ⇒ Object
Returns the value of attribute children.
175 176 177 |
# File 'lib/quickbooks/extlib/hash.rb', line 175 def children @children end |
#name ⇒ Object
Returns the value of attribute name.
175 176 177 |
# File 'lib/quickbooks/extlib/hash.rb', line 175 def name @name end |
#type ⇒ Object
Returns the value of attribute type.
175 176 177 |
# File 'lib/quickbooks/extlib/hash.rb', line 175 def type @type end |
Instance Method Details
#add_node(node) ⇒ Object
205 206 207 208 |
# File 'lib/quickbooks/extlib/hash.rb', line 205 def add_node(node) @text = true if node.is_a? String @children << node end |
#inner_html ⇒ Object
Get the inner_html of the REXML node.
311 312 313 |
# File 'lib/quickbooks/extlib/hash.rb', line 311 def inner_html @children.join end |
#to_hash ⇒ Object
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 |
# File 'lib/quickbooks/extlib/hash.rb', line 210 def to_hash if @type == "file" f = StringIO.new((@children.first || '').unpack('m').first) class << f attr_accessor :original_filename, :content_type end f.original_filename = attributes['name'] || 'untitled' f.content_type = attributes['content_type'] || 'application/octet-stream' return {name => f} end if @text return { name => typecast_value( translate_xml_entities( inner_html ) ) } else #change repeating groups into an array groups = @children.inject({}) { |s,e| (s[e.name] ||= []) << e; s } out = nil if @type == "array" out = [] groups.each do |k, v| if v.size == 1 out << v.first.to_hash.entries.first.last else out << v.map{|e| e.to_hash[k]} end end out = out.flatten else # If Hash out = {} groups.each do |k,v| if v.size == 1 out.merge!(v.first) else out.merge!( k => v.map{|e| e.to_hash[k]}) end end out.merge! attributes unless attributes.empty? out = out.empty? ? nil : out end if @type && out.nil? { name => typecast_value(out) } else { name => out } end end end |
#to_html ⇒ String
Converts the node into a readable HTML node.
318 319 320 321 |
# File 'lib/quickbooks/extlib/hash.rb', line 318 def to_html attributes.merge!(:type => @type ) if @type "<#{name}#{attributes.to_xml_attributes}>#{@nil_element ? '' : inner_html}</#{name}>" end |
#to_s ⇒ Object
324 325 326 |
# File 'lib/quickbooks/extlib/hash.rb', line 324 def to_s to_html end |
#translate_xml_entities(value) ⇒ #gsub
Convert basic XML entities into their literal values.
294 295 296 297 298 299 300 |
# File 'lib/quickbooks/extlib/hash.rb', line 294 def translate_xml_entities(value) value.gsub(/</, "<"). gsub(/>/, ">"). gsub(/"/, '"'). gsub(/'/, "'"). gsub(/&/, "&") end |
#typecast_value(value) ⇒ Integer, ...
If self
does not have a “type” key, or if it’s not one of the options specified above, the raw value
will be returned.
Typecasts a value based upon its type. For instance, if node
has #type == “integer”, #=> 12]}
283 284 285 286 287 |
# File 'lib/quickbooks/extlib/hash.rb', line 283 def typecast_value(value) return value unless @type proc = self.class.typecasts[@type] proc.nil? ? value : proc.call(value) end |
#undasherize_keys(params) ⇒ Object
Take keys of the form foo-bar and convert them to foo_bar
303 304 305 306 307 308 |
# File 'lib/quickbooks/extlib/hash.rb', line 303 def undasherize_keys(params) params.keys.each do |key, value| params[key.tr("-", "_")] = params.delete(key) end params end |