class ActiveRecord::ConnectionAdapters::RefreshConnectionManagement

Constants

DEFAULT_OPTIONS

Public Class Methods

new(app, options = {}) click to toggle source
# File lib/activerecord-refresh_connection/active_record/connection_adapters/refresh_connection_management.rb, line 6
def initialize(app, options = {})
  @app = app
  @options = DEFAULT_OPTIONS.merge(options)
  @mutex = Mutex.new

  reset_remain_count
end

Public Instance Methods

call(env) click to toggle source
# File lib/activerecord-refresh_connection/active_record/connection_adapters/refresh_connection_management.rb, line 14
def call(env)
  testing = env.key?('rack.test')

  response = @app.call(env)

  response[2] = ::Rack::BodyProxy.new(response[2]) do
    # disconnect all connections on the connection pool
    clear_connections unless testing
  end

  response
rescue Exception
  clear_connections unless testing
  raise
end

Private Instance Methods

clear_connections() click to toggle source
# File lib/activerecord-refresh_connection/active_record/connection_adapters/refresh_connection_management.rb, line 32
def clear_connections
  if should_clear_all_connections?
    ActiveRecord::Base.clear_all_connections!
  else
    ActiveRecord::Base.clear_active_connections!
  end
end
max_requests() click to toggle source
# File lib/activerecord-refresh_connection/active_record/connection_adapters/refresh_connection_management.rb, line 55
def max_requests
  @options[:max_requests]
end
reset_remain_count() click to toggle source
# File lib/activerecord-refresh_connection/active_record/connection_adapters/refresh_connection_management.rb, line 51
def reset_remain_count
  @remain_count = max_requests
end
should_clear_all_connections?() click to toggle source
# File lib/activerecord-refresh_connection/active_record/connection_adapters/refresh_connection_management.rb, line 40
def should_clear_all_connections?
  return true if max_requests <= 1

  @mutex.synchronize do
    @remain_count -= 1
    (@remain_count <= 0).tap do |clear|
      reset_remain_count if clear
    end
  end
end