module ODFWriter::Nested

Nested: provide data to nestable items

Public Instance Methods

add_bookmark(name, options={}, &block) click to toggle source
# File lib/odf_writer/nested.rb, line 42
def add_bookmark(name, options={}, &block)
  options.merge!(:name => name)
  @bookmarks << Bookmark.new(options, &block)
end
add_column(name, options={}, &block)
Alias for: add_field
add_field(name, options={}, &block) click to toggle source
# File lib/odf_writer/nested.rb, line 31
def add_field(name, options={}, &block)
  options.merge!(:name => name)
  @fields << Field.new(options, &block)
end
Also aliased as: add_column
add_image(name, options={}, &block) click to toggle source
# File lib/odf_writer/nested.rb, line 47
def add_image(name, options={}, &block)
  options.merge!(:name => name)
  @images << Image.new(options, &block)
end
add_section(name, options={}) { |sec| ... } click to toggle source
# File lib/odf_writer/nested.rb, line 59
def add_section(name, options={})
  options.merge!(:name => name)
  sec = Section.new(options)
  @sections << sec
  yield(sec)
end
add_table(name, options={}) { |tab| ... } click to toggle source
# File lib/odf_writer/nested.rb, line 52
def add_table(name, options={})
  options.merge!(:name => name)
  tab = Table.new(options)
  @tables << tab
  yield(tab)
end
add_text(name, options={}, &block) click to toggle source
# File lib/odf_writer/nested.rb, line 37
def add_text(name, options={}, &block)
  options.merge!(:name => name)
  @texts << Text.new(options, &block)
end
items(item, field, procedure) click to toggle source

items: get item collection form item

# File lib/odf_writer/nested.rb, line 104
def items(item, field, procedure)

  ####################################################################################
  # call proc before other alternatives
  ####################################################################################
  return arrify(procedure.call(item, field)) if procedure
  
  ####################################################################################
  # item class dependend call
  ####################################################################################
  return arrify(hash_value(item, field)) if item.is_a?(Hash)
  
  ####################################################################################
  # field class dependend call
  ####################################################################################
  case field
    
  when String, Symbol
    if item.respond_to?(field.to_s.to_sym)
      arrify(item.send(field.to_s.to_sym))
      
    elsif item.respond_to?(field.downcase.to_sym)
      arrify(item.send(field.downcase.to_sym))
      
    else
      []
    end
  else
    []
  end #case
end
populate(tree, options={}) click to toggle source

populate

# File lib/odf_writer/nested.rb, line 69
def populate(tree, options={})
  
  tree.to_h.each do |key, names|
    case key
    when :fields
      names.each do |name|
        add_field(name, options)
      end #def
    when :texts
      names.each do |name|
        add_text(name, options)
      end #def
    when :bookmarks
      names.each do |name|
        add_bookmark(name, options)
      end #def
    when :images
      names.each do |name|
        add_image(name, options)
      end #def
    when :tables
      names.each do |name, table_tree|
        add_table(name, options){|table| table.populate(table_tree, options)}
      end #def
    when :sections
      names.each do |name, section_tree|
        add_section(name, options){|section| section.populate(section_tree, options)}
      end #def
    end #case
  end #each
end

Private Instance Methods

arrify(obj) click to toggle source
# File lib/odf_writer/nested.rb, line 148
def arrify(obj)
  return  obj      if obj.is_a?(Array)
  return [obj]     if obj.is_a?(Hash)
  return  obj.to_a if obj.respond_to?(:to_a)
  return [obj]
end
hash_value(hash, key) click to toggle source

private

# File lib/odf_writer/nested.rb, line 143
def hash_value(hash, key)
  hash[key.to_s]            || hash[key.to_sym] || 
  hash[key.to_s.underscore] || hash[key.to_s.underscore.to_sym]
end