import stampit from 'stampit'; import {Meta, Model, Rename} from './base'; import _ from 'lodash'; import QuerySet, {Rename as QsRename} from '../querySet'; const TemplateQuerySet = stampit().compose(QuerySet, QsRename).methods({ render(properties = {}, context = {}) { this.properties = _.assign({}, this.properties, properties); this.method = 'POST'; this.endpoint = 'render'; this.payload = {context}; this.responseAttr = 'text'; this.raw(); return this; } }); const TemplateMeta = Meta({ name: 'template', pluralName: 'templates', endpoints: { 'detail': { 'methods': ['delete', 'patch', 'put', 'get'], 'path': '/v1.1/instances/{instanceName}/snippets/templates/{name}/' }, 'list': { 'methods': ['post', 'get'], 'path': '/v1.1/instances/{instanceName}/snippets/templates/' }, 'rename': { 'methods': ['post'], 'path': '/v1.1/instances/{instanceName}/snippets/templates/{name}/rename/' }, 'render': { 'methods': ['post'], 'path': '/v1.1/instances/{instanceName}/snippets/templates/{name}/render/' } } }); const TemplateConstraints = { name: { presence: true, string: true, length: { minimum: 5 } }, instanceName: { presence: true, length: { minimum: 5 } }, content: { presence: true, string: true }, content_type: { presence: true, string: true }, context: { object: true } }; /** * OO wrapper around templates {@link # endpoint}. * @constructor * @type {Template} * @property {String} name * @property {String} instanceName * @property {String} content * @property {String} content_type * @property {Object} context * @property {String} [links = {}] */ const Template = stampit() .compose(Model) .setMeta(TemplateMeta) .setQuerySet(TemplateQuerySet) .compose(Rename) .methods({ render(context = {}) { const options = { payload: {context}, responseAttr: 'text' } const meta = this.getMeta(); const path = meta.resolveEndpointPath('render', this); return this.makeRequest('POST', path, options); } }) .setConstraints(TemplateConstraints); export default Template;