Sha256: b74f01f7e79aac3b3d8d6b1e2ceafaae1bcbdcdbd690f488e4e06438f14c362e

Contents?: true

Size: 1.18 KB

Versions: 2

Compression:

Stored size: 1.18 KB

Contents

require 'nokogiri'

class AhcxTemplateHandler

  def self.call(template)
    erb = ActionView::Template.registered_template_handler(:erb)
    source = erb.call(template)
    source + ";AhcxTemplateHandler.render(@output_buffer.to_s)"
  end

  def self.node_content(node)
    tag = node.name
    params = {}
    node.attributes.values.each do |node_attribute|
      params[node_attribute.name] = node_attribute.value
    end
    node.children.each do |child_node|
      child_node_tag, child_node_attr = child_node.name.split(':')
      raw = child_node.attributes['raw']
      if raw || (child_node.children.length == 1 && child_node.children.first.name == 'text')
        params[child_node_attr] = child_node.children.to_s
      else
        attr_value = ''
        child_node.children.each do  |inside_node|
          attr_value += node_content(inside_node)
        end
        params[child_node_attr] = attr_value
      end
    end
    Ahc.render(tag, params)
  end

  def self.render(xml)
    ahcx_source = "<document>#{xml}</document>"
    ahcx = Nokogiri.parse(ahcx_source)
    content = ''
    ahcx.children.first.children.each do |node|
      content += node_content(node)
    end
    content
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ahc-0.2.2 lib/ahcx_template_handler.rb
ahc-0.2.1 lib/ahcx_template_handler.rb