Sha256: f63d57e1af7b061e01eaab32f5c6e28cde0c922889c191abfbcb1dd6dc4787dc

Contents?: true

Size: 1.34 KB

Versions: 30

Compression:

Stored size: 1.34 KB

Contents

module ForestLiana
  class HasManyDissociator
    def initialize(resource, association, params, forest_user)
      @resource = resource
      @association = association
      @params = params
      @with_deletion = @params[:delete].to_s == 'true'
      @data = params['data']
      @forest_user = forest_user
    end

    def perform
      @record = @resource.find(@params[:id])
      associated_records = @resource.find(@params[:id]).send(@association.name)

      remove_association = !@with_deletion || @association.macro == :has_and_belongs_to_many
      if @data.is_a?(Array)
        record_ids = @data.map { |record| record[:id] }
      elsif @data.dig('attributes').present?
        record_ids = ForestLiana::ResourcesGetter.get_ids_from_request(@params, @forest_user)
      else
        record_ids = Array.new
      end

      if !record_ids.nil? && record_ids.any?
        if remove_association
          record_ids.each do |id|
            associated_records.delete(@association.klass.find(id))
          end
        end

        if @with_deletion
          record_ids = record_ids.select { |record_id| @association.klass.exists?(record_id) }
          @resource.transaction do
            record_ids.each do |id|
              record = @association.klass.find(id)
              record.destroy!
            end
          end
        end
      end
    end
  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
forest_liana-9.11.1 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.11.0 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.10.6 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.10.5 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.10.4 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.10.3 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.10.2 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.10.1 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.10.0 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.9.1 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.9.0 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.8.0 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.7.0 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.6.4 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.6.3 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.6.0 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.5.7 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.5.6 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.5.5 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.5.4 app/services/forest_liana/has_many_dissociator.rb