heroku/heroku-orgs

View on GitHub
lib/app_transfer.js

Summary

Maintainability
A
2 hrs
Test Coverage
'use strict'

let cli = require('heroku-cli-util')

class AppTransfer {
  /**
   * @param {Object} options
   * @param {Object} options.heroku - instance of heroku-client
   * @param {string} options.appName - application that is being transferred
   * @param {string} options.recipient - recipient of the transfer
   * @param {boolean} options.personalToPersonal - determines if it is a transfer between individual accounts
  */
  constructor (opts) {
    this.opts = opts
    this.heroku = this.opts.heroku
    this.appName = this.opts.appName
    this.recipient = this.opts.recipient
    this.personalToPersonal = this.opts.personalToPersonal

    if (this.personalToPersonal === undefined) this.personalToPersonal = true

    if (this.personalToPersonal) {
      this.body = { app: this.appName, recipient: this.recipient }
      this.transferMsg = `Initiating transfer of ${cli.color.app(this.appName)}`
      if (!this.opts.bulk) this.transferMsg += ` to ${cli.color.magenta(this.recipient)}`
      this.path = '/account/app-transfers'
      this.method = 'POST'
    } else {
      this.body = { owner: this.recipient }
      this.transferMsg = `Transferring ${cli.color.app(this.appName)}`
      if (!this.opts.bulk) this.transferMsg += ` to ${cli.color.magenta(this.recipient)}`
      this.path = `/organizations/apps/${this.appName}`
      this.method = 'PATCH'
    }
  }

  start () {
    let request = this.init().then(request => {
      if (request.state === 'pending') cli.action.done('email sent')
    })
    return cli.action(this.transferMsg, request)
  }

  init () {
    return this.heroku.request({
      path: this.path,
      method: this.method,
      body: this.body
    })
  }
}

module.exports = AppTransfer