class WinewooCore::Services::Finders::Producers::FiltersProducersFinder

Public Instance Methods

find() click to toggle source
# File lib/winewoo_core/services/finders/producers/filters_producers_finder.rb, line 4
def find
  search = clean_search_params

  query = WinewooCore::Repositories::Mongo::Queries::WineQuery.new.published
    .with_appelation(search[:appelation])
    .with_colors(search[:colors])
    .with_grapes(search[:grapes])
    .with_storage_duration(search[:storage_duration])
    .with_tasting_opportunities(search[:tasting_opportunities])
  query = query.from_interpro(@interpro.id) if @interpro

  criterions = (search[:flavors] || [])
    .concat(search[:entries] || [])
    .concat(search[:dishes] || [])
    .concat(search[:desserts] || [])
    .concat(search[:cheeses] || [])

  wines = criterions.empty? ?
    query.page(@page || 1)
    .per(@per_page || Kaminari::config.default_per_page) :
  query.full_text_search(criterions)
    .page(@page || 1)
    .per(@per_page || Kaminari::config.default_per_page)

  wines.map { |wine| wine.producer }
end

Private Instance Methods

clean_search_params() click to toggle source
# File lib/winewoo_core/services/finders/producers/filters_producers_finder.rb, line 34
def clean_search_params
  search = @filters.query
  clean = Proc.new do |k, v|
    if v.kind_of?(Hash)
      v.delete_if(&clean)
    elsif v.kind_of?(Array)
      v.reject(&:blank?).empty?
    else
      v.blank?
    end
  end
  search.delete_if(&clean)
end