Class: Goldendocx::Parts::Documents
- Inherits:
-
Object
- Object
- Goldendocx::Parts::Documents
show all
- Includes:
- HasAssociations
- Defined in:
- lib/goldendocx/parts/documents.rb
Constant Summary
collapse
- XML_PATH =
'word/'
- RELATIONSHIPS_XML_PATH =
'word/_rels/document.xml.rels'
HasAssociations::Options
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
#read_associations, #read_relationships, #relationships, #write_relationships
Constructor Details
Returns a new instance of Documents.
33
34
35
36
37
38
39
40
41
42
|
# File 'lib/goldendocx/parts/documents.rb', line 33
def initialize
associations.each do |association, options|
association_class = options.class_name.constantize
instance_variable_set("@#{association}", association_class.new)
add_relationship association_class::TYPE, association_class::XML_PATH.gsub(XML_PATH, '') unless options.isolate
end
@medias = []
@media_amount = 0
end
|
Instance Attribute Details
#charts ⇒ Object
12
13
14
|
# File 'lib/goldendocx/parts/documents.rb', line 12
def charts
@charts
end
|
#document ⇒ Object
12
13
14
|
# File 'lib/goldendocx/parts/documents.rb', line 12
def document
@document
end
|
Entries amount in directory media/ for generating relationship id
16
17
18
|
# File 'lib/goldendocx/parts/documents.rb', line 16
def media_amount
@media_amount
end
|
12
13
14
|
# File 'lib/goldendocx/parts/documents.rb', line 12
def medias
@medias
end
|
Class Method Details
.read_from(docx_file) ⇒ Object
24
25
26
27
28
29
30
|
# File 'lib/goldendocx/parts/documents.rb', line 24
def read_from(docx_file)
parts = Goldendocx::Parts::Documents.new
parts.read_relationships(docx_file)
parts.read_associations(docx_file)
parts.media_amount = docx_file.entries.count { |entry| entry.name.start_with?('word/media/') }
parts
end
|
Instance Method Details
88
89
90
91
92
93
94
95
96
|
# File 'lib/goldendocx/parts/documents.rb', line 88
def add_image_media(image_data, _options = {})
extension = 'png'
@media_amount += 1
image_name = "image#{media_amount}.#{extension}"
Goldendocx::Parts::Media.new(image_name, image_data).tap do |media|
medias << media
end
end
|
#add_style(fragment) ⇒ Object
111
112
113
|
# File 'lib/goldendocx/parts/documents.rb', line 111
def add_style(fragment)
styles.add_style(fragment)
end
|
#create_chart(chart_type, width, height) ⇒ Object
98
99
100
101
102
103
104
105
106
107
108
109
|
# File 'lib/goldendocx/parts/documents.rb', line 98
def create_chart(chart_type, width, height)
document.body.ensure_chart_type(chart_type)
chart_id = document.body.charts.size + 1
relationship_id = add_relationship(
Goldendocx::Charts::RELATIONSHIP_TYPE,
format(Goldendocx::Charts::RELATIONSHIP_NAME_PATTERN, id: chart_id)
)
document.body.create_chart(chart_type, chart_id, relationship_id, width:, height:)
end
|
#create_embed_image(image_data, options = {}) ⇒ Object
81
82
83
84
85
86
|
# File 'lib/goldendocx/parts/documents.rb', line 81
def create_embed_image(image_data, options = {})
image_media = add_image_media(image_data, options)
relationship_id = add_relationship(image_media.type, image_media.target)
document.body.create_embed_image(relationship_id, options)
end
|
#create_image(image_data, options = {}) ⇒ Object
74
75
76
77
78
79
|
# File 'lib/goldendocx/parts/documents.rb', line 74
def create_image(image_data, options = {})
image_media = add_image_media(image_data, options)
relationship_id = add_relationship(image_media.type, image_media.target)
document.body.create_image(relationship_id, options)
end
|
#create_table(options = {}) ⇒ Object
65
66
67
68
69
70
71
72
|
# File 'lib/goldendocx/parts/documents.rb', line 65
def create_table(options = {})
table = document.body.create_table(options)
style = styles.find_table_style(options[:style])
table.style = style.id if style
table
end
|
#create_text(text, options = {}) ⇒ Object
56
57
58
59
60
61
62
63
|
# File 'lib/goldendocx/parts/documents.rb', line 56
def create_text(text, options = {})
paragraph = document.body.create_text(text, options)
style = styles.find_text_style(options[:style])
paragraph.style = style.id if style
paragraph
end
|
#write_stream(zos) ⇒ Object
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/goldendocx/parts/documents.rb', line 44
def write_stream(zos)
write_relationships(zos)
associations.each_key do |association|
send(association).write_to(zos)
end
document.write_to(zos)
medias.each { |media| media.write_to(zos) }
document.body.charts.each { |chart| chart.write_to(zos) }
end
|