class Proforma::Modeling::DataTable
A table that understands how to be compiled against a data source.
Attributes
aggregators[W]
columns[W]
empty_message[W]
property[RW]
Public Class Methods
new( aggregators: [], columns: [], empty_message: '', property: nil )
click to toggle source
# File lib/proforma/modeling/data_table.rb, line 26 def initialize( aggregators: [], columns: [], empty_message: '', property: nil ) @aggregators = Aggregator.array(aggregators) @columns = Column.array(columns) @empty_message = empty_message @property = property end
Public Instance Methods
aggregators()
click to toggle source
# File lib/proforma/modeling/data_table.rb, line 42 def aggregators Array(@aggregators) end
columns()
click to toggle source
# File lib/proforma/modeling/data_table.rb, line 46 def columns Array(@columns) end
compile(data, evaluator)
click to toggle source
# File lib/proforma/modeling/data_table.rb, line 50 def compile(data, evaluator) records = array(evaluator.value(data, property)) return Text.new(value: empty_message) if show_empty_message?(records) meta_data = make_aggregator_meta_data(records, evaluator) Table.new( body: make_body(records, evaluator), footer: make_footer(meta_data, evaluator), header: make_header({}, evaluator) ) end
empty_message()
click to toggle source
# File lib/proforma/modeling/data_table.rb, line 38 def empty_message @empty_message.to_s end
Private Instance Methods
header?()
click to toggle source
# File lib/proforma/modeling/data_table.rb, line 74 def header? columns.select(&:header?).any? end
make(visible, row_compile_method, data, evaluator)
click to toggle source
# File lib/proforma/modeling/data_table.rb, line 90 def make(visible, row_compile_method, data, evaluator) return Table::Section.new unless visible rows = [ make_row(row_compile_method, data, evaluator) ] Table::Section.new(rows: rows) end
make_aggregator_meta_data(records, evaluator)
click to toggle source
# File lib/proforma/modeling/data_table.rb, line 66 def make_aggregator_meta_data(records, evaluator) Compiling::Aggregation.new(aggregators, evaluator).add(records).to_h end
make_body(records, evaluator)
click to toggle source
# File lib/proforma/modeling/data_table.rb, line 100 def make_body(records, evaluator) rows = records.map do |record| make_row(:compile_body_cell, record, evaluator) end Table::Section.new(rows: rows) end
make_header(data, evaluator)
click to toggle source
# File lib/proforma/modeling/data_table.rb, line 86 def make_header(data, evaluator) make(header?, :compile_header_cell, data, evaluator) end
make_row(method, record, evaluator)
click to toggle source
# File lib/proforma/modeling/data_table.rb, line 108 def make_row(method, record, evaluator) cells = columns.map do |column| column.send(method, record, evaluator) end Table::Row.new(cells: cells) end
show_empty_message?(records)
click to toggle source
# File lib/proforma/modeling/data_table.rb, line 78 def show_empty_message?(records) records.empty? && !empty_message.empty? end