class TableStructure::Table

Constants

DEFAULT_ROW_BUILDERS

Public Class Methods

new(schema, row_type: :array) { |self| ... } click to toggle source
# File lib/table_structure/table.rb, line 13
def initialize(schema, row_type: :array)
  @header_row_generator = schema.create_header_row_generator
  @data_row_generator = schema.create_data_row_generator

  row_builders =
    DEFAULT_ROW_BUILDERS
    .merge(schema.row_builders)
    .select { |_k, v| v.typed?(row_type) }
    .values

  unless row_builders.empty?
    row_build_task = proc do |row|
      row.values = row_builders.reduce(row.values) do |values, builder|
        builder.call(values, row.keys, row.context, schema.context)
      end
      row
    end
    @header_row_generator.compose(row_build_task)
    @data_row_generator.compose(row_build_task)
  end

  yield self if block_given?
end

Public Instance Methods

body(contexts) click to toggle source
# File lib/table_structure/table.rb, line 41
def body(contexts)
  ::Enumerator.new do |y|
    contexts.each { |context| y << @data_row_generator.call(context).values }
  end
end
header(context: nil) click to toggle source
# File lib/table_structure/table.rb, line 37
def header(context: nil)
  @header_row_generator.call(context).values
end