Class: Monosheet::OutputTable

Inherits:
Object
  • Object
show all
Defined in:
lib/monosheet/output_table.rb

Instance Method Summary collapse

Constructor Details

#initialize(data_source) ⇒ OutputTable

Returns a new instance of OutputTable.



6
7
8
9
10
# File 'lib/monosheet/output_table.rb', line 6

def initialize(data_source)
  @data_source = data_source
  @columns = []
  @row_divider_class = Class.new(Monosheet::OutputTableRowDivider)
end

Instance Method Details

#column(name) ⇒ Object



12
13
14
15
# File 'lib/monosheet/output_table.rb', line 12

def column(name)
  return unless @data_source.respond_to?(:size) && @data_source.size > 0
  @columns << name.to_sym
end

#renderObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/monosheet/output_table.rb', line 17

def render
  output_items = [@row_divider_class.new("=")]
  output_items << Monosheet::OutputTableHeaderRow.new(initialize_column_sizes_and_get_column_titles)
  output_items << @row_divider_class.new("=")

  @data_source.each do |data_item|
    @columns.each_with_index do |column_key, index|
      if data_item.send(column_key.to_sym).to_s.size > @row_divider_class.column_size[index]
        @row_divider_class.column_size[index] = data_item.send(column_key.to_sym).to_s.size
      end
    end

    data_item.extend Monosheet::ObjectRenderer
    data_item.set_columns_to_render @columns

    output_items << data_item
    output_items << @row_divider_class.new
  end

  output_items.map { |item| item.render @row_divider_class.column_size }.join("\n")
end