AjuntamentdeBarcelona/decidim-barcelona

View on GitHub
decidim-ephemeral_participation/app/commands/decidim/ephemeral_participation/transfer_user_override.rb

Summary

Maintainability
A
1 hr
Test Coverage
# frozen_string_literal: true

module Decidim
  module EphemeralParticipation
    module TransferUserOverride
      extend ActiveSupport::Concern

      included do
        alias_method :update_regular_managed_user, :update_managed_user

        def call
          return broadcast(:invalid) unless form.valid?

          transaction do
            update_managed_user
            mark_conflict_as_solved
            create_action_log
          end

          if form.conflict.reload.solved?
            broadcast(:ok)
          else
            broadcast(:invalid)
          end
        end

        private

        def update_managed_user
          if [new_user, managed_user].any?(&:ephemeral_participant?)
            Decidim::EphemeralParticipation::TransferEphemeralParticipant.call(form).tap do |events|
              raise(ActiveRecord::Rollback) if events.has_key?(:invalid)
            end
          else
            update_regular_managed_user
          end
        end
      end
    end
  end
end