module RubyXL::RelationshipSupport

RelationshipSupport module enables automatic loading and saving of _rels for the respective file

Attributes

generic_storage[RW]
relationship_container[RW]

Public Class Methods

included(klass) click to toggle source
# File lib/rubyXL/objects/relationships.rb, line 147
def self.included(klass)
  klass.class_variable_set(:@@ooxml_relationships, {})
  klass.extend RubyXL::RelationshipSupport::ClassMehods
end

Public Instance Methods

attach_relationship(rid, rf) click to toggle source
# File lib/rubyXL/objects/relationships.rb, line 187
def attach_relationship(rid, rf)
  relationships = self.class.class_variable_get(:@@ooxml_relationships)
  klass = rf.class
  if relationships.has_key?(klass) then
    accessor = relationships[klass]
    case accessor
    when NilClass then
      # Relationship is known, but we don't have a special accessor for it, store as generic
      store_relationship(rf)
    when false then
      # Do nothing, the code will perform attaching on its own
    else
      container = self.send(accessor)
      if container.is_a?(Array) then container << rf
      else self.send("#{accessor}=", rf)
      end
    end
  else store_relationship(rf, :unknown)
  end
end
load_relationships(dir_path, base_file_name) click to toggle source
# File lib/rubyXL/objects/relationships.rb, line 178
def load_relationships(dir_path, base_file_name)
  self.relationship_container = RubyXL::OOXMLRelationshipsFile.load_relationship_file(dir_path, base_file_name)
  return if relationship_container.nil?

  relationship_container.load_related_files(dir_path, base_file_name).each_pair { |rid, related_file|
    attach_relationship(rid, related_file) if related_file
  }
end
store_relationship(related_file, unknown = false) click to toggle source
# File lib/rubyXL/objects/relationships.rb, line 208
def store_relationship(related_file, unknown = false)
  self.generic_storage ||= []
  if unknown && !RubyXL.class_variable_get(:@@suppress_warnings) then
    puts "WARNING: #{self.class} is not aware how to process #{related_file.class}"
  end
  self.generic_storage << related_file
end