Class: BMC::Filter
- Inherits:
-
Object
show all
- Includes:
- ActiveModel::Model
- Defined in:
- app/filters/bmc/filter.rb
Defined Under Namespace
Classes: ByDate, ByDateBegin, ByDateEnd, ByDateOrDatetimePeriod, ByDatePeriod, ByDatetimePeriod, ByKeyValue, ByKeyValues
Constant Summary
collapse
- STRATEGIES =
{}
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(values, options = {}) ⇒ Filter
Returns a new instance of Filter.
8
9
10
11
|
# File 'app/filters/bmc/filter.rb', line 8
def initialize(values, options = {})
@values = values.with_indifferent_access
@options = options
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method) ⇒ Object
29
30
31
32
33
34
35
|
# File 'app/filters/bmc/filter.rb', line 29
def method_missing(method, ...)
if strategies.key?(method)
values[method]
else
super
end
end
|
Instance Attribute Details
#options ⇒ Object
Returns the value of attribute options.
6
7
8
|
# File 'app/filters/bmc/filter.rb', line 6
def options
@options
end
|
#values ⇒ Object
Returns the value of attribute values.
6
7
8
|
# File 'app/filters/bmc/filter.rb', line 6
def values
@values
end
|
Instance Method Details
#actives_count ⇒ Object
41
42
43
|
# File 'app/filters/bmc/filter.rb', line 41
def actives_count
values.count { |k, v| strategies.key?(k) && v.present? }
end
|
#any? ⇒ Boolean
45
46
47
|
# File 'app/filters/bmc/filter.rb', line 45
def any?
actives_count.positive?
end
|
#call(query) ⇒ Object
17
18
19
20
21
22
23
24
25
26
27
|
# File 'app/filters/bmc/filter.rb', line 17
def call(query)
strategies.each do |key, strategy|
value = values[key]
next if value.blank?
query = strategy.call(query, value)
end
query
end
|
#empty? ⇒ Boolean
49
50
51
|
# File 'app/filters/bmc/filter.rb', line 49
def empty?
!any?
end
|
#respond_to_missing?(method, include_private = false) ⇒ Boolean
37
38
39
|
# File 'app/filters/bmc/filter.rb', line 37
def respond_to_missing?(method, include_private = false)
strategies.key?(method) || super
end
|
#strategies ⇒ Object
13
14
15
|
# File 'app/filters/bmc/filter.rb', line 13
def strategies
self.class::STRATEGIES.with_indifferent_access
end
|