Sha256: 22613f1e2fceee53e531037915b4791bece303d3d8d03ad59ec915d90104a9a7

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

require 'nokogiri'

class AhcxTemplateHandler

  def self.call(template)
    erb = ActionView::Template.registered_template_handler(:erb)
    source = erb.call(template)
    ahcx_source = "<document>#{eval(source)}</document>"
    ahcx = Nokogiri.parse(ahcx_source)
    content = ''
    ahcx.children.first.children.each do |node|
      content += node_content(node)
    end
    content.inspect
  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

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ahc-0.2.0 lib/ahcx_template_handler.rb