class Engine2::ArrayListAction
Public Instance Methods
data_source(handler)
click to toggle source
# File lib/engine2/action/array.rb, line 42 def data_source handler [] end
invoke(handler)
click to toggle source
# File lib/engine2/action/array.rb, line 50 def invoke handler params = handler.params # if params[:initial] || params[:refresh] entries = data_source(handler) per_page = lookup(:config, :per_page) page = params[:page].to_i handler.permit page >= 0 && page < 1000 if order_str = params[:order] order = order_str.to_sym handler.permit lookup(:fields, order, :sort) entries = entries.sort_by{|e|e[order].to_s} entries = entries.reverse if params[:asc] == "true" end if search = params[:search] entries = list_search(entries, handler, search) end {entries: page_frame(handler, entries[page, per_page]), count: entries.size} end
list_search(entries, handler, search)
click to toggle source
# File lib/engine2/action/array.rb, line 73 def list_search entries, handler, search hash = JSON.parse(search, symbolize_names: true) rescue handler.halt_forbidden model = assets[:model] sfields = lookup(:search_field_list) handler.permit sfields hash.each_pair do |name, value| handler.permit sfields.include?(name) type_info = model.find_type_info(name) entries = if filter = (@filters && @filters[name]) || (dynamic? && (static.filters && static.filters[name])) filter.(handler, entries, hash) elsif filter = DefaultFilters[type_info[:otype]] filter.(entries, name, value, type_info, hash) else raise E2Error.new("Filter not found for field '#{name}' in model '#{model}'") unless filter end handler.permit entries end entries end
page_frame(handler, entries)
click to toggle source
# File lib/engine2/action/array.rb, line 46 def page_frame handler, entries entries end