Module: FilterMe
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/filter_me.rb,
lib/filter_me/filter.rb,
lib/filter_me/version.rb,
lib/filter_me/filter/dsl.rb,
lib/filter_me/filterable.rb,
lib/filter_me/filter/field_validator.rb,
lib/filter_me/filter/arel_field_filter.rb
Defined Under Namespace
Modules: Filterable
Classes: ActiveRecordFilter, Filter, FiltersNotWhiteListedError
Constant Summary
collapse
- VERSION =
'0.1.0'
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.normalize_param(param) ⇒ Object
12
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/filter_me.rb', line 12
def normalize_param(param)
param.inject([]) do |filter, (k, v)|
case v
when Hash
filter.push([k, FilterMe.normalize_param(v)])
when Array
filter.push([k, v])
else
filter.push([k, [v]])
end
end
end
|
Instance Method Details
#build_filter(filter_class) ⇒ Object
50
51
52
|
# File 'lib/filter_me.rb', line 50
def build_filter(filter_class)
filter_class.new(filter_params, filter_configuration)
end
|
#filter_configuration ⇒ Object
46
47
48
|
# File 'lib/filter_me.rb', line 46
def filter_configuration
{}
end
|
#filter_me(relation, filter_class = nil) ⇒ Object
39
40
41
42
43
44
|
# File 'lib/filter_me.rb', line 39
def filter_me(relation, filter_class=nil)
klass = filter_class || ActiveRecordFilter.filter_for(relation)
filter = build_filter(klass)
filter.filter(relation)
end
|
#filter_params ⇒ Object
FilterMe default params example (Seems straight forward for Rails to parse):
{filters: {
username: {matches: "sam%", not_in_any: ["sam", "samsinite"]},
account: {type: {eq: "admin"}},
company: {job: {name: {matches: "%software%"}}}
}}
Instead of Django Tastypie’s style (original inspiration):
[{username__matches: "%sam%"}, {account__type__eq: "admin"}]
85
86
87
|
# File 'lib/filter_me.rb', line 85
def filter_params
FilterMe.normalize_param(params.fetch(:filters, {}))
end
|