Class: Engine2::ListMeta

Inherits:
Meta show all
Includes:
MetaListSupport, MetaQuerySupport
Defined in:
lib/engine2/meta/list_meta.rb

Direct Known Subclasses

ManyToOneListMeta, StarToManyListMeta

Instance Attribute Summary

Attributes included from MetaListSupport

#filters, #orders

Attributes inherited from Meta

#action, #assets, #invokable, #static

Instance Method Summary collapse

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

#menu, #post_process

Methods included from MetaOnChangeSupport

#on_change

Methods included from MetaQuerySupport

#get_query, #query, #select

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_runObject



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