Sha256: e445e691ed82e47705a64881352256e622641f8576cadcea9f936ca98d7656d2

Contents?: true

Size: 1.28 KB

Versions: 1

Compression:

Stored size: 1.28 KB

Contents

require 'nokogiri'
require 'htmlcompressor'

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(':')
      if child_node.children.length == 1 && child_node.children.first.name == 'text'
        params[child_node_attr] = child_node.children.text
      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
    html = Ahc.render(tag, params)
    html
  end

  def self.render(xml)
    ahcx_source = "<document>#{xml}</document>"
    ahcx = Nokogiri::XML.parse(ahcx_source)
    content = ''
    ahcx.children.first.children.each do |node|
      content += node_content(node)
    end
    compressor = HtmlCompressor::Compressor.new(:remove_intertag_spaces => true)
    compressor.compress(content)
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ahc-0.2.7 lib/ahcx_template_handler.rb