module AnyCable::Rails::Rack

def self.app

def self.app
  @rack_app || app_build_lock.synchronize do
    @rack_app ||= default_middleware_stack.yield_self do |stack|
                    middleware.merge_into(stack)
                  end.yield_self do |stack|
      stack.build { [-1, {}, []] }
    end
  end
end

def self.app_build_lock

def self.app_build_lock
  @app_build_lock
end

def self.default_middleware_stack

def self.default_middleware_stack
  config = ::Rails.application.config
  ActionDispatch::MiddlewareStack.new do |middleware|
    middleware.use(config.session_store, config.session_options) if config.session_store
  end
end

def self.middleware

def self.middleware
  @middleware ||= ::Rails::Configuration::MiddlewareStackProxy.new
end