module ActiveScaffold::Actions::List

Public Class Methods

included(base) click to toggle source
# File lib/active_scaffold/actions/list.rb, line 3
def self.included(base)
  base.before_filter :list_authorized_filter, :only => :index
  base.helper_method :list_columns
end

Public Instance Methods

index() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 8
def index
  if params[:id] && !params[:id].is_a?(Array) && request.xhr?
    row
  else
    list
  end
end

Protected Instance Methods

action_update_respond_to_js() click to toggle source
Calls superclass method
# File lib/active_scaffold/actions/list.rb, line 153
def action_update_respond_to_js
  do_refresh_list unless @record.present?
  super
end
do_list() click to toggle source

The actual algorithm to prepare for the list view

# File lib/active_scaffold/actions/list.rb, line 89
def do_list
  set_includes_for_columns

  options = {:sorting => active_scaffold_config.list.user.sorting,
             :count_includes => active_scaffold_config.list.user.count_includes}
  paginate = (params[:format].nil?) ? (accepts? :html, :js) : %w(html js).include?(params[:format])
  options[:pagination] = active_scaffold_config.list.pagination if paginate
  if options[:pagination]
    options.merge!(
      :per_page => active_scaffold_config.list.user.per_page,
      :page => active_scaffold_config.list.user.page
    )
  end
  if active_scaffold_config.list.auto_select_columns
    auto_select_columns = list_columns + [active_scaffold_config.columns[active_scaffold_config.model.primary_key]]
    options[:select] = auto_select_columns.map { |c| quoted_select_columns(c.select_columns) }.compact.flatten
  end

  page = find_page(options)
  total_pages = page.pager.number_of_pages
  if !page.pager.infinite? && !total_pages.zero? && page.number > total_pages
    page = page.pager.last
    active_scaffold_config.list.user.page = page.number
  end
  @page, @records = page, page.items
end
do_refresh_list() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 120
def do_refresh_list
  params.delete(:id)
  do_search if respond_to? :do_search, true
  do_list
end
each_record_in_page() { |record| ... } click to toggle source
# File lib/active_scaffold/actions/list.rb, line 126
def each_record_in_page
  current_page = active_scaffold_config.list.user.page
  do_search if respond_to? :do_search, true
  active_scaffold_config.list.user.page = current_page
  do_list
  @page.items.each { |record| yield record }
end
each_record_in_scope() { |record| ... } click to toggle source
# File lib/active_scaffold/actions/list.rb, line 134
def each_record_in_scope
  scoped_query.each { |record| yield record }
end
get_row(crud_type_or_security_options = :read) click to toggle source
Calls superclass method
# File lib/active_scaffold/actions/list.rb, line 83
def get_row(crud_type_or_security_options = :read)
  set_includes_for_columns
  super
end
list() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 24
def list
  if %w(index list).include? action_name
    do_list
  else
    do_refresh_list
  end
  respond_to_action(:list)
end
list_authorized?() click to toggle source

The default security delegates to ActiveRecordPermissions. You may override the method to customize.

# File lib/active_scaffold/actions/list.rb, line 149
def list_authorized?
  authorized_for?(:crud_type => :read)
end
list_respond_to_html() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 33
def list_respond_to_html
  if loading_embedded?
    render :action => 'list', :layout => false
  else
    render :action => 'list'
  end
end
list_respond_to_js() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 41
def list_respond_to_js
  if params[:adapter] || loading_embedded?
    render(:partial => 'list_with_header')
  else
    @auto_pagination = params[:auto_pagination]
    render :partial => 'refresh_list', :formats => [:js]
  end
end
list_respond_to_json() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 54
def list_respond_to_json
  render :json => response_object, :only => list_columns_names + [active_scaffold_config.model.primary_key], :include => association_columns(list_columns_names), :methods => virtual_columns(list_columns_names), :status => response_status
end
list_respond_to_xml() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 50
def list_respond_to_xml
  render :xml => response_object, :only => list_columns_names + [active_scaffold_config.model.primary_key], :include => association_columns(list_columns_names), :methods => virtual_columns(list_columns_names), :status => response_status
end
objects_for_etag() click to toggle source
Calls superclass method
# File lib/active_scaffold/actions/list.rb, line 158
def objects_for_etag
  objects =
    if @list_columns
      if active_scaffold_config.list.calculate_etag
        @records.to_a
      elsif active_scaffold_config.list.user.sorting
        {:etag => active_scaffold_config.list.user.sorting.clause}
      end
    end
  objects.present? ? objects : super
end
quoted_select_columns(columns) click to toggle source
# File lib/active_scaffold/actions/list.rb, line 116
def quoted_select_columns(columns)
  columns.map { |c| active_scaffold_config.columns[c].try(:field) || c } if columns
end
row() click to toggle source

get just a single row

# File lib/active_scaffold/actions/list.rb, line 19
def row
  get_row
  respond_to_action(:row)
end
row_respond_to_html() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 58
def row_respond_to_html
  render(:partial => 'row', :locals => {:record => @record})
end
row_respond_to_js() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 62
def row_respond_to_js
  render :action => 'row'
end
scoped_query() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 138
def scoped_query
  @scoped_query ||= begin
    do_search if respond_to? :do_search, true
    set_includes_for_columns
    # where(nil) is needed because we need a relation
    append_to_query(beginning_of_chain.where(nil), finder_options)
  end
end
set_includes_for_columns(action = :list) click to toggle source

The actual algorithm to prepare for the list view

# File lib/active_scaffold/actions/list.rb, line 67
def set_includes_for_columns(action = :list)
  @cache_associations = true
  columns =
    if respond_to?(:"#{action}_columns", true)
      send(:"#{action}_columns")
    else
      active_scaffold_config.send(action).columns.collect_visible(:flatten => true)
    end
  sorting = active_scaffold_config.list.user.sorting
  columns_for_joins, columns_for_includes = columns.select { |c| c.includes.present? }.partition do |c|
    sorting.sorts_on?(c) || (c.plural_association? && c.association.macro == :has_and_belongs_to_many && c.association.respond_to?(:scope) && c.association.scope)
  end
  active_scaffold_preload.concat columns_for_includes.map(&:includes).flatten.uniq
  active_scaffold_references.concat columns_for_joins.map(&:includes).flatten.uniq
end

Private Instance Methods

action_confirmation_formats() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 189
def action_confirmation_formats
  (default_formats + active_scaffold_config.formats).uniq
end
action_update_formats() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 185
def action_update_formats
  (default_formats + active_scaffold_config.formats).uniq
end
index_formats()
Alias for: list_formats
list_authorized_filter() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 172
def list_authorized_filter
  raise ActiveScaffold::ActionNotAllowed unless list_authorized?
end
list_columns() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 193
def list_columns
  @list_columns ||= active_scaffold_config.list.columns.collect_visible
end
list_columns_names() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 197
def list_columns_names
  list_columns.collect(&:name)
end
list_formats() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 176
def list_formats
  (default_formats + active_scaffold_config.formats + active_scaffold_config.list.formats).uniq
end
Also aliased as: index_formats
row_formats() click to toggle source
# File lib/active_scaffold/actions/list.rb, line 181
def row_formats
  ([:html, :js] + active_scaffold_config.formats + active_scaffold_config.list.formats).uniq
end