module IdempotentBlock

Constants

VERSION

Public Class Methods

included(base) click to toggle source
# File lib/idempotent_block.rb, line 4
def self.included(base)
  base.extend(ClassMethods)
end

Public Instance Methods

executed?() click to toggle source
# File lib/idempotent_block.rb, line 22
def executed?
  @executed ||= false
end
finished?() click to toggle source
# File lib/idempotent_block.rb, line 18
def finished?
  @finished ||= record_exist?
end
start(force: false) { || ... } click to toggle source
# File lib/idempotent_block.rb, line 26
def start(force: false)
  self.class.transaction do
    yield

    begin
      save!
    rescue ActiveRecord::RecordNotUnique
      raise ActiveRecord::Rollback unless force
    end

    @finished = true
    @executed = true
  end
end

Private Instance Methods

record_exist?() click to toggle source
# File lib/idempotent_block.rb, line 43
def record_exist?
  self.class.exists?(self.class.idempotent_columns.map { |k| [k, send(k)] }.to_h)
end