Sha256: 43f54e445ca395964f2db325b7417a0fc6fb4a4dd745f13018d650dcc1893320

Contents?: true

Size: 907 Bytes

Versions: 3

Compression:

Stored size: 907 Bytes

Contents

module FacturaePrint
  module XMLObjectifier
  
    def self.build(node, options={})
      options = {:collection_nodes => []}.merge(options)
      return node.text if node.text?
      
      children = get_node_children(node)
      return nil if children.empty? && node.content.empty?
      
      if children.size == 1 && children.first.text?
        children.first.text
      else
        object = options.delete(:object) || OpenStruct.new
        children.each do |child|
          value = if options[:collection_nodes].include?(child.name)
            get_node_children(child).map{|c| build(c, options)}
          else 
            build(child, options)
          end
          
          object.send("#{child.name.underscore}=", value)
        end
        object
      end
    end
    
    private
    
    def self.get_node_children(node)
      node.children.reject { |c| c.blank? }
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
facturae_print-0.0.4 lib/facturae_print/xml_objectifier.rb
facturae_print-0.0.3 lib/facturae_print/xml_objectifier.rb
facturae_print-0.0.2 lib/facturae_print/xml_objectifier.rb