Skip to content

Nested operation Filtering

Vladislav Trotsenko edited this page Sep 30, 2019 · 5 revisions

Synopsis

Provides JSON API filtering with all_filters as default matcher.

HTTP request example: GET /users?filter[email-eq][email protected]&filter[name-cont]=son&match=any_filters

Code

Before using this nested operation you should set ctx[:available_columns] with ColumnsBuilder:

module Api::V1::Lib::Operation
  class Filtering < ApplicationOperation
    step :filter_params_passed?, Output(:failure) => End(:success)
    step Macro::Contract::Schema(Api::V1::Lib::Contract::FilteringPreValidation, name: :uri_query)
    step Contract::Validate(name: :uri_query)
    step :matcher_options # if match param empty ctx[:matcher_options] = 'all_filters'
    step :set_validation_dependencies
    step Macro::Contract::Schema(
      Api::V1::Lib::Contract::FilteringValidation,
      inject: %i[available_filtering_columns column_type_dict],
      name: :uri_query
    )
    step Contract::Validate(name: :uri_query), id: :filtering_validation
    step :filter_options
  end
end

Used nested & macroses

Dependent from

Clone this wiki locally