Class: Filternator::ApplyFilter
- Inherits:
-
Object
- Object
- Filternator::ApplyFilter
- Extended by:
- Forwardable
- Defined in:
- lib/filternator/apply_filter.rb
Instance Attribute Summary collapse
-
#filterer ⇒ Object
readonly
Returns the value of attribute filterer.
-
#params ⇒ Object
readonly
Returns the value of attribute params.
Instance Method Summary collapse
- #as_json(*args) ⇒ Object
- #count ⇒ Object
- #filter ⇒ Object
- #filtered_scope ⇒ Object
-
#initialize(filterer, params) ⇒ ApplyFilter
constructor
A new instance of ApplyFilter.
- #paginated_scope ⇒ Object
- #pagination ⇒ Object
- #presenters ⇒ Object
- #valid_filter? ⇒ Boolean
Constructor Details
#initialize(filterer, params) ⇒ ApplyFilter
9 10 11 12 |
# File 'lib/filternator/apply_filter.rb', line 9 def initialize(filterer, params) @filterer = filterer @params = params end |
Instance Attribute Details
#filterer ⇒ Object (readonly)
Returns the value of attribute filterer.
7 8 9 |
# File 'lib/filternator/apply_filter.rb', line 7 def filterer @filterer end |
#params ⇒ Object (readonly)
Returns the value of attribute params.
7 8 9 |
# File 'lib/filternator/apply_filter.rb', line 7 def params @params end |
Instance Method Details
#as_json(*args) ⇒ Object
16 17 18 19 20 21 22 23 24 25 |
# File 'lib/filternator/apply_filter.rb', line 16 def as_json(*args) { scope_name => presenters.as_json(*args), :meta => { :filters => all_filters, :applied_filter => filter, :pagination => pagination.as_json, }, } end |
#count ⇒ Object
27 28 29 |
# File 'lib/filternator/apply_filter.rb', line 27 def count filtered_scope.count end |
#filter ⇒ Object
43 44 45 |
# File 'lib/filternator/apply_filter.rb', line 43 def filter params[:filter].presence || default_filter end |
#filtered_scope ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/filternator/apply_filter.rb', line 47 def filtered_scope if valid_filter? # ignore 'all' on relations if scope.is_a?(::ActiveRecord::Relation) && filter.to_s == "all" scope else scope.public_send(filter) end else scope end end |
#paginated_scope ⇒ Object
39 40 41 |
# File 'lib/filternator/apply_filter.rb', line 39 def paginated_scope filtered_scope.paginate(page: params[:page].presence, per_page: params[:per_page].presence) end |
#pagination ⇒ Object
35 36 37 |
# File 'lib/filternator/apply_filter.rb', line 35 def pagination Pagination.new(paginated_scope) end |
#presenters ⇒ Object
31 32 33 |
# File 'lib/filternator/apply_filter.rb', line 31 def presenters paginated_scope.map(&presenter) end |
#valid_filter? ⇒ Boolean
60 61 62 |
# File 'lib/filternator/apply_filter.rb', line 60 def valid_filter? filter.present? && all_filters.include?(filter) end |