Gitter migration: Point people to app.gitter.im (rollout pt. 1)
[gitter.git] / modules / twitter / lib / badger-message-composer.js
blobaf1db2df30bb49daa34657e464b2deaa16ba131f
1 'use strict';
3 var _ = require('lodash');
4 var TWEET_MAX_CHARACTER_LIMIT = 140;
6 function countMaxUsernamesForTweet(mentionList, size) {
7   var count = 0;
8   var characters = 0;
9   while (count < mentionList.length) {
10     var nextTwitterUserLength = mentionList[count].length;
12     if (count > 0) {
13       characters += nextTwitterUserLength + 1; // Need to include a space separator
14     } else {
15       characters += nextTwitterUserLength;
16     }
18     if (characters >= size) {
19       return count;
20     }
22     count++;
23   }
25   return count;
28 function composeTweetAndDequeue(invitingUserName, mentionList, name, url) {
29   var baseMessagePre = 'Hey ';
30   var baseMessagePost =
31     " you've been invited to the " + name + ' community by ' + invitingUserName + '.\n' + url;
32   var baseMessageLength = baseMessagePre.length + baseMessagePost.length;
34   var count = countMaxUsernamesForTweet(mentionList, TWEET_MAX_CHARACTER_LIMIT - baseMessageLength);
35   var usernames = mentionList.slice(0, count);
36   mentionList.splice(0, count);
38   return baseMessagePre + usernames.join(' ') + baseMessagePost;
41 function badgerMessageComposer(invitingUserName, mentionList, name, url) {
42   if (!mentionList.length) return [];
43   mentionList = _.uniq(mentionList);
45   var tweets = [];
46   while (mentionList.length) {
47     var tweet = composeTweetAndDequeue(invitingUserName, mentionList, name, url);
48     if (tweet) {
49       tweets.push(tweet);
50     }
51   }
53   return tweets;
56 module.exports = badgerMessageComposer;