hubot-js/gear-help

View on GitHub
src/handlers/help.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';

exports.handle = handle;

function handle(hubot, message) {
  const user = hubot.getUser(message);
  const helpMessage = hubot.speech().hello(user).append('help:help').append(getHelpOptions(hubot)).end();

  hubot.speak(message, helpMessage);
}

function getHelpOptions(hubot) {
  const speecher = hubot.speech();

  activeGears(hubot).forEach(gear => buildCategories(gear, speecher));

  return speecher.end();
}

function activeGears(hubot) {
  return hubot.gears.filter(g => g.active);
}

function buildCategories(gear, speecher) {
  const visibleCategories = gear.categories.filter(c => c.visible);

  visibleCategories.forEach((category) => {
    speecher.paragraph().bold(category.name).line().append(category.description).paragraph();
    buildTasks(gear, category, speecher);
  });
}

function buildTasks(gear, category, speecher) {
  tasks(gear, category).forEach(task => speecher.item().bold(task.trigger).separator().append(task.description).line());
}

function tasks(gear, category) {
  return gear.tasks.filter(t => t.category === category.key);
}