class TableFor::Base

Attributes

current_index[RW]
current_record[RW]
current_row[RW]
current_row_index[RW]

Public Class Methods

new(view, options={}) click to toggle source
Calls superclass method
# File lib/table_for/base.rb, line 15
def initialize(view, options={})
  super(view, TableFor.config.merge(options))
end

Public Instance Methods

cell_content(record, column, options={}) click to toggle source
# File lib/table_for/base.rb, line 85
def cell_content(record, column, options={})
  if options[:formatter]
    if options[:formatter].is_a?(Proc)
      call_with_params(options[:formatter], record.send(column.name), options)
    else
      record.send(column.name).try(*options[:formatter])
    end
  elsif options[:data] || [:edit, :show, :delete].include?(column.name)
    call_with_params(options[:data], record)
  else
    record.send(column.name)
  end
end
column(*args, &block) click to toggle source
# File lib/table_for/base.rb, line 27
def column(*args, &block)
  options = args.extract_options!
  queue(*args, options, &block)
  if options[:link_url] ||
     options[:link_action] ||
     options[:link_method] ||
     options[:link_confirm] ||
     options[:link]
    around(columns.last.name) do |content_block, record, column, options|
      options = options.merge(column.options)
      url = if options[:link_url]
        call_with_params(options[:link_url], record)
      else
        [
          options[:link_action],
          options[:link_namespace] || global_options[:link_namespace],
          record
        ].flatten.compact
      end
      html_options = {data: {}}
      html_options[:data][:method] = options[:link_method] if options[:link_method].present?
      html_options[:data][:confirm] = options[:link_confirm] if options[:link_confirm].present?
      html_options = html_options.deep_merge(options[:link_html] || {})
      view.link_to content_block.call, url, html_options
    end
  end
  nil
end
header(name, options={}, &block) click to toggle source
# File lib/table_for/base.rb, line 19
def header(name, options={}, &block)
  define("#{name.to_s}_header", options.reverse_merge(:header => true), &block)
end
header_cell_content(column, options={}) click to toggle source
# File lib/table_for/base.rb, line 71
def header_cell_content(column, options={})
  unless options[:header] == false
    header_sort_link(column, options) do
      if options[:header]
        call_with_params options[:header], column
      elsif column.anonymous
        nil
      else
        I18n.t("#{translation_lookup_prefix}.#{column.name.to_s.underscore}", :default => column.name.to_s.titleize)
      end
    end
  end
end
header_column_html(column, options={}) click to toggle source
# File lib/table_for/base.rb, line 56
def header_column_html(column, options={})
  header_column_html = call_each_hash_value_with_params(options[:header_column_html], column)
  if options[:sortable]
    order = options[:order] ? options[:order].to_s : column.name.to_s

    sort_modes = options[:sort_modes].presence || TableFor.config.sort_modes
    current_sort_mode = (view.params[:order] != order || view.params[:sort_mode].blank?) ? nil : view.params[:sort_mode]
    current_sort_mode = sort_modes[sort_modes.index(current_sort_mode.to_sym)] rescue nil if current_sort_mode
    sort_class = "sorting#{"_#{current_sort_mode}" if current_sort_mode}"

    header_column_html[:class] = (header_column_html[:class] ? "#{header_column_html[:class]} #{sort_class}" : sort_class)
  end
  header_column_html
end
set_current_record_and_index(record, index) click to toggle source
# File lib/table_for/base.rb, line 99
def set_current_record_and_index(record, index)
  self.current_record = record
  self.current_index = index
end

Private Instance Methods

translation_lookup_prefix() click to toggle source
# File lib/table_for/base.rb, line 132
def translation_lookup_prefix
  if global_options[:records].respond_to?(:model)
    "activerecord.attributes.#{global_options[:records].model.to_s.underscore}"
  elsif global_options[:records].all? {|record| record.is_a?(ActiveRecord::Base) && record.class == global_options[:records].first.class }
    "activerecord.attributes.#{global_options[:records].first.class.to_s.underscore}"
  elsif global_options[:records].all? {|record| record.class == global_options[:records].first.class }
    "tables.columns.#{global_options[:records].first.class.to_s.underscore}"
  else
    "tables.columns"
  end
end