code: function orderControllers () {
      // iterate over all paths
      _.each(this.paths, path => {
          // iterate over methods
          _.each(path, (controllers, method) => {
              // if there is only one controller then nothing to sort
              if (controllers.length === 1) {
                  return
              }
              // psuedo controllers that will be added to end of list
              var all, anonymous, authenticated
              // ordered list of controllers
              var orderedControllers = []
              // add controllers in order skipping psuedo roles
              _.each(controllers, controller => {
                  if (controller.role === 'all') {
                      all = controller
                  }
                  else if (controller.role === 'anonymous') {
                      anonymous = controller
                  }
                  else if (controller.role === 'authenticated') {
                      authenticated = controller
                  }
                  else {
                      orderedControllers.push(controller)
                  }
              })
              // add psuedo controllers in order they should be used
              if (authenticated) {
                  orderedControllers.push(authenticated)
              }
              if (anonymous) {
                  orderedControllers.push(anonymous)
              }
              if (all) {
                  orderedControllers.push(all)
              }
              // replace original list with ordered list
              path[method] = orderedControllers
          })
      })
  }
docs: @function orderControllers
  
  sort controllers by roll - when multiple controllers exist for a single
  path:method with different rolls then those controllers will be used as
  follows:
  
  - any custom defined rolls first
  - authenticated default roll
  - anonymous default roll
  - all default roll
  
  when the presenter is determining which controller to use it will go through
  the list and pick the first controller that the client has a role for
  
  because rolls are added to this list during the build process the list needs
  to be resorted to put authenticated, anonymous, and all pseudo rolls at the
  bottom while leaving all custom defined rolls in the order that they were
  added.