module DupSendBlocker

Constants

VERSION

Public Class Methods

perform!(labels = [], send_error_is: :invalid) { || ... } click to toggle source
# File lib/dup_send_blocker.rb, line 7
def self.perform!(labels = [], send_error_is: :invalid)
  unless [:valid, :invalid].include?(send_error_is)
    raise ArgumentError.new
  end
  unless block_given?
    raise ArgumentError.new('block is required.')
  end

  send_log = nil
  begin
    send_log = DupSendBlocker::SendLog.write_labels!(labels)
  rescue ::DupSendBlocker::SendLog::DupLabelError => e
    raise BlockError.new(e.message)
  end

  res = nil
  begin
    # 送信処理はblock内で行う
    res = yield
  rescue => e
    if send_error_is == :invalid
      send_log.delete
    else # :valid
      send_log.update_columns({error_message: e.message})
    end

    raise e
  end

  {result: res, send_log: send_log}
end