Class: DocxManipulator::Relationships

Inherits:
Object
  • Object
show all
Defined in:
lib/docx_manipulator/relationships.rb

Instance Method Summary collapse

Constructor Details

#initialize(source) ⇒ Relationships

Returns a new instance of Relationships.



6
7
8
9
10
# File 'lib/docx_manipulator/relationships.rb', line 6

def initialize(source)
  @relationships = read_relationships(source)
  @images = []
  @binary_images = {}
end

Instance Method Details

#add_binary_image(id, name, data) ⇒ Object



26
27
28
29
30
# File 'lib/docx_manipulator/relationships.rb', line 26

def add_binary_image(id, name, data)
  name = I18n.transliterate(name)
  @binary_images[name] = data
  add_node(id, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', "media/#{name}")
end

#add_image(id, path) ⇒ Object



21
22
23
24
# File 'lib/docx_manipulator/relationships.rb', line 21

def add_image(id, path)
  @images << path
  add_node(id, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', "media/#{I18n.transliterate(File.basename(path))}")
end

#add_node(id, type, target, attributes = {}) ⇒ Object



32
33
34
35
36
37
38
39
40
41
# File 'lib/docx_manipulator/relationships.rb', line 32

def add_node(id, type, target, attributes = {})
  image_node = Nokogiri::XML::Node.new('Relationship', @relationships)
  image_node['Id'] = id
  image_node['Type'] = type
  image_node['Target'] = target
  attributes.each do |key, value|
    image_node[key] = value
  end
  @relationships.root << image_node
end

#process(output) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/docx_manipulator/relationships.rb', line 47

def process(output)
  output.put_next_entry 'word/_rels/document.xml.rels'
  output.write @relationships.to_s

  @images.each do |path|
    output.put_next_entry "word/media/#{I18n.transliterate(File.basename(path))}"
    File.open(path) do |file|
      IO.copy_stream file, output
    end
  end

  @binary_images.each do |name, data|
    output.put_next_entry "word/media/#{I18n.transliterate(name)}"
    output.write data
  end
end

#writes_to_filesObject



43
44
45
# File 'lib/docx_manipulator/relationships.rb', line 43

def writes_to_files
  ['word/_rels/document.xml.rels']
end