class Rbexy::Nodes::XmlNode

Attributes

children[R]
members[R]
name[R]

Public Class Methods

new(name, members, children) click to toggle source
# File lib/rbexy/nodes.rb, line 64
def initialize(name, members, children)
  @name = name
  @members = members || []
  @children = children
end

Public Instance Methods

compile() click to toggle source
# File lib/rbexy/nodes.rb, line 70
def compile
  base_tag = "rbexy_tag.#{Util.safe_tag_name(name)}(#{compile_members})"
  tag = if children.length > 0
    [
      "#{base_tag} { capture {",
        children.map(&:compile).map { |c| "@output_buffer << rbexy_prep_output(#{c})" }.join(";"),
      "} }"
    ].join
  else
    base_tag
  end + ".html_safe"

  if Rbexy.configuration.enable_context
    [
      "(",
        "rbexy_context.push({});",
        "#{tag}.tap { rbexy_context.pop }",
      ")"
    ].join
  else
    tag
  end
end
compile_members() click to toggle source
# File lib/rbexy/nodes.rb, line 94
def compile_members
  members.each_with_object("") do |member, result|
    case member
    when ExpressionGroup
      result << "**#{member.compile},"
    when SilentNewline
      result << member.compile
    else
      result << "#{member.compile},"
    end
  end
end