Class: RubyXL::WorkbookRoot
- Inherits:
-
Object
- Object
- RubyXL::WorkbookRoot
- Includes:
- RelationshipSupport
- Defined in:
- lib/rubyXL/objects/root.rb
Constant Summary collapse
- @@debug =
$DEBUG
Instance Attribute Summary collapse
-
#content_types ⇒ Object
Returns the value of attribute content_types.
-
#rels_hash ⇒ Object
Returns the value of attribute rels_hash.
-
#source_file_path ⇒ Object
Returns the value of attribute source_file_path.
Attributes included from RelationshipSupport
#generic_storage, #relationship_container
Class Method Summary collapse
Instance Method Summary collapse
- #related_objects ⇒ Object
-
#stream ⇒ Object
Write
.xlsx
to a stream (useful for sending over HTTP). - #xlsx_path ⇒ Object
Methods included from RelationshipSupport
#attach_relationship, #collect_related_objects, included, #load_relationships, #store_relationship
Instance Attribute Details
#content_types ⇒ Object
Returns the value of attribute content_types.
11 12 13 |
# File 'lib/rubyXL/objects/root.rb', line 11 def content_types @content_types end |
#rels_hash ⇒ Object
Returns the value of attribute rels_hash.
11 12 13 |
# File 'lib/rubyXL/objects/root.rb', line 11 def rels_hash @rels_hash end |
#source_file_path ⇒ Object
Returns the value of attribute source_file_path.
11 12 13 |
# File 'lib/rubyXL/objects/root.rb', line 11 def source_file_path @source_file_path end |
Class Method Details
.default ⇒ Object
25 26 27 28 29 30 31 32 |
# File 'lib/rubyXL/objects/root.rb', line 25 def self.default obj = self.new obj.document_properties = RubyXL::DocumentPropertiesFile.new obj.core_properties = RubyXL::CorePropertiesFile.new obj.relationship_container = RubyXL::OOXMLRelationshipsFile.new obj.content_types = RubyXL::ContentTypes.new obj end |
.parse_zip_file(zip_file) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/rubyXL/objects/root.rb', line 62 def self.parse_zip_file(zip_file) root = self.new root.content_types = RubyXL::ContentTypes.parse_file(zip_file, ContentTypes::XLSX_PATH) root.load_relationships(zip_file, OOXMLTopLevelObject::ROOT) wb = root.workbook wb.root = root wb.sheets.each_with_index { |sheet, i| sheet_obj = wb.relationship_container.[sheet.r_id] wb.worksheets[i] = sheet_obj # Must be done first so the sheet becomes aware of its number sheet_obj.workbook = wb sheet_obj.sheet_name = sheet.name sheet_obj.sheet_id = sheet.sheet_id sheet_obj.state = sheet.state } root end |
Instance Method Details
#related_objects ⇒ Object
21 22 23 |
# File 'lib/rubyXL/objects/root.rb', line 21 def [ content_types, thumbnail, core_properties, document_properties, custom_properties, workbook ] end |
#stream ⇒ Object
Write .xlsx
to a stream (useful for sending over HTTP)
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/rubyXL/objects/root.rb', line 35 def stream stream = Zip::OutputStream.write_buffer { |zipstream| self.rels_hash = {} self.relationship_container.owner = self .compact.each { |obj| puts "<-- DEBUG: adding relationship to #{obj.class}" if @@debug obj.root = self if obj.respond_to?(:root=) self.rels_hash[obj.class] ||= [] self.rels_hash[obj.class] << obj } self.rels_hash.keys.sort_by{ |c| c::SAVE_ORDER }.each { |klass| puts "<-- DEBUG: saving related #{klass} files" if @@debug self.rels_hash[klass].select! { |obj| puts "<-- DEBUG: > #{obj.xlsx_path}" if @@debug obj.add_to_zip(zipstream) } } } stream.rewind stream end |
#xlsx_path ⇒ Object
58 59 60 |
# File 'lib/rubyXL/objects/root.rb', line 58 def xlsx_path OOXMLTopLevelObject::ROOT end |