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