Sha256: 15c38d71533720d69c766521947b37d5cb452c0529003000e2be37674338d1b3
Contents?: true
Size: 1.6 KB
Versions: 1
Compression:
Stored size: 1.6 KB
Contents
class Filtering::Base def initialize(params, args = {}) @plain_params = params.permit(plain_acessible_params) unless plain_acessible_params.empty? @complex_params = params.permit(complex_acessible_params) unless complex_acessible_params.empty? @page = args[:page] @results = relation end def call raise "@relation not initialized at #{self.class.name}. Add @relation = Offer for example." if relation.nil? filter_by_plain_params unless plain_params.empty? filter_by_complex_params unless complex_params.empty? return results.page(page) if results.respond_to?(:page) results end protected attr_reader :plain_params, :complex_params, :page, :results def relation raise 'relation method not implemented. Add this method to calling class and add AR relation, for example Model.all' end def plain_acessible_params [] end def complex_acessible_params [] end private def filter_by_plain_params plain_params.each do |key, value| @results = results.where("#{key}": value) if value.present? end end def filter_by_complex_params raise_if_complex_method_not_implemented complex_params.each do |key, value| @results = send("filter_by_#{key}", value) end end def raise_if_complex_method_not_implemented complex_acessible_params.each do |param| method_name = "filter_by_#{param}" raise "#{method_name} method not implemented. Add #{method_name} private method to #{self.class.name} or remove #{param} param from complex_acessible_params" unless self.private_methods.include?(method_name.to_sym) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
filtering-0.1.2 | lib/filtering/base.rb |