@atomist/rugs
Version:
Helper functions for Rugs
85 lines (78 loc) • 2.85 kB
text/typescript
import { Issue } from "@atomist/cortex/Issue";
import { MessageMimeTypes, ResponseMessage } from "@atomist/rug/operations/Handlers";
import { renderError, renderSuccess } from "@atomist/slack-messages/RugMessages";
import deprecated from "deprecated-decorator";
import * as mustache from "mustache";
/*
* Copyright © 2017 Atomist, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// NOTE: plan is that this file can act as a facade for selecting
// rendering style for the message based on some context
// (MappedParameter, PE etc)
const listIssues = `{
"attachments": [
{{
{
"fallback": "#{{number}}: {{{safeTitle}}}",
{{
"footer_icon": "http://images.atomist.com/rug/issue-closed.png",
"color": "#bd2c00",
{{/closed}}
{{^closed}}
"footer_icon": "http://images.atomist.com/rug/issue-open.png",
"color": "#6cc644",
{{/closed}}
{{
"author_link": "{{{assignee.html_url}}}",
"author_name": "@{{{assignee.login}}}",
"author_icon": "{{{assignee.avatar_url}}}",
{{/assignee}}
"mrkdwn_in": ["text"],
"text": "<{{{issueUrl}}}|#{{number}}: {{{safeTitle}}}>",
"footer": "<{{{url}}}|{{{repo}}}>",
"ts": "{{ts}}"
}{{^last}}, {{/last}}
{{/issues}}
]
}`;
/**
* Render GitHub issues for slack.
*/
const renderIssues = deprecated({
alternative: "@atomist/slack-messages",
version: "1.0.0-m.5",
},
function oldRenderIssues(issuesList: Issue[], chatSystem?: string): ResponseMessage {
const last = "last";
try {
issuesList[issuesList.length - 1][last] = true; // horrible mustache hack
const msg = mustache.render(listIssues, {
assignee() {
return this.assignee !== undefined;
},
closed() {
return this.state === "closed";
},
safeTitle() {
return JSON.stringify(this.title);
},
issues: issuesList,
});
return new ResponseMessage(msg, MessageMimeTypes.SLACK_JSON);
} catch (ex) {
return new ResponseMessage(`Error rendering issues ${ex}`);
}
});
export { renderIssues, renderError, renderSuccess };