class ActionTable::View

Attributes

rows[R]

Public Class Methods

new( columns:, records:, paginate: false, links: ActionTable.config.links, actions: ActionTable.config.actions ) click to toggle source
# File lib/action_table/view.rb, line 12
def initialize(
  columns:,
  records:,
  paginate: false,
  links: ActionTable.config.links,
  actions: ActionTable.config.actions
)
  @columns    = Array(columns).map(&:to_s)
  @rows       = records
  @paginate   = paginate
  @links      = Set.new(Array(links).map(&:to_s)).reject(&:empty?)
  @actions    = Array(actions).map(&:to_s)
end

Public Instance Methods

actions_header() click to toggle source

add header column padding for actions

# File lib/action_table/view.rb, line 31
def actions_header
  @actions_header ||= [''] * @actions.length
end
columns(record) click to toggle source
# File lib/action_table/view.rb, line 35
def columns(record)
  attribute_columns = @columns.map do |name|
    title = record.public_send(name)
    if title.present? && @links.include?(name)
      link_to(title, record_path(record))
    else
      title
    end
  end

  actions = t_actions.zip(@actions).map! do |data|
    title, name = data
    link_to(title, record_path(record, action: name))
  end

  attribute_columns + actions
end
controller() click to toggle source

This must be defined for record_path to work

# File lib/action_table/view.rb, line 62
def controller
  table_name
end
headers() click to toggle source
# File lib/action_table/view.rb, line 26
def headers
  @headers ||= @columns.map { |name| t_col(name) }
end
paginate?() click to toggle source
# File lib/action_table/view.rb, line 53
def paginate?
  @paginate
end
paginate_param_name() click to toggle source
# File lib/action_table/view.rb, line 57
def paginate_param_name
  "#{model_name}_page"
end
record_path(record, action: nil) click to toggle source

Contstruct path to record, i.e programs_path(record)

# File lib/action_table/view.rb, line 67
def record_path(record, action: nil)
  action = nil if action.to_s == 'show'
  path = [action, model_name, 'path'].compact.join('_')
  public_send(path, record)
end

Private Instance Methods

model_name() click to toggle source
# File lib/action_table/view.rb, line 97
def model_name
  table_name.singularize
end
model_name?()
Alias for: table_name?
t_action(name) click to toggle source
# File lib/action_table/view.rb, line 79
def t_action(name)
  name = name.to_s
  I18n.t("actions.#{name}", default: name.titleize)
end
t_actions() click to toggle source
# File lib/action_table/view.rb, line 75
def t_actions
  @actions.map { |name| t_action(name) }
end
t_col(col_name) click to toggle source
# File lib/action_table/view.rb, line 84
def t_col(col_name)
  if model_name?
    t_key = "activerecord.attributes.#{model_name}.#{col_name}"
    return I18n.t(t_key, default: col_name.titleize)
  end

  col_name.humanize.titleize
end
table_name() click to toggle source
# File lib/action_table/view.rb, line 93
def table_name
  rows.table_name
end
table_name?() click to toggle source
# File lib/action_table/view.rb, line 101
def table_name?
  rows.respond_to?(:table_name)
end
Also aliased as: model_name?