module Roda::RodaPlugins::NamedRoutes::ClassMethods

def freeze

Freeze the namespaced routes so that there can be no thread safety issues at runtime.
def freeze
  opts[:namespaced_routes].freeze.each_value(&:freeze)
  super
end

def inherited(subclass)

Copy the named routes into the subclass when inheriting.
def inherited(subclass)
  super
  nsr = subclass.opts[:namespaced_routes]
  opts[:namespaced_routes].each{|k, v| nsr[k] = v.dup}
end

def named_route(name, namespace=nil)

Return the named route with the given name.
def named_route(name, namespace=nil)
  opts[:namespaced_routes][namespace][name]
end

def named_routes(namespace=nil)

The names for the currently stored named routes
def named_routes(namespace=nil)
  unless routes = opts[:namespaced_routes][namespace]
    raise RodaError, "unsupported named_routes namespace used: #{namespace.inspect}"
  end
  routes.keys
end

def route(name=nil, namespace=nil, &block)

call super.
store the route block. Otherwise, this is the main route, so
If the given route has a name, treat it as a named route and
def route(name=nil, namespace=nil, &block)
  if name
    routes = opts[:namespaced_routes][namespace] ||= {}
    if block
      routes[name] = define_roda_method(routes[name] || "named_routes_#{namespace}_#{name}", 1, &convert_route_block(block))
    elsif meth = routes[name]
      routes.delete(name)
      remove_method(meth)
    end
  else
    super(&block)
  end
end