code: function bucketExists () {
      // if bucket exists already set then return existing value
      if (defined(this._bucketExists)) {
          // if bucket does not exist then throw error
          if (this._bucketExists === false) {
              throw new Error(`bucket does not exist ${this.bucketName}`)
          }
          // otherwise return value which may be promise or true
          else {
              return Promise.resolve(this._bucketExists)
          }
      }
      // check if bucket exists storing promise so that check will only be done
      // once per instance
      this._bucketExists = this.bucket.exists().then(data => {
          var exists = data[0]
          // bucket exists
          if (exists === true) {
              // replace original promise with boolean
              this._bucketExists = true
              // resolve with true
              return true
          }
          // bucket does not exists and should not be created
          if (!this.createBucket) {
              throw new Error(`bucket does not exist ${this.bucketName}`)
          }
          // create bucket
          return this.bucket.create().then(data => {
              // replace original promise with boolean
              this._bucketExists = true
              // resolve with true
              return true
          })
      })
      // return promise
      return this._bucketExists
  }
docs: @function bucketExists
  
  resolves with true if bucket exists. if bucket does not exist and
  createBucket option is set then bucket will be created.
  
  @returns {Promise}