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.

Constant Summary collapse

SAVE_ORDER =
500
ROOT =
::Pathname.new('/')

Instance Attribute Summary collapse

Attributes included from OOXMLObjectInstanceMethods

#local_namespaces

Class Method Summary collapse

Instance Method Summary collapse

Methods included from OOXMLObjectInstanceMethods

#==, #before_write_xml, included, #index_in_collection, #initialize, #write_xml

Instance Attribute Details

#rootObject

Returns the value of attribute root.



424
425
426
# File 'lib/rubyXL/objects/ooxml_object.rb', line 424

def root
  @root
end

Class Method Details

.parse_file(zip_file, file_path) ⇒ Object

Generates the top-level OOXML object by parsing its XML file from the contents of the .xslx container.

Parameters

  • zip_file - .xslx file as Zip::File object

  • file_path - path to the subject file inside the .xslx zip archive



446
447
448
449
450
# File 'lib/rubyXL/objects/ooxml_object.rb', line 446

def self.parse_file(zip_file, file_path)
  entry = zip_file.find_entry(RubyXL::from_root(file_path))
  # Accomodate for Nokogiri Java implementation which is incapable of reading from a stream
  entry && (entry.get_input_stream { |f| parse(defined?(JRUBY_VERSION) ? f.read : f) })
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 "url" => "prefix"

Examples

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


438
439
440
# File 'lib/rubyXL/objects/ooxml_object.rb', line 438

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

Instance Method Details

#add_to_zip(zip_stream) ⇒ 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.



455
456
457
458
459
460
461
# File 'lib/rubyXL/objects/ooxml_object.rb', line 455

def add_to_zip(zip_stream)
  xml_string = write_xml
  return false if xml_string.empty?
  zip_stream.put_next_entry(RubyXL::from_root(self.xlsx_path))
  zip_stream.write(xml_string)
  true
end

#file_indexObject



463
464
465
# File 'lib/rubyXL/objects/ooxml_object.rb', line 463

def file_index
  root.rels_hash[self.class].index{ |f| f.equal?(self) }.to_i + 1
end

#xlsx_pathObject

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



428
429
430
# File 'lib/rubyXL/objects/ooxml_object.rb', line 428

def xlsx_path
  raise 'Subclass responsebility'
end