forked from rubygarage/boilerplate
-
Notifications
You must be signed in to change notification settings - Fork 1
Nested operation Filtering
Vladislav Trotsenko edited this page Oct 21, 2020
·
1 revision
Provides JSON API filtering with all_filters as default matcher.
HTTP request example: GET /users?filter[email-eq]=user@email.com&filter[name-cont]=son&match=any_filters
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