Sha256: bdcf38151969d8ca3980a5c7c4505a9bfa41b0469674b4f7420daa88a266b15b

Contents?: true

Size: 1.35 KB

Versions: 18

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true

module Decidim
  # Update search indexes for each descendants of a given element
  class FindAndUpdateDescendantsJob < ApplicationJob
    queue_as :default

    def perform(element)
      descendants_collector = components_for(element)
      descendants_collector << element.comments.to_a if element.respond_to?(:comments)

      return if descendants_collector.blank?

      descendants_collector.each do |descendants|
        next if descendants.blank?

        Decidim::UpdateSearchIndexesJob.perform_later(descendants)
      end
    end

    private

    def manifest_name_to_class(name)
      resource_registry = Decidim.resource_registry.find(name)
      return if resource_registry.blank?

      resource_registry.model_class_name&.safe_constantize
    end

    # returns array of components
    # If element not responds to components, returns empty array
    def components_for(element)
      return [] unless element.respond_to?(:components) && !element.components.empty?

      ary = []
      element.components.each do |component|
        klass = component.manifest_name == "blogs" ? Decidim::Blogs::Post : manifest_name_to_class(component.manifest_name)

        next if klass.blank?
        next if klass.column_names.exclude? "decidim_component_id"

        ary << klass.where(component:).to_a
      end

      ary
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
decidim-core-0.30.0.rc3 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.30.0.rc2 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.30.0.rc1 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.29.2 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.28.5 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.29.1 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.28.4 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.29.0 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.28.3 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.29.0.rc4 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.29.0.rc3 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.29.0.rc2 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.29.0.rc1 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.28.2 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.28.1 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.28.0 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.28.0.rc5 app/jobs/decidim/find_and_update_descendants_job.rb
decidim-core-0.28.0.rc4 app/jobs/decidim/find_and_update_descendants_job.rb