class Stall::ProductFilters::Builder

Attributes

options[R]
products[R]

Public Class Methods

new(products, options = {}) click to toggle source
# File lib/stall/product_filters/builder.rb, line 6
def initialize(products, options = {})
  @products = products
  @options = options
end

Public Instance Methods

category_filter() click to toggle source
# File lib/stall/product_filters/builder.rb, line 15
def category_filter
  CategoryFilter.new(products, options_for(:category)) if enabled?(:category)
end
filters() click to toggle source
# File lib/stall/product_filters/builder.rb, line 11
def filters
  [category_filter, manufacturer_filter, price_filter] + properties_filters
end
manufacturer_filter() click to toggle source
# File lib/stall/product_filters/builder.rb, line 19
def manufacturer_filter
  ManufacturerFilter.new(products, options_for(:manufacturer)) if enabled?(:manufacturer)
end
price_filter() click to toggle source
# File lib/stall/product_filters/builder.rb, line 23
def price_filter
  PriceFilter.new(products, options_for(:price)) if enabled?(:price)
end
properties_filters() click to toggle source
# File lib/stall/product_filters/builder.rb, line 27
def properties_filters
  if enabled?(:property)
    properties.map do |property|
      property_options = options_for(:property, property: property)
      PropertyFilter.new(products, property_options)
    end
  else
    []
  end
end

Private Instance Methods

enabled?(filter_name) click to toggle source
# File lib/stall/product_filters/builder.rb, line 54
def enabled?(filter_name)
  options[filter_name] != false
end
options_for(filter_name, overrides = {}) click to toggle source
# File lib/stall/product_filters/builder.rb, line 50
def options_for(filter_name, overrides = {})
  (options[filter_name] || {}).deep_dup.merge(overrides)
end
properties() click to toggle source
# File lib/stall/product_filters/builder.rb, line 40
def properties
  Property.joins(
    property_values: [
      variant_property_values: [:variant]
    ]
  )
  .includes(:property_values)
  .distinct
end