Class: Filterer::Base
- Inherits:
-
Object
- Object
- Filterer::Base
- Defined in:
- lib/filterer/base.rb
Constant Summary collapse
- IGNORED_PARAMS =
[:page]
Instance Attribute Summary collapse
-
#direction ⇒ Object
Returns the value of attribute direction.
-
#meta ⇒ Object
Returns the value of attribute meta.
-
#params ⇒ Object
Returns the value of attribute params.
-
#results ⇒ Object
Returns the value of attribute results.
-
#sort ⇒ Object
Returns the value of attribute sort.
Class Method Summary collapse
Instance Method Summary collapse
- #add_params_to_query ⇒ Object
- #find_results ⇒ Object
-
#initialize(params = {}, opts = {}) ⇒ Base
constructor
A new instance of Base.
- #order_results ⇒ Object
- #paginator ⇒ Object
- #setup_meta ⇒ Object
- #starting_query ⇒ Object
Constructor Details
#initialize(params = {}, opts = {}) ⇒ Base
Returns a new instance of Base.
8 9 10 11 12 |
# File 'lib/filterer/base.rb', line 8 def initialize(params = {}, opts = {}) @params, @opts = params, opts find_results end |
Instance Attribute Details
#direction ⇒ Object
Returns the value of attribute direction.
4 5 6 |
# File 'lib/filterer/base.rb', line 4 def direction @direction end |
#meta ⇒ Object
Returns the value of attribute meta.
4 5 6 |
# File 'lib/filterer/base.rb', line 4 def @meta end |
#params ⇒ Object
Returns the value of attribute params.
4 5 6 |
# File 'lib/filterer/base.rb', line 4 def params @params end |
#results ⇒ Object
Returns the value of attribute results.
4 5 6 |
# File 'lib/filterer/base.rb', line 4 def results @results end |
#sort ⇒ Object
Returns the value of attribute sort.
4 5 6 |
# File 'lib/filterer/base.rb', line 4 def sort @sort end |
Class Method Details
.count(params = {}, opts = {}) ⇒ Object
64 65 66 67 |
# File 'lib/filterer/base.rb', line 64 def self.count(params = {}, opts = {}) filterer = self.new(params, { count_only: true }.merge(opts)) return filterer.[:total] end |
Instance Method Details
#add_params_to_query ⇒ Object
46 47 48 49 50 51 52 53 54 |
# File 'lib/filterer/base.rb', line 46 def add_params_to_query @params.reject { |k, v| k.in?(IGNORED_PARAMS) } .select { |k, v| v.present? } .each do |k, v| method_name = :"param_#{k}" @results = respond_to?(method_name) ? send(method_name, v) : @results end end |
#find_results ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/filterer/base.rb', line 25 def find_results @results = starting_query # Add params add_params_to_query # Order results order_results @meta[:total] = @results.count @meta[:last_page] = [(@meta[:total].to_f / @meta[:per_page]).ceil, 1].max @meta[:page] = [@meta[:last_page], @meta[:page]].min return if @opts[:count_only] # Add custom meta data if we've defined the method @meta.merge!(self.) if self.respond_to?(:custom_meta_data) @results = @results.limit(@meta[:per_page]).offset((@meta[:page] - 1)*@meta[:per_page]) end |
#order_results ⇒ Object
56 57 58 |
# File 'lib/filterer/base.rb', line 56 def order_results # noop end |
#paginator ⇒ Object
14 15 16 |
# File 'lib/filterer/base.rb', line 14 def paginator @paginator ||= Filterer::Paginator.new(self) end |
#setup_meta ⇒ Object
18 19 20 21 22 23 |
# File 'lib/filterer/base.rb', line 18 def @meta = { page: [@params[:page].to_i, 1].max, per_page: 10 } end |
#starting_query ⇒ Object
60 61 62 |
# File 'lib/filterer/base.rb', line 60 def starting_query raise 'You must override this method!' end |