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