class Rsxml::Visitor::BuildRsxmlVisitor
Constants
- OPTS
The
:style
option specifies how theRsxml
is to be produced:xml style is with compact <tt>"prefix:local_part"</tt> Strings for QNames, and namespace declaration attributes :exploded style is with <tt>[local_part, prefix, uri]</tt> triples for QNames, and no namespace declaration attributes
Attributes
cursor_stack[R]
element_transformer[R]
opts[R]
sexp[R]
Public Class Methods
new(opts=nil, &element_transformer)
click to toggle source
# File lib/rsxml/visitor.rb, line 53 def initialize(opts=nil, &element_transformer) @opts = Util.check_opts(OPTS, opts) @cursor_stack = [] @element_transformer = element_transformer end
Public Instance Methods
compact_attr_names(attrs)
click to toggle source
# File lib/rsxml/visitor.rb, line 65 def compact_attr_names(attrs) Hash[attrs.map{|qname,value| [compact_qname(qname), value]}] end
compact_qname(qname)
click to toggle source
# File lib/rsxml/visitor.rb, line 59 def compact_qname(qname) local_part, prefix, uri = qname [prefix, local_part].map{|s| (!s || s.empty?) ? nil : s}.compact.join(":") end
element(context, element_name, attrs, ns_decls) { || ... }
click to toggle source
# File lib/rsxml/visitor.rb, line 69 def element(context, element_name, attrs, ns_decls) element_name, attrs = element_transformer.call(context, element_name, attrs) if element_transformer opts[:style] ||= :exploded if opts[:style] == :xml element_name = compact_qname(element_name) attrs = compact_attr_names(attrs) ns_attrs = Namespace.namespace_attributes(ns_decls) attrs = attrs.merge(ns_attrs) end el = [element_name, (attrs if attrs.size>0)].compact if !cursor_stack.last @sexp = el else cursor_stack.last << el end cursor_stack.push(el) begin yield ensure cursor_stack.pop end end
text(context, text)
click to toggle source
# File lib/rsxml/visitor.rb, line 97 def text(context, text) cursor_stack.last << text end