module Projects class DeleteMemberInteractor def self.call(owner, project, collaborator) interactor = new(owner, project, collaborator) interactor.run interactor end attr_reader :error, :result def initialize(owner, project, collaborator) @owner = owner @project = project @collaborator = collaborator end def success? @error.nil? end def run ActiveRecord::Base.transaction do gitea_result = Gitea::Repository::Members::DeleteService.new(owner, project.identifier, collaborator.login).call if gitea_result.status == 204 project.remove_member!(collaborator.id) end fail!(nil) end rescue Exception => exception fail!(exception.message) end private attr_reader :owner, :project, :collaborator def fail!(error) @error = error end end end