class Renderer

Public Class Methods

build_static_table(records, view, toptions={}, &block) click to toggle source
# File lib/tabulatr/renderer/renderer.rb, line 92
def self.build_static_table(records, view, toptions={}, &block)
  return '' unless records.present?
  klass = records.first.class
  new(klass, view, toptions).build_static_table(records, &block)
end
build_table(klass, view, toptions={}, columns, filters, tabulatr_data_class, &block) click to toggle source
# File lib/tabulatr/renderer/renderer.rb, line 98
def self.build_table(klass, view, toptions={}, columns, filters, tabulatr_data_class, &block)
  new(klass, view, toptions).build_table(columns, filters, tabulatr_data_class, &block)
end
new(klass, view, filter: Tabulatr.filter, search: Tabulatr.search, paginate: Tabulatr.paginate, pagesize: Tabulatr.pagesize, sortable: Tabulatr.sortable, batch_actions: Tabulatr.batch_actions, footer_content: Tabulatr.footer_content, path: Tabulatr.path, order_by: Tabulatr.order_by, html_class: Tabulatr.html_class, pagination_position: Tabulatr.pagination_position, counter_position: Tabulatr.counter_position, persistent: Tabulatr.persistent) click to toggle source
# File lib/tabulatr/renderer/renderer.rb, line 26
def initialize(klass, view,
    filter:              Tabulatr.filter,
    search:              Tabulatr.search,
    paginate:            Tabulatr.paginate,
    pagesize:            Tabulatr.pagesize,
    sortable:            Tabulatr.sortable,
    batch_actions:       Tabulatr.batch_actions,
    footer_content:      Tabulatr.footer_content,
    path:                Tabulatr.path,
    order_by:            Tabulatr.order_by,
    html_class:          Tabulatr.html_class,
    pagination_position: Tabulatr.pagination_position,
    counter_position:    Tabulatr.counter_position,
    persistent:          Tabulatr.persistent)
  @klass = klass
  @view = view
  @table_options = {
    filter: filter,
    search: search,
    paginate: paginate,
    pagesize: pagesize,
    sortable: sortable,
    batch_actions: batch_actions,
    footer_content: footer_content,
    path: path,
    order_by: order_by,
    html_class: 'table tabulatr_table '.concat(html_class),
    pagination_position: pagination_position,
    counter_position: counter_position,
    persistent: paginate ? persistent : false
  }
  @classname = @klass.name.underscore
end

Public Instance Methods

build_static_table(records, &block) click to toggle source
# File lib/tabulatr/renderer/renderer.rb, line 75
def build_static_table(records, &block)
  @columns = ColumnsFromBlock.process(@klass, &block).columns

  @view.render(partial: '/tabulatr/tabulatr_static_table', locals: {
    columns: @columns,
    table_options: @table_options,
    klass: @klass,
    classname: @classname,
    records: records
  })
end
build_table(columns, filters, tabulatr_data_class, &block) click to toggle source
# File lib/tabulatr/renderer/renderer.rb, line 60
def build_table(columns, filters, tabulatr_data_class, &block)
  tdc = get_data_class(tabulatr_data_class)
  set_columns_and_filters(tdc, columns, filters, &block)
  @view.render(partial: '/tabulatr/tabulatr_table', locals: {
    columns: @columns,
    table_options: @table_options,
    klass: @klass,
    classname: @classname,
    tabulatr_data: tdc,
    table_id: generate_id,
    formatted_name: Tabulatr::Utility.formatted_name(@klass.name),
    filter: tdc.filters || []
  })
end
columns_json(tabulatr_data_class_name=nil) click to toggle source
# File lib/tabulatr/renderer/renderer.rb, line 102
def columns_json(tabulatr_data_class_name=nil)
  get_data_class(tabulatr_data_class_name).table_columns.map(&:to_json)
end
generate_id() click to toggle source
# File lib/tabulatr/renderer/renderer.rb, line 87
def generate_id
  controller_path = @view.controller.class.name.underscore.gsub('/', '-')
  "#{Tabulatr::Utility.formatted_name(@klass.name)}_table_#{controller_path}_#{@view.controller.action_name}_#{@view.instance_variable_get(:@_tabulatr_table_index)}"
end

Private Instance Methods

get_data_class(name = '') click to toggle source
# File lib/tabulatr/renderer/renderer.rb, line 128
def get_data_class(name = '')
  if name.present?
    name.constantize.new(@klass)
  else
    "#{@klass.name}TabulatrData".constantize.new(@klass)
  end
end
get_requested_columns(available_columns, requested_columns) click to toggle source
# File lib/tabulatr/renderer/renderer.rb, line 108
def get_requested_columns(available_columns, requested_columns)
  main_table_name = @klass.table_name.to_sym
  requested_columns.collect do |r|
    if r.is_a?(Hash) && r.count == 1
      r = "#{r.keys.first}:#{r.values.first}"
    end
    result = available_columns.find{|column| column.full_name.to_sym == r.to_sym }
    result ||= available_columns.find{|column| column.name.to_sym == r.to_sym && column.table_name == main_table_name}
    result or raise "Can't find column '#{r}'"
  end.flatten
end
get_requested_filters(available_filters, requested_filters) click to toggle source
# File lib/tabulatr/renderer/renderer.rb, line 120
def get_requested_filters(available_filters, requested_filters)
  requested_filters.collect do |f|
    available_filters.find("Can't find filter '#{f}'") do |filter|
      filter.name.to_sym == f.to_sym
    end
  end.flatten
end
set_columns_and_filters(data_class, columns, filters, &block) click to toggle source
# File lib/tabulatr/renderer/renderer.rb, line 136
def set_columns_and_filters(data_class, columns, filters, &block)
  if block_given?
    @columns = ColumnsFromBlock.process(@klass, data_class, &block).columns
  elsif columns.any?
    @columns = get_requested_columns(data_class.table_columns, columns)
  else
    @columns = data_class.table_columns
  end
  if filters && filters.any?
    @filters = get_requested_filters(data_class.filters, filters)
  end
end