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_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
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