Class: Decidim::Proposals::CollaborativeDraftSearch

Inherits:
ResourceSearch
  • Object
show all
Defined in:
app/services/decidim/proposals/collaborative_draft_search.rb

Overview

A service to encapsualte all the logic when searching and filtering collaborative drafts in a participatory process.

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ CollaborativeDraftSearch

Public: Initializes the service. component - A Decidim::Component to get the drafts from. page - The page number to paginate the results. per_page - The number of drafts to return per page.



12
13
14
# File 'app/services/decidim/proposals/collaborative_draft_search.rb', line 12

def initialize(options = {})
  super(CollaborativeDraft.all, options)
end

Instance Method Details

Filters drafts by the name of the classes they are linked to. By default, returns all drafts. When a ‘related_to` param is given, then it camelcases item to find the real class name and checks the links for the Collaborative Draft.

The ‘related_to` param is expected to be in this form:

"decidim/meetings/meeting"

This can be achieved by performing ‘klass.name.underscore`.

Returns only those drafts that are linked to the given class name.



48
49
50
51
52
53
54
55
56
57
58
# File 'app/services/decidim/proposals/collaborative_draft_search.rb', line 48

def search_related_to
  from = query
         .joins(:resource_links_from)
         .where(decidim_resource_links: { to_type: related_to.camelcase })

  to = query
       .joins(:resource_links_to)
       .where(decidim_resource_links: { from_type: related_to.camelcase })

  query.where(id: from).or(query.where(id: to))
end

#search_search_textObject

Handle the search_text filter



17
18
19
20
21
# File 'app/services/decidim/proposals/collaborative_draft_search.rb', line 17

def search_search_text
  query
    .where("title ILIKE ?", "%#{search_text}%")
    .or(query.where("body ILIKE ?", "%#{search_text}%"))
end

#search_stateObject

Handle the state filter



24
25
26
27
28
29
30
31
32
33
34
35
# File 'app/services/decidim/proposals/collaborative_draft_search.rb', line 24

def search_state
  case state
  when "open"
    query.open
  when "withdrawn"
    query.withdrawn
  when "published"
    query.published
  else
    query
  end
end