***************************************************************************
@constructs Operation
@description Handles HTTP requests for a specific method (e.g., "GET") to
a specific {@link carbond.Endpoint} by assigning to a property
on the endpoint that corresponds to that HTTP method (e.g.
{@link carbond.Endpoint.get}). This can be instantiated
explicitly in the context of an {@link carbond.Endpoint} or
implicitly if just a handler method is provided. In the latter
case, the operation object will be built and instantiated for
you.

@memberof carbond
function() {

    // -----------------------------
    // Computed read-only properties
    // -----------------------------

    /***************************************************************************
     * @property {xxx} _allParameters -- xxx
     */
    this._allParameters = undefined // cache of all parameters including inherited parameters

    /*****************************************************************************
     * @property {string} name -- The operation name (i.e., HTTP method)
     * @readonly
     */
    this.name = undefined

    /***************************************************************************
     * @property {carbond.Endpoint} endpoint -- xxx
     */
    this.endpoint = undefined

    // -----------------------
    // Configurable properties
    // -----------------------

    /****************************************************************************
     * @property {string} [description] -- A brief description of what this operation
     *                                     does. This will be displayed in any
     *                                     generated documentation.
     */
    this.description = undefined

    /***************************************************************************
     * @property {Object.<string, carbond.OperationParameter>} [parameters={}]
     * @description Any parameters that are specific to this operation (as
     *              opposed to those defined on the parent endpoint)
     */
    this.parameters = {}

    /***************************************************************************
     * @property {Object.<string, carbond.OperationResponse>} [responses={}]
     * @description Response definitions for this operation. These will be used
     *              for validation purposes as well as generated static
     *              documentation.
     */
    this.responses = {}

    /***************************************************************************
     * @property {boolean} [validateOutput=true]
     * @description Flag determining whether responses are validated using the
     *              definitions in {@link carbond.Operation.responses}
     */
    this.validateOutput = true

    /****************************************************************************
     * @property {carbond.limiter.Limiter} limiter
     * @description Operation specific rate limiter
     * @todo enable this when limiter documentation is cemented
     * @ignore
     */
    this.limiter = undefined
  }