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



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

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.



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

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.



85
86
87
88
89
90
# File 'lib/caracal/document.rb', line 85

def self.save(f_name = nil, &block)
  docx   = new(f_name, &block)
  buffer = docx.render

  File.open("./#{ docx.name }", '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.



125
126
127
# File 'lib/caracal/document.rb', line 125

def contents
  @contents ||= []
end

#renderObject

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



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

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