function factory( options, clbk ) {
	var opts;
	var err;
	opts = merge( {}, defaults );
	err = validate( opts, options );
	if ( err ) {
		throw err;
	}
	if ( !isFunction( clbk ) ) {
		throw new TypeError( format( 'invalid argument. Callback argument must be a function. Value: `%s`.', clbk ) );
	}
	return rank;

	/**
	* Ranks users provided user detail data.
	*
	* @private
	* @param {ObjectArray} data - user detail data
	* @returns {void}
	*/
	function rank( data ) {
		analyze( data, opts, done );
		/**
		* Callback invoked after completing analysis.
		*
		* @private
		* @param {(Error|null)} error - error object
		* @param {Object} results - analysis results
		* @param {Object} info - rate limit info
		* @returns {void}
		*/
		function done( error, results, info ) {
			error = error || null;
			results = results || null;
			info = info || null;
			clbk( error, results, info );
		}
	}
}
Returns a function for ranking users.

@param {Object} options - function options
@param {string} [options.token] - GitHub access token
@param {string} [options.useragent] - user agent string
@param {string} [options.method="followers"] - rank method
@param {Function} clbk - callback to invoke upon ranking users
@throws {TypeError} callback argument must be a function
@returns {Function} function for ranking users