1 | 'use strict'
|
2 |
|
3 | const cli = require('heroku-cli-util')
|
4 | const co = require('co')
|
5 |
|
6 | exports.boolean = (value) => {
|
7 | switch (value) {
|
8 | case 'true': case 'TRUE': case 'ON': case 'on': case true:
|
9 | return true
|
10 | case 'false': case 'FALSE': case 'OFF': case 'off': case null: case false:
|
11 | return false
|
12 | default:
|
13 | throw new TypeError('Invalid value. Valid options are: a boolean value')
|
14 | }
|
15 | }
|
16 |
|
17 | exports.enum = (value) => {
|
18 | return value
|
19 | }
|
20 |
|
21 | exports.numeric = (value) => {
|
22 | let n = Number(value)
|
23 | if (!isFinite(n)) {
|
24 | throw new TypeError('Invalid value. Valid options are: a numeric value')
|
25 | }
|
26 | return n
|
27 | }
|
28 |
|
29 | exports.generate = (name, convert, explain) => {
|
30 | return co.wrap(function * run (context, heroku) {
|
31 | const host = require('./host')
|
32 | const util = require('./util')
|
33 | const fetcher = require('./fetcher')(heroku)
|
34 | const { app, args } = context
|
35 | const { value, database } = args
|
36 |
|
37 | const db = yield fetcher.addon(app, database)
|
38 |
|
39 | if (util.starterPlan(db)) throw new Error('This operation is not supported by Hobby tier databases.')
|
40 | if (util.legacyPlan(db)) throw new Error('This operation is not supported by Legacy tier databases.')
|
41 |
|
42 | if (!value) {
|
43 | let settings = yield heroku.get(`/postgres/v0/databases/${db.id}/config`, { host: host(db) })
|
44 | let setting = settings[name]
|
45 | cli.log(`${name.replace(/_/g, '-')} is set to ${setting.value} for ${db.name}.`)
|
46 | cli.log(explain(setting))
|
47 | } else {
|
48 | let settings = yield heroku.patch(`/postgres/v0/databases/${db.id}/config`, {
|
49 | host: host(db),
|
50 | body: { [name]: convert(value) }
|
51 | })
|
52 | let setting = settings[name]
|
53 | cli.log(`${name.replace(/_/g, '-')} has been set to ${setting.value} for ${db.name}.`)
|
54 | cli.log(explain(setting))
|
55 | }
|
56 | })
|
57 | }
|