class Engine2::ListAction

Public Instance Methods

invoke(handler) click to toggle source
# File lib/engine2/action/list.rb, line 96
def invoke handler
    params = handler.params
    model = assets[:model]
    query = list_context(get_query, handler)

    if search = params[:search]
        query = list_search(query, handler, search)
    elsif @filters || static.filters
        static.filters.to_h.merge(@filters.to_h).each do |name, filter|
            query = filter.(handler, query, {})
            handler.permit query
        end
    end

    count = query.count if lookup(:config, :use_count)

    if order = params[:order]
        order = order.to_sym
        handler.permit lookup(:fields, order, :sort)
        query = list_order(query, handler, order, params[:asc] == "true")
    elsif order = @default_order_field || static.default_order_field
        query = list_order(query, handler, order, true)
    end

    per_page = lookup(:config, :per_page)
    page = params[:page].to_i
    handler.permit page >= 0 && page < 1000000

    query = query.limit(per_page, page)

    res = {entries: page_frame(handler, query.load_all)}
    res[:count] = count if count
    res
end
list_context(query, handler) click to toggle source
# File lib/engine2/action/list.rb, line 190
def list_context query, handler
    query
end
list_order(query, handler, order, asc) click to toggle source
# File lib/engine2/action/list.rb, line 178
def list_order query, handler, order, asc
    model = assets[:model]
    query = if order_blk = (@orders && @orders[order]) || (dynamic? && (static.orders && static.orders[order]))
        order_blk.(handler, query)
    else
        order = model.table_name.q(order) if model.type_info[order]
        query.order(order)
    end

    asc ? query : query.reverse
end
page_frame(handler, entries) click to toggle source
# File lib/engine2/action/list.rb, line 92
def page_frame handler, entries
    entries
end
post_run() click to toggle source
Calls superclass method Engine2::Action#post_run
# File lib/engine2/action/list.rb, line 87
def post_run
    query select(*assets[:model].columns.reject{|col| assets[:model].type_info[col][:length].to_i > 20}.take(10)) unless @query
    super
end