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::IFrames

included

Methods included from Core::Bookmarks

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::Namespaces

included

Methods included from Core::Ignorables

included

Methods included from Core::FileName

included

Methods included from Core::CustomProperties

included

Constructor Details

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

This method instantiates a new word document.



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/caracal/document.rb', line 103

def initialize(name = nil, &block)
  file_name(name)

  page_size
  page_margins top: 1440, bottom: 1440, left: 1440, right: 1440
  page_numbers

  [:font, :list_style, :namespace, :relationship, :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.



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

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.



87
88
89
90
91
92
93
# File 'lib/caracal/document.rb', line 87

def self.save(f_name = nil, &block)
  docx   = new(f_name, &block)
  docx.save
  # buffer = docx.render
  #
  # File.open(docx.path, 'wb') { |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.



128
129
130
# File 'lib/caracal/document.rb', line 128

def contents
  @contents ||= []
end

#renderObject

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



138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'lib/caracal/document.rb', line 138

def render
  buffer = ::Zip::OutputStream.write_buffer do |zip|
    render_package_relationships(zip)
    render_content_types(zip)
    render_app(zip)
    render_core(zip)
    render_custom(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

#saveObject

SAVING ==================================


159
160
161
162
163
# File 'lib/caracal/document.rb', line 159

def save
  buffer = render

  File.open(path, 'wb') { |f| f.write(buffer.string) }
end