Module: Plutonium::Resource::Controllers::Queryable

Extended by:
ActiveSupport::Concern
Included in:
Plutonium::Resource::Controller
Defined in:
lib/plutonium/resource/controllers/queryable.rb

Instance Method Summary collapse

Instance Method Details

#current_query_objectObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/plutonium/resource/controllers/queryable.rb', line 11

def current_query_object
  @current_query_object ||=
    Plutonium::Resource::QueryObject.new(resource_class, raw_resource_query_params, request.path) do |query_object|
      if current_definition.search_definition
        query_object.define_search proc { |scope, search:|
          current_definition.search_definition.call(scope, search)
        }
      end

      current_definition.defined_scopes.each do |key, value|
        query_object.define_scope key, value[:block], **value[:options]
      end

      current_definition.defined_sorts.each do |key, value|
        query_object.define_sorter key, value[:block], **value[:options]
      end

      if current_definition.respond_to?(:default_sort) && current_definition.default_sort
        query_object.default_sort_config = current_definition.default_sort
      end

      current_definition.defined_filters.each do |key, value|
        with = value[:options][:with]
        if with.is_a?(Class) && with < Plutonium::Query::Filter
          options = value[:options].except(:with)
          options[:key] ||= key
          with = with.new(**options)
        end
        query_object.define_filter key, with, &value[:block]
      end

      query_object
    end
end

#raw_resource_query_paramsObject



46
47
48
49
50
51
52
53
54
55
# File 'lib/plutonium/resource/controllers/queryable.rb', line 46

def raw_resource_query_params
  @raw_resource_query_params ||= begin
    query_params = params[:q]
    if query_params.is_a?(ActionController::Parameters)
      query_params.to_unsafe_h
    else
      {}.with_indifferent_access
    end
  end
end