Sha256: 268c9626d4548734159deea469831cb47825b7be012579d25d33bfe5c4cfa0da

Contents?: true

Size: 455 Bytes

Versions: 5

Compression:

Stored size: 455 Bytes

Contents

require "agent/errors"

module Agent
  class BlockingOnce < Once
    def perform
      @mutex.synchronize do
        return nil, error if @performed

        begin
          value      = yield
          @performed = true
          return value, nil
        rescue Errors::Rollback
          return nil, rollback_error
        end
      end
    end

  protected

    def rollback_error
      @rollback_error ||= Error.new("rolled back")
    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
agent-0.12.0 lib/agent/blocking_once.rb
agent-0.11.0 lib/agent/blocking_once.rb
agent-0.10.0 lib/agent/blocking_once.rb
agent-0.9.1 lib/agent/blocking_once.rb
agent-0.9.0 lib/agent/blocking_once.rb