Sha256: 0dd86a55ffc3fc1148f4e2359ce61d0e940bd1430d6fb7d1879d47dd6b0b0902

Contents?: true

Size: 662 Bytes

Versions: 3

Compression:

Stored size: 662 Bytes

Contents

module Rack
  class Transaction
    def initialize(inner, settings)
      @inner = inner
      @connection = settings.fetch(:connection)
    end

    def call(env)
      req = Request.new env
      if req.get? || req.head? || req.options?
        result = @inner.call env
      else
        env['transaction.connection'] = @connection
        @connection.transaction do
          result = @inner.call env
          response = Response.new [], result[0]
          err = env['sinatra.error']

          if err || response.client_error? || response.server_error?
            raise Sequel::Rollback
          end
        end
      end
      result
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
sequel_transaction-0.2.2 lib/sequel_transaction/rack/transaction.rb
sequel_transaction-0.2.1 lib/sequel_transaction/rack/transaction.rb
sequel_transaction-0.2.0 lib/sequel_transaction/rack/transaction.rb