Class: Decidim::Meetings::MeetingSearch

Inherits:
ResourceSearch
  • Object
show all
Defined in:
decidim-meetings/app/services/decidim/meetings/meeting_search.rb

Overview

This class handles search and filtering of meetings. Needs a `current_component` param with a `Decidim::Component` in order to find the meetings.

Instance Attribute Summary

Attributes inherited from ResourceSearch

#component, #organization, #user

Instance Method Summary collapse

Methods inherited from ResourceSearch

#base_query, #results, #search_category_id, #search_origin, #search_scope_id, #search_search_text, text_search_fields

Constructor Details

#initialize(options = {}) ⇒ MeetingSearch

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


15
16
17
18
# File 'decidim-meetings/app/services/decidim/meetings/meeting_search.rb', line 15

def initialize(options = {})
  scope = options.fetch(:scope, Meeting.published)
  super(scope, options)
end

Instance Method Details

#search_activityObject

Handle the activity filter


41
42
43
44
45
46
47
48
49
# File 'decidim-meetings/app/services/decidim/meetings/meeting_search.rb', line 41

def search_activity
  case activity
  when "my_meetings"
    query
      .where(decidim_author_id: user.id)
  else
    query
  end
end

#search_dateObject

Handle the date filter


21
22
23
# File 'decidim-meetings/app/services/decidim/meetings/meeting_search.rb', line 21

def search_date
  apply_scopes(%w(upcoming past), date)
end

#search_spaceObject


25
26
27
28
29
# File 'decidim-meetings/app/services/decidim/meetings/meeting_search.rb', line 25

def search_space
  return query if options[:space].blank? || options[:space] == "all"

  query.joins(:component).where(decidim_components: { participatory_space_type: options[:space].classify })
end

#search_typeObject


31
32
33
34
35
36
37
38
# File 'decidim-meetings/app/services/decidim/meetings/meeting_search.rb', line 31

def search_type
  fields = Decidim::Meetings::Meeting::TYPE_OF_MEETING
  filtered = []
  options[:type].each do |inquiry|
    filtered.push(inquiry) if fields.include?(inquiry)
  end
  filtered.size.positive? ? query.where(decidim_meetings_meetings: { type_of_meeting: filtered }) : query
end