Sha256: f42d9c7547abd8548ae1afd86e95992b6e47af2d2832bda8a2b67bbe3e1673c4

Contents?: true

Size: 922 Bytes

Versions: 12

Compression:

Stored size: 922 Bytes

Contents

require 'pact_broker/version'
require 'sequel'

module Rack
  module PactBroker
    class DatabaseTransaction

      REQUEST_METHOD = "REQUEST_METHOD".freeze
      TRANS_METHODS = %{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)
          raise Sequel::Rollback if response.first == 500
        end
        response
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
pact_broker-2.4.2 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.4.1 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.4.0 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.3.0 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.2.0 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.1.1 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.1.0 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.0.5 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.0.4 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.0.3 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.0.2 lib/rack/pact_broker/database_transaction.rb
pact_broker-2.0.1 lib/rack/pact_broker/database_transaction.rb