Class: Uniword::Builder::SectionBuilder

Inherits:
BaseBuilder show all
Defined in:
lib/uniword/builder/section_builder.rb

Overview

Builds and configures SectionProperties objects.

Examples:

Configure page setup

doc.section do |s|
  s.page_size(width: 12240, height: 15840)
  s.margins(top: 1440, bottom: 1440, left: 1440, right: 1440)
end

Configure section with page numbering

doc.section(type: 'nextPage') do |s|
  s.page_size(orientation: 'landscape')
  s.page_numbering(start: 1, format: 'lowerRoman')
  s.margins(top: 720, bottom: 720)
end

Instance Attribute Summary

Attributes inherited from BaseBuilder

#model

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BaseBuilder

#build, from_model, #initialize

Constructor Details

This class inherits a constructor from Uniword::Builder::BaseBuilder

Class Method Details

.default_model_classObject



20
21
22
# File 'lib/uniword/builder/section_builder.rb', line 20

def self.default_model_class
  Wordprocessingml::SectionProperties
end

Instance Method Details

#columns(count: 1, spacing: 720) ⇒ self

Set number of columns

Parameters:

  • count (Integer) (defaults to: 1)

    Number of columns

  • spacing (Integer) (defaults to: 720)

    Space between columns in twips

Returns:

  • (self)


71
72
73
74
75
76
# File 'lib/uniword/builder/section_builder.rb', line 71

def columns(count: 1, spacing: 720)
  @model.columns ||= Wordprocessingml::Columns.new
  @model.columns.num = count
  @model.columns.space = spacing
  self
end

Configure a footer for this section

Parameters:

  • type (String) (defaults to: "default")

    Footer type (‘default’, ‘first’, ‘even’)

Yields:

Returns:



130
131
132
133
134
135
136
137
138
139
# File 'lib/uniword/builder/section_builder.rb', line 130

def footer(type: "default", &block)
  hf = HeaderFooterBuilder.new(:footer, type: type)
  yield(hf) if block

  ref = Wordprocessingml::FooterReference.new(
    type: type, r_id: "rIdFtr#{type}",
  )
  @model.footer_references << ref
  hf
end

#header(type: "default") {|HeaderFooterBuilder| ... } ⇒ HeaderFooterBuilder

Configure a header for this section

Parameters:

  • type (String) (defaults to: "default")

    Header type (‘default’, ‘first’, ‘even’)

Yields:

Returns:



114
115
116
117
118
119
120
121
122
123
# File 'lib/uniword/builder/section_builder.rb', line 114

def header(type: "default", &block)
  hf = HeaderFooterBuilder.new(:header, type: type)
  yield(hf) if block

  ref = Wordprocessingml::HeaderReference.new(
    type: type, r_id: "rIdHdr#{type}",
  )
  @model.header_references << ref
  hf
end

#line_numbering(count_by: 1, start: 1, restart: "continuous") ⇒ self

Set line numbering

Parameters:

  • count_by (Integer) (defaults to: 1)

    Line numbering interval

  • start (Integer) (defaults to: 1)

    Starting line number

  • restart (String) (defaults to: "continuous")

    Restart setting (‘continuous’, ‘newPage’, ‘newSection’)

Returns:

  • (self)


89
90
91
92
93
94
95
# File 'lib/uniword/builder/section_builder.rb', line 89

def line_numbering(count_by: 1, start: 1, restart: "continuous")
  @model.line_numbering ||= Wordprocessingml::LineNumbering.new
  @model.line_numbering.count_by = count_by
  @model.line_numbering.start = start
  @model.line_numbering.restart = restart
  self
end

#margins(top: 1440, bottom: 1440, left: 1440, right: 1440, header: 720, footer: 720, gutter: 0) ⇒ self

Set page margins

Parameters:

  • top (Integer) (defaults to: 1440)

    Top margin in twips (default 1440 = 1 inch)

  • bottom (Integer) (defaults to: 1440)

    Bottom margin in twips

  • left (Integer) (defaults to: 1440)

    Left margin in twips

  • right (Integer) (defaults to: 1440)

    Right margin in twips

  • header (Integer) (defaults to: 720)

    Header distance from edge in twips

  • footer (Integer) (defaults to: 720)

    Footer distance from edge in twips

  • gutter (Integer) (defaults to: 0)

    Gutter margin in twips

Returns:

  • (self)


53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/uniword/builder/section_builder.rb', line 53

def margins(top: 1440, bottom: 1440, left: 1440, right: 1440,
            header: 720, footer: 720, gutter: 0)
  @model.page_margins ||= Wordprocessingml::PageMargins.new
  @model.page_margins.top = top
  @model.page_margins.bottom = bottom
  @model.page_margins.left = left
  @model.page_margins.right = right
  @model.page_margins.header = header
  @model.page_margins.footer = footer
  @model.page_margins.gutter = gutter
  self
end

#page_borders(**_options) ⇒ Object



78
79
80
81
# File 'lib/uniword/builder/section_builder.rb', line 78

def page_borders(**_options)
  @model.page_borders ||= Wordprocessingml::PageBorders.new
  self
end

#page_numbering(start: nil, format: nil) ⇒ self

Set page numbering for this section

Parameters:

  • start (Integer, nil) (defaults to: nil)

    Starting page number

  • format (String, nil) (defaults to: nil)

    Number format (‘decimal’, ‘lowerRoman’, ‘upperRoman’)

Returns:

  • (self)


102
103
104
105
106
107
# File 'lib/uniword/builder/section_builder.rb', line 102

def page_numbering(start: nil, format: nil)
  @model.page_numbering ||= Wordprocessingml::PageNumbering.new
  @model.page_numbering.start = start if start
  @model.page_numbering.format = format if format
  self
end

#page_size(width: 12_240, height: 15_840, orientation: "portrait") ⇒ self

Set page size

Parameters:

  • width (Integer) (defaults to: 12_240)

    Page width in twips (default US Letter: 12240)

  • height (Integer) (defaults to: 15_840)

    Page height in twips (default US Letter: 15840)

  • orientation (String) (defaults to: "portrait")

    ‘portrait’ or ‘landscape’

Returns:

  • (self)


35
36
37
38
39
40
41
# File 'lib/uniword/builder/section_builder.rb', line 35

def page_size(width: 12_240, height: 15_840, orientation: "portrait")
  @model.page_size ||= Wordprocessingml::PageSize.new
  @model.page_size.width = width
  @model.page_size.height = height
  @model.page_size.orientation = orientation
  self
end

#type=(value) ⇒ Object



24
25
26
27
# File 'lib/uniword/builder/section_builder.rb', line 24

def type=(value)
  @model.type = value
  self
end