Class: Engine2::ListMeta
- Includes:
- MetaListSupport, MetaQuerySupport
- Defined in:
- lib/engine2/meta/list_meta.rb
Direct Known Subclasses
Instance Attribute Summary
Attributes included from MetaListSupport
Attributes inherited from Meta
#action, #assets, #invokable, #static
Instance Method Summary collapse
- #invoke(handler) ⇒ Object
- #list_context(query, handler) ⇒ Object
- #list_search(query, handler, search) ⇒ Object
- #post_run ⇒ Object
Methods included from MetaListSupport
#filter, #order, #post_process, #pre_run, #search_live, #search_template, #searchable, #searchable_tabs, #select_toggle_menu, #sortable, #template
Methods included from MetaModelSupport
#action_defined, #get_type_info, #hide_pk, #pre_run, #show_pk, #unsupported_association
Methods included from MetaAPISupport
#config, #decorate, #field_filter, #hide_fields, #info, #info!, #loc!, #reload_routes!, #render, #show_fields
Methods included from MetaTabSupport
#field_tabs, #lazy_tab, #select_tabs
Methods included from MetaPanelSupport
#footer, #modal_action, #panel, #panel_class, #panel_panel_template, #panel_template, #panel_title, #pre_run
Methods included from MetaMenuSupport
Methods included from MetaOnChangeSupport
Methods included from MetaQuerySupport
Methods inherited from Meta
#action_defined, #check_static_meta, #dynamic?, #freeze_meta, #get, http_method, #http_method, inherited, #initialize, #invoke!, #lookup, #merge, #meta_type, meta_type, #post_process, #pre_run, #request, #request_meta_proc_params, #response, #split_keys
Constructor Details
This class inherits a constructor from Engine2::Meta
Instance Method Details
#invoke(handler) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/engine2/meta/list_meta.rb', line 75 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) end count = query.count if lookup(:config, :use_count) if order_str = params[:order] order = order_str.to_sym handler.permit lookup(:info, order, :sort) if order_blk = (@orders && @orders[order]) || (dynamic? && (static.orders && static.orders[order])) query = order_blk.(query, handler) else order = order.qualify(model.table_name) if model.type_info[order] query = query.order(order) end query = query.reverse if params[:asc] == "true" end per_page = lookup(:config, :per_page) page = params[:page].to_i handler.permit page >= 0 && page < 1000 query = query.limit(per_page, page) res = {entries: query.all} res[:count] = count if count res end |
#list_context(query, handler) ⇒ Object
134 135 136 |
# File 'lib/engine2/meta/list_meta.rb', line 134 def list_context query, handler query end |
#list_search(query, handler, search) ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/engine2/meta/list_meta.rb', line 111 def list_search query, handler, search hash = JSON.parse(search, symbolize_names: true) rescue handler.halt_forbidden model = assets[:model] sfields = lookup(:search_fields) handler.permit sfields hash.each_pair do |name, value| handler.permit sfields.include?(name) type_info = get_type_info(name) query = if filter = (@filters && @filters[name]) || (dynamic? && (static.filters && static.filters[name])) filter.(query, hash, handler) elsif filter = DefaultFilters[type_info[:otype]] name = model.type_info[name] ? name.qualify(model.table_name) : Sequel.expr(name) filter.(query, name, value, type_info, hash) else raise E2Error.new("Filter not found for field #{name} in model #{model}") unless filter end handler.permit query end query end |
#post_run ⇒ Object
70 71 72 73 |
# File 'lib/engine2/meta/list_meta.rb', line 70 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 |