Sha256: ecc72c9289c2d32d6fbbece33e49b13b4d3781d6444d04bd609a895139bff3db
Contents?: true
Size: 1.38 KB
Versions: 4
Compression:
Stored size: 1.38 KB
Contents
# frozen_string_literal: true module Decidim module Budgets # This class handles search and filtering of projects. Needs a # `current_component` param with a `Decidim::Component` in order to # find the projects. class ProjectSearch < ResourceSearch # Public: Initializes the service. # component - A Decidim::Component to get the projects from. def initialize(options = {}) super(Project.all, options) end # Handle the search_text filter def search_search_text query .where(localized_search_text_in(:title), text: "%#{search_text}%") .or(query.where(localized_search_text_in(:description), text: "%#{search_text}%")) end # Returns the random projects for the current page. def results Project.where(id: super.pluck(:id)) end private # Internal: builds the needed query to search for a text in the organization's # available locales. Note that it is intended to be used as follows: # # Example: # Resource.where(localized_search_text_for(:title, text: "my_query")) # # The Hash with the `:text` key is required or it won't work. def localized_search_text_in(field) options[:organization].available_locales.map do |l| "#{field} ->> '#{l}' ILIKE :text" end.join(" OR ") end end end end
Version data entries
4 entries across 4 versions & 1 rubygems