Skip to content

Commit

Permalink
Extract table report generator
Browse files Browse the repository at this point in the history
Progress toward #6
  • Loading branch information
backspace committed Feb 12, 2015
1 parent 0bb559a commit 84bf5cb
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 31 deletions.
37 changes: 37 additions & 0 deletions src/reports/message-and-participant-table.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
var Table = require('cli-table');
var values = require('amp-values');

var percentagesFromCounts = require('../calculators/percentages-from-counts');

var sumObjectValues = function(object) {
return values(object).reduce(function(total, value) {
return total + value;
}, 0);
};

module.exports = function(messageCounts, participantCounts, propertiesToLabels) {
var table = new Table({
head: ['', 'messages', 'participants'],
style: {
head: [],
border: []
}
});

var messageCount = sumObjectValues(messageCounts);
var participantCount = sumObjectValues(participantCounts);

var messagePercents = percentagesFromCounts(messageCounts);
var participantPercents = percentagesFromCounts(participantCounts);

Object.keys(propertiesToLabels).forEach(function(property) {
var label = propertiesToLabels[property];

table.push([label, `${messagePercents[property]}%`, `${participantPercents[property]}`]);
});

table.push([]);
table.push(['counts', messageCount, participantCount]);

return table;
};
40 changes: 9 additions & 31 deletions src/reports/verbose-gender.js
Original file line number Diff line number Diff line change
@@ -1,55 +1,33 @@
// TODO this is untested, but its components are tested, and it’s semi-covered by the messy integration-y statsbot test

var values = require('amp-values');

var Table = require('cli-table');
var messageAndParticipantTable = require('./message-and-participant-table');

// TODO these names are unwieldy and can probably be broken up and simplified

var GenderMessageCountStatisticsGenerator = require('../calculators/gender-message-count');

var GenderParticipantCountStatisticsGenerator = require('../calculators/gender-participant-count');

var percentagesFromCounts = require('../calculators/percentages-from-counts');

class VerboseGenderReportGenerator {
constructor(userMessageCount, userIsMan) {
this.userMessageCount = userMessageCount;
this.userIsMan = userIsMan;
}

generate() {
// TODO this is copied from statsbot
var counts = values(this.userMessageCount);
var messageCount = counts.reduce(function(total, count) {
return total + count;
}, 0);

var messageCountStatistics = new GenderMessageCountStatisticsGenerator(this.userMessageCount, this.userIsMan).generate();

var participantCountStatistics = new GenderParticipantCountStatisticsGenerator(this.userMessageCount, this.userIsMan).generate();

var participantCount = values(participantCountStatistics).reduce(function(total, genderCount) {
return total + genderCount;
}, 0);

var messagePercents = percentagesFromCounts(messageCountStatistics);
var participantPercents = percentagesFromCounts(participantCountStatistics);


var table = new Table({
head: ['', 'messages', 'participants'],
style: {
head: [],
border: []
var table = messageAndParticipantTable(
messageCountStatistics,
participantCountStatistics,
{
'men': 'men',
'notMen': 'not-men',
'unknown': 'unknown'
}
});

table.push(['men', `${messagePercents.men}%`, `${participantPercents.men}%`]);
table.push(['not-men', `${messagePercents.notMen}%`, `${participantPercents.notMen}%`]);
table.push(['unknown', `${messagePercents.unknown}%`, `${participantPercents.unknown}%`]);
table.push([]);
table.push(['counts', messageCount, participantCount]);
);

var report = '```\n' + table.toString() + '\n```';

Expand Down

0 comments on commit 84bf5cb

Please sign in to comment.