Sha256: 5a17efe7f5af204068deb49d22a59fde85c2e6a3884f533eb2fd497afdc373ee

Contents?: true

Size: 1.12 KB

Versions: 17

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

module Alchemy
  class DeleteElements
    class WouldLeaveOrphansError < StandardError; end
    attr_reader :elements

    def initialize(elements)
      @elements = elements
    end

    def call
      if orphanable_records.present?
        raise WouldLeaveOrphansError
      end

      contents = Alchemy::Content.where(element_id: elements.map(&:id))
      contents.group_by(&:essence_type)
        .transform_values! { |value| value.map(&:essence_id) }
        .each do |class_name, ids|
          class_name.constantize.where(id: ids).delete_all
        end
      contents.delete_all
      Gutentag::Tagging.where(taggable: elements).delete_all
      delete_elements
    end

    private

    def orphanable_records
      Alchemy::Element.where(parent_element_id: [elements]).where.not(id: elements)
    end

    def delete_elements
      case elements
      when ActiveRecord::Associations::CollectionProxy
        elements.delete_all(:delete_all)
      when ActiveRecord::Relation
        elements.delete_all
      else
        Alchemy::Element.where(id: elements).delete_all
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
alchemy_cms-6.1.10 app/services/alchemy/delete_elements.rb
alchemy_cms-6.1.9 app/services/alchemy/delete_elements.rb
alchemy_cms-6.1.8 app/services/alchemy/delete_elements.rb
alchemy_cms-6.1.7 app/services/alchemy/delete_elements.rb
alchemy_cms-6.1.6 app/services/alchemy/delete_elements.rb
alchemy_cms-6.1.5 app/services/alchemy/delete_elements.rb
alchemy_cms-6.0.14 app/services/alchemy/delete_elements.rb
alchemy_cms-6.1.4 app/services/alchemy/delete_elements.rb
alchemy_cms-6.0.13 app/services/alchemy/delete_elements.rb
alchemy_cms-6.1.3 app/services/alchemy/delete_elements.rb
alchemy_cms-6.1.2 app/services/alchemy/delete_elements.rb
alchemy_cms-6.1.1 app/services/alchemy/delete_elements.rb
alchemy_cms-6.1.0 app/services/alchemy/delete_elements.rb
alchemy_cms-6.0.12 app/services/alchemy/delete_elements.rb
alchemy_cms-6.0.11 app/services/alchemy/delete_elements.rb
alchemy_cms-6.0.10 app/services/alchemy/delete_elements.rb
alchemy_cms-6.0.9 app/services/alchemy/delete_elements.rb