blob: f3b074a89613bb160b5e8ea100922228e55142b0 [file] [log] [blame]
'use strict'
const messages = require('./messages')
const BaseOperation = require('./base_operation')
class Rules extends BaseOperation {
list (options) {
options = options || {}
const namespace = this.namespace(options)
const params = this.params('GET', `namespaces/${namespace}/rules`)
params.qs = this.qs(options || {}, ['skip', 'limit'])
return this.request(params)
}
get (options) {
return this.request(this.rule('GET', options))
}
delete (options) {
return this.request(this.rule('DELETE', options))
}
create (options) {
if (!options.hasOwnProperty('action')) {
throw new Error(messages.MISSING_RULE_ACTION_ERROR)
}
if (!options.hasOwnProperty('trigger')) {
throw new Error(messages.MISSING_RULE_TRIGGER_ERROR)
}
const params = this.rule('PUT', options)
params.body = {action: this.convert_to_fqn(options.action), trigger: this.convert_to_fqn(options.trigger)}
params.qs = this.qs(options, ['overwrite'])
return this.request(params)
}
// Convert resource identifier to fully qualified name (namespace + id).
// Returns default namespace if resource name is missing namespace.
convert_to_fqn (identifier) {
if (identifier.startsWith('/')) {
return identifier
}
return `/_/${identifier}`
}
update (options) {
options.overwrite = true
return this.create(options)
}
enable (options) {
options.status = 'active'
return this.state(options)
}
disable (options) {
options.status = 'inactive'
return this.state(options)
}
state (options) {
const params = this.rule('POST', options)
params.body = {status: options.status}
return this.request(params)
}
rule (method, options) {
const rule = options.ruleName
const namespace = this.namespace(options)
const params = this.params(method, `namespaces/${namespace}/rules/${rule}`)
if (!rule) {
throw new Error(messages.MISSING_RULE_ERROR)
}
return params
}
}
module.exports = Rules