Sha256: 897dedf7af22def99d224ed2a8428f53fee500c0982d8997946531152ff5e800

Contents?: true

Size: 1.06 KB

Versions: 43

Compression:

Stored size: 1.06 KB

Contents

require 'pact_broker/constants'
require 'sequel'

module Rack
  module PactBroker
    class DatabaseTransaction

      REQUEST_METHOD = "REQUEST_METHOD".freeze
      TRANS_METHODS = %w{POST PUT PATCH DELETE}.freeze

      def initialize app, database_connection
        @app = app
        @database_connection = database_connection
      end

      def call env
        if use_transaction? env
          call_with_transaction env
        else
          call_without_transaction env
        end
      end

      def use_transaction? env
        TRANS_METHODS.include? env[REQUEST_METHOD]
      end

      def call_without_transaction env
        @app.call(env)
      end

      def call_with_transaction env
        response = nil
        @database_connection.transaction do
          response = @app.call(env)
          if response.first == 500
            raise Sequel::Rollback unless do_not_rollback?(response)
          end
        end
        response
      end

      def do_not_rollback? response
        response[1].delete(::PactBroker::DO_NOT_ROLLBACK)
      end
    end
  end
end

Version data entries

43 entries across 43 versions & 1 rubygems

Version Path
pact_broker-2.27.6 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.27.5 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.27.4 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.27.3 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.27.2 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.27.0 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.26.1 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.26.0 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.25.0 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.24.0 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.23.4 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.23.3 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.23.2 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.23.1 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.23.0 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.22.0 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.21.0 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.20.0 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.19.2 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.19.1 lib/rack/pact_broker/database_transaction.rb