Class: RubyXL::SharedStringsTable

Inherits:
OOXMLTopLevelObject show all
Defined in:
lib/rubyXL/objects/shared_strings.rb

Overview

Constant Summary collapse

CONTENT_TYPE =
'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml'.freeze
REL_TYPE =
'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings'.freeze

Constants inherited from OOXMLTopLevelObject

OOXMLTopLevelObject::ROOT, OOXMLTopLevelObject::SAVE_ORDER

Instance Attribute Summary

Attributes inherited from OOXMLTopLevelObject

#root

Attributes included from OOXMLObjectInstanceMethods

#local_namespaces

Instance Method Summary collapse

Methods inherited from OOXMLTopLevelObject

#add_to_zip, #file_index, parse_file, set_namespaces

Methods included from OOXMLObjectInstanceMethods

#==, included, #index_in_collection, #write_xml

Constructor Details

#initialize(*params) ⇒ SharedStringsTable

Returns a new instance of SharedStringsTable.



19
20
21
22
23
24
25
# File 'lib/rubyXL/objects/shared_strings.rb', line 19

def initialize(*params)
  super
  # So far, going by the structure that the original creator had in mind. However,
  # since the actual implementation is now extracted into a separate class,
  # we will be able to transparently change it later if needs be.
  @index_by_content = {}
end

Instance Method Details

#[](index) ⇒ Object



33
34
35
# File 'lib/rubyXL/objects/shared_strings.rb', line 33

def [](index)
  strings[index]
end

#add(v, index = nil) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/rubyXL/objects/shared_strings.rb', line 41

def add(v, index = nil)
  index ||= strings.size

  strings[index] =
    case v
    when RubyXL::RichText then v
    when String then RubyXL::RichText.new(:t => RubyXL::Text.new(:value => v))
    when RubyXL::Text               then RubyXL::RichText.new(:t => v)
    when RubyXL::RichTextRun        then RubyXL::RichText.new(:r => [ v ])
    when RubyXL::PhoneticRun        then RubyXL::RichText.new(:r_ph => [ v ])
    when RubyXL::PhoneticProperties then RubyXL::RichText.new(:phonetic_pr => v)
    end

  @index_by_content[v.to_s] = index
end

#before_write_xmlObject



27
28
29
30
31
# File 'lib/rubyXL/objects/shared_strings.rb', line 27

def before_write_xml
  super
  self.unique_count = self.count
  self.count > 0
end

#empty?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/rubyXL/objects/shared_strings.rb', line 37

def empty?
  strings.empty?
end

#get_index(str, add_if_missing = false) ⇒ Object



57
58
59
60
61
# File 'lib/rubyXL/objects/shared_strings.rb', line 57

def get_index(str, add_if_missing = false)
  index = @index_by_content[str]
  index = add(str) if index.nil? && add_if_missing
  index
end

#xlsx_pathObject



63
64
65
# File 'lib/rubyXL/objects/shared_strings.rb', line 63

def xlsx_path
  ROOT.join('xl', 'sharedStrings.xml')
end