Class: Caracal::Document

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Core::Text

included

Methods included from Core::Tables

included

Methods included from Core::Rules

included

Methods included from Core::PageBreaks

included

Methods included from Core::Lists

included

Methods included from Core::Images

included

Methods included from Core::ListStyles

included

Methods included from Core::Styles

included

Methods included from Core::PageNumbers

included

Methods included from Core::PageSettings

included

Methods included from Core::Fonts

included

Methods included from Core::Relationships

included

Methods included from Core::FileName

included

Constructor Details

#initialize(name = nil, &block) ⇒ Document

This method instantiates a new word document.



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/caracal/document.rb', line 91

def initialize(name = nil, &block)
  file_name(name)
  
  page_size 
  page_margins top: 1440, bottom: 1440, left: 1440, right: 1440
  page_numbers
  
  [:relationship, :font, :style, :list_style].each do |method|
    collection = self.class.send("default_#{ method }s")
    collection.each do |item|
      send(method, item)
    end
  end
        
  if block_given?
    (block.arity < 1) ? instance_eval(&block) : block[self]
  end
end

Class Method Details

.render(f_name = nil, &block) ⇒ Object

This method renders a new Word document and returns it as a a string.



65
66
67
68
69
70
71
# File 'lib/caracal/document.rb', line 65

def self.render(f_name = nil, &block)
  docx   = new(f_name, &block)
  buffer = docx.render
  
  buffer.rewind
  buffer.sysread
end

.save(f_name = nil, &block) ⇒ Object

This method renders a new Word document and saves it to the file system.



76
77
78
79
80
81
# File 'lib/caracal/document.rb', line 76

def self.save(f_name = nil, &block)
  docx   = new(f_name, &block)
  buffer = docx.render
  
  File.open("./#{ docx.name }", 'w') { |f| f.write(buffer.string) }
end

Instance Method Details

#contentsObject

This method returns an array of models which constitute the set of instructions for producing the document content.



116
117
118
# File 'lib/caracal/document.rb', line 116

def contents
  @contents ||= []
end

#renderObject

This method renders the word document instance into a string buffer. Order is important!



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/caracal/document.rb', line 126

def render
  buffer = ::Zip::OutputStream.write_buffer do |zip|
    render_package_relationships(zip)
    render_content_types(zip)
    render_app(zip)
    render_core(zip)
    render_fonts(zip)
    render_footer(zip)
    render_settings(zip)
    render_styles(zip)
    render_document(zip)
    render_relationships(zip)   # Must go here: Depends on document renderer
    render_media(zip)           # Must go here: Depends on document renderer
    render_numbering(zip)       # Must go here: Depends on document renderer
  end
end