class WinewooCore::Services::Finders::Wines::FiltersWinesFinder

Public Instance Methods

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

  interpro_id = (@interpro && @interpro.id) || search[:interpro_id]

  # TODO UNOFFICIALS
  # query = WinewooCore::Repositories::Mongo::Queries::WineQuery.new.officials.published
  query = @interpro ?
    WinewooCore::Repositories::Mongo::Queries::WineQuery.new.officials.published :
    WinewooCore::Repositories::Mongo::Queries::WineQuery.new.officials.published

  query = query.with_appelation(search[:appelations] || search[:aoc])
    .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_id

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

  query = query.full_text_search(criterions) unless criterions.empty?

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

  return wines, "advanced_search", query.count
end

Private Instance Methods

clean_search_params() click to toggle source
# File lib/winewoo_core/services/finders/wines/filters_wines_finder.rb, line 40
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