class Rack::PactBroker::DatabaseTransaction
Constants
- REQUEST_METHOD
- TRANS_METHODS
Public Class Methods
Source
# File lib/rack/pact_broker/database_transaction.rb, line 12 def initialize app, database_connection @app = app @database_connection = database_connection @default_database_connector = ->(&block) { database_connection.synchronize do block.call end } end
Public Instance Methods
Source
# File lib/rack/pact_broker/database_transaction.rb, line 30 def add_database_connector(env) # maintain any existing one set by previous middleware { "pactbroker.database_connector" => @default_database_connector }.merge(env) end
Source
# File lib/rack/pact_broker/database_transaction.rb, line 22 def call env if use_transaction? env call_with_transaction(add_database_connector(env)) else call_without_transaction(add_database_connector(env)) end end
Source
# File lib/rack/pact_broker/database_transaction.rb, line 43 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
Source
# File lib/rack/pact_broker/database_transaction.rb, line 39 def call_without_transaction env @app.call(env) end
Source
# File lib/rack/pact_broker/database_transaction.rb, line 54 def do_not_rollback? response response[1].delete(::PactBroker::DO_NOT_ROLLBACK) end
Source
# File lib/rack/pact_broker/database_transaction.rb, line 35 def use_transaction? env TRANS_METHODS.include? env[REQUEST_METHOD] end