Class: Decidim::DecidimAwesome::ProcessGroupsQuery
- Inherits:
-
Object
- Object
- Decidim::DecidimAwesome::ProcessGroupsQuery
- Defined in:
- app/queries/decidim/decidim_awesome/process_groups_query.rb
Overview
Provides filtered and counted queries for processes within a group.
Instance Method Summary collapse
-
#available_taxonomy_groups ⇒ Object
Returns taxonomy groups with raw taxonomy objects, filtered to only include items used by processes in the group, and sorted hierarchically.
- #base_relation ⇒ Object
- #filtered_relation(status: "all", taxonomy_ids: []) ⇒ Object
-
#initialize(group, user = nil) ⇒ ProcessGroupsQuery
constructor
A new instance of ProcessGroupsQuery.
-
#status_counts ⇒ Object
Unfiltered counts so tab numbers stay stable regardless of active filters.
- #taxonomy_filters ⇒ Object
- #used_taxonomy_ids ⇒ Object
Constructor Details
#initialize(group, user = nil) ⇒ ProcessGroupsQuery
Returns a new instance of ProcessGroupsQuery.
7 8 9 10 |
# File 'app/queries/decidim/decidim_awesome/process_groups_query.rb', line 7 def initialize(group, user = nil) @group = group @user = user end |
Instance Method Details
#available_taxonomy_groups ⇒ Object
Returns taxonomy groups with raw taxonomy objects, filtered to only include items used by processes in the group, and sorted hierarchically. Each group: { root_taxonomy:, items: [{ taxonomy:, depth: }] }
54 55 56 |
# File 'app/queries/decidim/decidim_awesome/process_groups_query.rb', line 54 def available_taxonomy_groups @available_taxonomy_groups ||= build_taxonomy_groups end |
#base_relation ⇒ Object
12 13 14 15 16 17 18 |
# File 'app/queries/decidim/decidim_awesome/process_groups_query.rb', line 12 def base_relation @base_relation ||= Decidim::ParticipatoryProcesses::GroupPublishedParticipatoryProcesses .new(group, user).query .includes(:organization, :taxonomies, :active_step, :hero_image_attachment) .order(weight: :asc, start_date: :desc) end |
#filtered_relation(status: "all", taxonomy_ids: []) ⇒ Object
20 21 22 23 |
# File 'app/queries/decidim/decidim_awesome/process_groups_query.rb', line 20 def filtered_relation(status: "all", taxonomy_ids: []) scope = filter_by_status(base_relation, status) filter_by_taxonomies(scope, taxonomy_ids) end |
#status_counts ⇒ Object
Unfiltered counts so tab numbers stay stable regardless of active filters.
26 27 28 29 30 31 32 33 |
# File 'app/queries/decidim/decidim_awesome/process_groups_query.rb', line 26 def status_counts @status_counts ||= { "active" => base_relation.active.count, "past" => base_relation.past.count, "upcoming" => base_relation.upcoming.count, "all" => base_relation.count } end |
#taxonomy_filters ⇒ Object
35 36 37 38 39 40 |
# File 'app/queries/decidim/decidim_awesome/process_groups_query.rb', line 35 def taxonomy_filters @taxonomy_filters ||= Decidim::TaxonomyFilter .for(group.organization) .for_manifest(:participatory_processes) .includes(:root_taxonomy, filter_items: :taxonomy_item) end |
#used_taxonomy_ids ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'app/queries/decidim/decidim_awesome/process_groups_query.rb', line 42 def used_taxonomy_ids ids_relation = base_relation.reselect(:id).unscope(:includes).reorder(nil) @used_taxonomy_ids ||= Decidim::Taxonomization .where(taxonomizable_type: "Decidim::ParticipatoryProcess", taxonomizable_id: ids_relation) .distinct .pluck(:taxonomy_id) .to_set end |