[generate] support extending the rest-api specs via merge+concat

This commit is contained in:
spalger
2016-07-06 23:12:54 -06:00
parent 913469bb48
commit fc04071fb0

View File

@ -24,6 +24,7 @@ module.exports = function (branch, done) {
var version = Version.fromBranch(branch);
var overrides = version.mergeOpts(require('./overrides'), {
aliases: {},
mergeConcatParams: {},
paramAsBody: {},
clientActionModifier: false
});
@ -195,13 +196,23 @@ module.exports = function (branch, done) {
def.url.params = _.transform(def.url.params, transformParamKeys, {});
def.url.parts = _.transform(def.url.parts, transformParamKeys, {});
_.values(def.url.params).concat(_.values(def.url.parts)).forEach(param => {
if (param.options && param.options.some(opt => typeof opt !== 'string')) {
throw new Error(`${def.name} has options that are not strings...`)
var allParams = _.extend({}, def.url.params, def.url.parts);
_.forOwn(allParams, (paramSpec, paramName) => {
const toMerge = _.get(overrides, ['mergeConcatParams', name, paramName])
if (toMerge) {
_.mergeWith(paramSpec, toMerge, (dest, src) => {
if (_.isArray(dest) && _.isArray(src)) {
return dest.concat(src)
}
})
}
if (paramSpec.options) {
const invalidOpts = paramSpec.options.some(opt => typeof opt !== 'string')
if (invalidOpts) throw new Error(`${name} has options that are not strings...`)
}
})
var allParams = _.extend({}, def.url.params, def.url.parts);
var spec = {
name: name,
methods: _.map(def.methods, function (m) { return m.toUpperCase(); }),