lib/doorkeeper/rails/routes/registry.rb
# frozen_string_literal: true
module Doorkeeper
module Rails
class Routes
# Thread-safe registry of any Doorkeeper additional routes.
# Used to allow implementing of Doorkeeper extensions that must
# use their own routes.
#
module Registry
ROUTES_ACCESS_LOCK = Mutex.new
ROUTES_DEFINITION_LOCK = Mutex.new
InvalidRouterClass = Class.new(StandardError)
# Collection of additional registered routes for Doorkeeper.
#
# @return [Array<Object>] set of registered routes
#
def registered_routes
ROUTES_DEFINITION_LOCK.synchronize do
@registered_routes ||= Set.new
end
end
# Registers additional routes in the Doorkeeper registry
#
# @param [Object] routes
# routes class
#
def register_routes(routes)
if !routes.is_a?(Module) || !(routes < AbstractRouter)
raise InvalidRouterClass, "routes class must include Doorkeeper::Rails::AbstractRouter"
end
ROUTES_ACCESS_LOCK.synchronize do
registered_routes << routes
end
end
alias register register_routes
end
end
end
end