class Docxtor2::Package::Document::Element

Public Class Methods

new(*args, &block) click to toggle source
Calls superclass method Docxtor2::ElementList::new
# File lib/docxtor2/package/document/element.rb, line 6
def initialize(*args, &block)
  @params = create_attributes(args)
  @block = block
  super()
end

Public Instance Methods

render(xml) click to toggle source
# File lib/docxtor2/package/document/element.rb, line 12
def render(xml)
  @xml = xml
  evaluate &@block
end

Protected Instance Methods

aliases() click to toggle source
# File lib/docxtor2/package/document/element.rb, line 23
def aliases
  {}
end
mappings() click to toggle source
# File lib/docxtor2/package/document/element.rb, line 19
def mappings
  {}
end
write_element(name, &block) click to toggle source
# File lib/docxtor2/package/document/element.rb, line 27
def write_element(name, &block)
  @xml.tag!("w:#{name}") do
    write_properties(name)
    evaluate &block
    write_elements(@xml)
  end
end
write_properties(el) click to toggle source
# File lib/docxtor2/package/document/element.rb, line 35
def write_properties(el)
  @properties = get_properties_for(el)
  unless @properties.nil?
    @xml.tag!("w:#{el}Pr") do
      @properties.each { |k, v| write_property(k, v) }
    end
  end
end
write_property(key, val) click to toggle source
# File lib/docxtor2/package/document/element.rb, line 44
def write_property(key, val)
  if self_closing? val
    @xml.tag!("w:#{key}")
  elsif !val.nil?
    if val.is_a?(Hash) && !val.empty?
      @xml.tag!("w:#{key}", prefixize(val))
    elsif !val.to_s.empty?
      @xml.tag!("w:#{key}", 'w:val' => val)
    end
  end
end

Private Instance Methods

create_attributes(args) click to toggle source
# File lib/docxtor2/package/document/element.rb, line 58
def create_attributes(args)
  hash = find_argument(args, Hash, {})
  pairs = hash.map do |k, v|
    aliases.key?(k) ? [aliases[k], v] : [k, v]
  end
  Hash[pairs]
end
get_properties_for(el) click to toggle source
# File lib/docxtor2/package/document/element.rb, line 70
def get_properties_for(el)
  map = mappings[el]
  unless map.nil?
    pairs = @params.
      reject { |k, v| !map.key?(k) }.
      map { |k, v|
        element = map[k]
        element.is_a?(Hash) ?
          [element[:name], v] :
          [element, v]
      }
    Hash[pairs]
  end
end
prefixize(attrs) click to toggle source
# File lib/docxtor2/package/document/element.rb, line 85
def prefixize(attrs)
  Hash[attrs.map { |k, v| ["w:#{k}", v] }]
end
self_closing?(val) click to toggle source
# File lib/docxtor2/package/document/element.rb, line 66
def self_closing?(val)
  !!val == val && val
end