Class: RubyXL::OOXMLTopLevelObject

Inherits:
OOXMLObject show all
Defined in:
lib/rubyXL/objects/ooxml_object.rb

Overview

Extension class providing functionality for top-level OOXML objects that are represented by their own .xml files in .xslx zip container.

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from OOXMLObject

#before_write_xml, define_attribute, define_child_node, define_element_name, #dup, #index_in_collection, #initialize, obtain_class_variable, parse, set_countable, #write_xml

Constructor Details

This class inherits a constructor from RubyXL::OOXMLObject

Class Method Details

.filepathObject

Prototype method. For top-level OOXML object, returns the path at which the current object’s XML file is located within the .xslx zip container.



320
321
322
# File 'lib/rubyXL/objects/ooxml_object.rb', line 320

def self.filepath
  raise 'Subclass responsebility'
end

.parse_file(dirpath) ⇒ Object

Generates the top-level OOXML object by parsing its XML file from the temporary directory containing the unzipped contents of .xslx

Parameters

  • dirpath - path to the directory with the unzipped .xslx contents.



338
339
340
341
342
# File 'lib/rubyXL/objects/ooxml_object.rb', line 338

def self.parse_file(dirpath)
  full_path = File.join(dirpath, filepath)
  return nil unless File.exist?(full_path)
  parse(File.open(full_path, 'r'))
end

.set_namespaces(namespace_hash) ⇒ Object

Sets the list of namespaces on this object to be added when writing out XML. Valid only on top-level objects.

Parameters

  • namespace_hash - Hash of namespaces in the form of "prefix" => "url"

Examples

set_namespaces('xmlns'   => 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
               'xmlns:r' => 'http://schemas.openxmlformats.org/officeDocument/2006/relationships')


330
331
332
# File 'lib/rubyXL/objects/ooxml_object.rb', line 330

def self.set_namespaces(namespace_hash)
  self.class_variable_set(:@@ooxml_namespaces, namespace_hash)
end

Instance Method Details

#add_to_zip(zipfile) ⇒ Object

Saves the contents of the object as XML to respective location in .xslx zip container.

Parameters

  • zipfile - ::Zip::File to which the resulting XNMML should be added.



347
348
349
350
351
# File 'lib/rubyXL/objects/ooxml_object.rb', line 347

def add_to_zip(zipfile)
  xml_string = write_xml
  return if xml_string.empty?
  zipfile.get_output_stream(self.class.filepath) { |f| f << xml_string }
end