code: function Queue(queueName, accessKey, secretKey, region) {
    if (!(this instanceof Queue)) return new Queue(queueName, accessKey, secretKey, region);
    var self = this;
    Object.defineProperty(this, '_sqs',{enumerable: false, configurable: false, writable: false,
      value: getSQS(accessKey, secretKey, region)});
    function setQueue(name) {
      debug('set queue: ' + name);
      var parsed;
      if (parsed = /([0-9]{12}\/([^\/]+))\/?$/.exec(name)) {
        self._sqs.setQueue('/' + parsed[1] + '/');
        self.name = parsed[2];
        if (self._init) delete self._init;
      } else if (typeof name === 'string') {
        self.name = name;
        Object.defineProperty(self, '_init',{enumerable: false, configurable: true, writable: true,
          value: getQueueURL(self, name).then(setQueue)});
        self.then = self._init.then;
        self.done = self._init.done;
      } else if (name && typeof name === 'object' && typeof name.then === 'function') {
        self.name = name.toString();
        Object.defineProperty(self, '_init',{enumerable: false, configurable: true, writable: true,
          value: name.then(setQueue)});
        self.then = self._init.then;
        self.done = self._init.done;
      } else {
        throw new Error(JSON.stringify(name) + ' is not a valid queue.');
      }
    }
    setQueue(queueName);
  }
docs: # Queue
  
  @param  {string}  queueName Name of the queue, identifier of the queue, or a promise for that.
  @param  {string=} accessKey
  @param  {string=} secretKey
  @param  {string=} region
  @return {Queue}