class Filterable::Generator
Attributes
filters[RW]
model[RW]
options[RW]
Public Class Methods
new(model, filters)
click to toggle source
# File lib/toschas/filterable/generator.rb, line 10 def initialize(model, filters) @model = model @filters = filters @options = filters.last.is_a?(Hash) ? filters.pop : {} end
Public Instance Methods
generate()
click to toggle source
# File lib/toschas/filterable/generator.rb, line 16 def generate generate_filter unless model.respond_to? :filter generate_scopes end
Private Instance Methods
generate_filter()
click to toggle source
# File lib/toschas/filterable/generator.rb, line 23 def generate_filter model.define_singleton_method( :filter, ->(filtering_params) { results = where(nil) filtering_params.each do |key, value| unless results.respond_to?(key) if Filterable.configuration.ignore_unknown_filters next else raise UnknownFilter, "Unknown filter received: #{key}" end end next if value.blank? && Filterable.configuration.ignore_empty_values results = results.public_send(key, value) end results } ) end
generate_scopes()
click to toggle source
# File lib/toschas/filterable/generator.rb, line 44 def generate_scopes if options[:custom] Generators::Custom.new(model, filters, options).generate elsif options[:joins].present? Generators::Joined.new(model, filters, options).generate else Generators::Simple.new(model, filters, options).generate end end