app/controllers/concerns/search.rb
module Search
extend ActiveSupport::Concern
included do
before_action :parse_search_terms, only: [:index, :suggest]
before_action :parse_advanced_search_terms, only: :index
before_action :set_search_order, only: :index
end
def parse_search_terms
@search_terms = params[:search] if params[:search].present?
end
def parse_advanced_search_terms
@advanced_search_terms = params[:advanced_search] if params[:advanced_search].present?
parse_search_date
end
def parse_search_date
return unless search_by_date?
params[:advanced_search][:date_range] = search_date_range
end
def search_by_date?
params[:advanced_search] && params[:advanced_search][:date_min].present?
end
def search_start_date
case params[:advanced_search][:date_min]
when "1"
24.hours.ago
when "2"
1.week.ago
when "3"
1.month.ago
when "4"
1.year.ago
else
Date.parse(params[:advanced_search][:date_min]) rescue 100.years.ago
end
end
def search_finish_date
(params[:advanced_search][:date_max].to_date rescue Date.current) || Date.current
end
def search_date_range
[100.years.ago, search_start_date].max.beginning_of_day..[search_finish_date, Date.current].min.end_of_day
end
def set_search_order
if params[:search].present? && params[:order].blank?
params[:order] = "relevance"
end
end
end