Class: Uniword::Builder::ListBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/uniword/builder/list_builder.rb

Overview

Builds lists (bulleted or numbered) within a document.

Examples:

Create a bullet list

doc.list(type: :bullet) do |l|
  l.item('First item')
  l.item('Second item')
  l.item('Third item') { |p| p << Builder.text('bold', bold: true) }
end

Create a numbered list

doc.list(type: :decimal) do |l|
  l.item('Step 1')
  l.item('Step 2')
  l.item('Sub-step', level: 1)
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(document, type: :bullet) ⇒ ListBuilder

Returns a new instance of ListBuilder.



27
28
29
30
31
32
33
34
# File 'lib/uniword/builder/list_builder.rb', line 27

def initialize(document, type: :bullet)
  @document = document
  @type = type
  model = document.model
  model.numbering_configuration ||= Uniword::Wordprocessingml::NumberingConfiguration.new
  @num_id = model.numbering_configuration
    .create_numbering(type)
end

Instance Attribute Details

#num_idInteger (readonly)

Returns The numbering ID assigned to this list.

Returns:

  • (Integer)

    The numbering ID assigned to this list



22
23
24
# File 'lib/uniword/builder/list_builder.rb', line 22

def num_id
  @num_id
end

#typeSymbol (readonly)

Returns The list type (:bullet, :decimal, :roman, :letter).

Returns:

  • (Symbol)

    The list type (:bullet, :decimal, :roman, :letter)



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

def type
  @type
end

Instance Method Details

#item(text = nil, level: 0) {|ParagraphBuilder| ... } ⇒ ParagraphBuilder

Add an item to the list

Parameters:

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

    Optional text content

  • level (Integer) (defaults to: 0)

    Nesting level (0-based, default 0)

Yields:

Returns:



42
43
44
45
46
47
48
49
# File 'lib/uniword/builder/list_builder.rb', line 42

def item(text = nil, level: 0, &block)
  para = ParagraphBuilder.new
  para.numbering(@num_id, level)
  para << text if text
  yield(para) if block
  @document << para.build
  para
end