Sha256: 5f517bca97c0b11257efc32c01ee15a22a35c1ec934f2d341e028ba120fadb12

Contents?: true

Size: 1.21 KB

Versions: 48

Compression:

Stored size: 1.21 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) }
          @association.klass.destroy(record_ids)
        end
      end
    end
  end
end

Version data entries

48 entries across 48 versions & 1 rubygems

Version Path
forest_liana-9.3.15 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.3.14 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.3.13 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.3.12 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.3.11 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.3.10 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.3.9 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.3.8 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.3.7 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.3.6 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.3.3 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.3.2 app/services/forest_liana/has_many_dissociator.rb
forest_liana-8.3.1 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.3.1 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.3.0 app/services/forest_liana/has_many_dissociator.rb
forest_liana-8.3.0 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.2.3 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.2.2 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.2.1 app/services/forest_liana/has_many_dissociator.rb
forest_liana-9.2.0 app/services/forest_liana/has_many_dissociator.rb