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