Skip to content

Commit 6a47bd4

Browse files
committed
finished refactor and fixing some bugs
1 parent 0b269cb commit 6a47bd4

File tree

8 files changed

+79
-58
lines changed

8 files changed

+79
-58
lines changed

src/lib/command_factory.js

+10-7
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ var utils = require('./utils.js');
2222
var util = require('util');
2323
var EventEmitter = require('events').EventEmitter;
2424

25-
var formatCommand = function(name, format, description) {
25+
var formatHelpCommand = function(name, format, description) {
2626
var context, template_str, compiled_template, command;
2727

2828
if (!format) {
@@ -34,7 +34,7 @@ var formatCommand = function(name, format, description) {
3434
'description': description
3535
};
3636

37-
template_str = '${format} - ${description}';
37+
template_str = 'hubot ${format} - ${description}';
3838
compiled_template = _.template(template_str);
3939
command = compiled_template(context);
4040

@@ -58,7 +58,8 @@ var getRegexForFormatString = function (format) {
5858
};
5959

6060
function CommandFactory(robot) {
61-
this.robot = robot;
61+
var self = this;
62+
self.robot = robot;
6263
EventEmitter.call(this);
6364
}
6465

@@ -82,9 +83,8 @@ CommandFactory.prototype.addCommand = function (action_alias, messaging_handler)
8283
var action_alias_name = action_alias.name;
8384

8485
_.each(action_alias.formats, function (format) {
85-
var formatted_string = formatCommand(action_alias.name, format.display || format, action_alias.description);
86-
var compiled_template = _.template('hubot ${command}');
87-
self.robot.commands.push(compiled_template({ robotName: self.robot.name, command: formatted_string }));
86+
var formatted_string = format.display || format;
87+
self.robot.commands.push(formatHelpCommand(action_alias.name, formatted_string, action_alias.description));
8888

8989
if (format.display) {
9090
_.each(format.representation, function (representation) {
@@ -99,6 +99,9 @@ CommandFactory.prototype.addCommand = function (action_alias, messaging_handler)
9999

100100
self.robot.listen(function (msg) {
101101
var i, format_string, regex;
102+
if (!msg.text) {
103+
return false;
104+
}
102105
var command = messaging_handler.normalizeCommand(msg.text);
103106
for (i = 0; i < format_strings.length; i++) {
104107
format_string = format_strings[i];
@@ -110,7 +113,7 @@ CommandFactory.prototype.addCommand = function (action_alias, messaging_handler)
110113
}
111114
}
112115
return false;
113-
}, { id: action_alias_name }, function (msg) {
116+
}, { id: 'st2.' + action_alias_name }, function (msg) {
114117
self.emit('st2.command_match', {
115118
msg: msg,
116119
alias_name: action_alias_name,

src/lib/messaging_handler/default.js

+14-9
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@ var env = process.env;
55
var util = require('util');
66
var utils = require('./../utils');
77
var truncate = require('truncate');
8-
var hubot_alias = env.HUBOT_ALIAS;
8+
9+
var hubot_alias_regex = new RegExp('^' + env.HUBOT_ALIAS);
910

1011
function DefaultMessagingHandler(robot) {
11-
this.robot = robot;
12-
this.truncate_length = env.ST2_MAX_MESSAGE_LENGTH;
12+
var self = this;
13+
self.robot = robot;
14+
self.truncate_length = env.ST2_MAX_MESSAGE_LENGTH;
1315
}
1416

1517
DefaultMessagingHandler.prototype.postData = function(data) {
18+
var self = this;
1619
var recipient, split_message, formatted_message,
1720
text = "";
1821

@@ -23,8 +26,8 @@ DefaultMessagingHandler.prototype.postData = function(data) {
2326
text = (data.user && !data.whisper) ? util.format('%s: ', data.user) : "";
2427
}
2528

26-
recipient = this.formatRecepient(recipient);
27-
text += this.formatData(data.message);
29+
recipient = self.formatRecepient(recipient);
30+
text += self.formatData(data.message);
2831

2932
// Ignore the delimiter in the default formatter and just concat parts.
3033
split_message = utils.splitMessage(text);
@@ -34,7 +37,7 @@ DefaultMessagingHandler.prototype.postData = function(data) {
3437
formatted_message = split_message.pretext || split_message.text;
3538
}
3639

37-
this.robot.messageRoom.call(this.robot, recipient, formatted_message);
40+
self.robot.messageRoom.call(self.robot, recipient, formatted_message);
3841
};
3942

4043
DefaultMessagingHandler.normalizeAddressee = function(msg) {
@@ -45,11 +48,13 @@ DefaultMessagingHandler.normalizeAddressee = function(msg) {
4548
};
4649

4750
DefaultMessagingHandler.prototype.formatData = function(data) {
51+
var self = this;
52+
4853
if (utils.isNull(data)) {
4954
return "";
5055
}
51-
if (this.truncate_length > 0) {
52-
data = truncate(data, this.truncate_length);
56+
if (self.truncate_length > 0) {
57+
data = truncate(data, self.truncate_length);
5358
}
5459
return data;
5560
};
@@ -59,7 +64,7 @@ DefaultMessagingHandler.prototype.formatRecepient = function(recepient) {
5964
};
6065

6166
DefaultMessagingHandler.prototype.normalizeCommand = function(command) {
62-
return command.replace(/^${hubot_alias}/, "").trim();
67+
return command.replace(hubot_alias_regex, "").trim();
6368
};
6469

6570
module.exports = DefaultMessagingHandler;

src/lib/messaging_handler/hipchat.js

+10-7
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@ var DefaultMessagingHandler = require('./default');
88

99

1010
function HipchatMessagingHandler(robot) {
11-
DefaultMessagingHandler.call(this, robot);
11+
var self = this;
12+
DefaultMessagingHandler.call(self, robot);
1213
}
1314

1415
util.inherits(HipchatMessagingHandler, DefaultMessagingHandler);
1516

1617
HipchatMessagingHandler.prototype.postData = function(data) {
18+
var self = this;
1719
var recipient, split_message, formatted_message,
1820
pretext = "";
1921

@@ -23,7 +25,7 @@ HipchatMessagingHandler.prototype.postData = function(data) {
2325
}
2426

2527
if (recipient.indexOf('@') === -1 ) {
26-
recipient = this.formatRecepient(recipient);
28+
recipient = self.formatRecepient(recipient);
2729
}
2830
split_message = utils.splitMessage(data.message);
2931
if (pretext) {
@@ -34,16 +36,16 @@ HipchatMessagingHandler.prototype.postData = function(data) {
3436
same message, so split them */
3537
if (split_message.pretext) {
3638
if (data.whisper) {
37-
this.robot.send.call(this.robot, data.channel, split_message.pretext);
39+
self.robot.send.call(self.robot, data.channel, split_message.pretext);
3840
} else {
39-
this.robot.messageRoom.call(this.robot, recipient, split_message.pretext);
41+
self.robot.messageRoom.call(self.robot, recipient, split_message.pretext);
4042
}
4143
}
4244
if (split_message.text) {
4345
if (data.whisper) {
44-
this.robot.send.call(this.robot, data.channel, this.formatData(split_message.text));
46+
self.robot.send.call(self.robot, data.channel, self.formatData(split_message.text));
4547
} else {
46-
this.robot.messageRoom.call(this.robot, recipient, this.formatData(split_message.text));
48+
self.robot.messageRoom.call(self.robot, recipient, self.formatData(split_message.text));
4749
}
4850
}
4951
};
@@ -76,7 +78,8 @@ HipchatMessagingHandler.prototype.formatRecepient = function(recepient) {
7678
};
7779

7880
HipchatMessagingHandler.prototype.normalizeCommand = function(command) {
79-
return HipchatMessagingHandler.super_.prototype.normalizeCommand.call(this, command);
81+
var self = this;
82+
return HipchatMessagingHandler.super_.prototype.normalizeCommand.call(self, command);
8083
};
8184

8285
module.exports = HipchatMessagingHandler;

src/lib/messaging_handler/index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ var util = require('util');
66
var fs = require('fs');
77
var path = require('path');
88

9-
var filenames = fs.readdirSync('./');
9+
var filenames = fs.readdirSync(__dirname);
1010

1111
var messagingHandlers = {};
1212

@@ -16,7 +16,7 @@ filenames.forEach(function(filename) {
1616
}
1717

1818
var message_handler = filename.replace(/\.[^/.]+$/, "");
19-
messagingHandlers[message_handler] = require('./' + filename);
19+
messagingHandlers[message_handler] = require(path.join(__dirname, filename));
2020
});
2121

2222
module.exports.getMessagingHandler = function(adapterName, robot) {

src/lib/messaging_handler/slack.js

+8-4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ var utils = require('./../utils');
77
var DefaultMessagingHandler = require('./default');
88

99
function SlackMessagingHandler(robot) {
10+
var self = this;
1011
DefaultMessagingHandler.call(this, robot);
1112

1213
var sendMessageRaw = function(message) {
@@ -26,6 +27,8 @@ function SlackMessagingHandler(robot) {
2627
util.inherits(SlackMessagingHandler, DefaultMessagingHandler);
2728

2829
SlackMessagingHandler.prototype.postData = function(data) {
30+
var self = this;
31+
2932
var recipient, attachment_color, split_message,
3033
attachment, pretext = "";
3134

@@ -45,7 +48,7 @@ SlackMessagingHandler.prototype.postData = function(data) {
4548
}
4649
}
4750

48-
split_message = utils.splitMessage(this.formatData(data.message));
51+
split_message = utils.splitMessage(self.formatData(data.message));
4952

5053
if (split_message.text) {
5154
var content = {
@@ -55,7 +58,7 @@ SlackMessagingHandler.prototype.postData = function(data) {
5558
if (data.extra && data.extra.slack) {
5659
for (var attrname in data.extra.slack) { content[attrname] = data.extra.slack[attrname]; }
5760
}
58-
var robot = this.robot;
61+
var robot = self.robot;
5962
var chunks = split_message.text.match(/[\s\S]{1,7900}/g);
6063
var sendChunk = function (i) {
6164
content.text = chunks[i];
@@ -72,7 +75,7 @@ SlackMessagingHandler.prototype.postData = function(data) {
7275
};
7376
sendChunk(0);
7477
} else {
75-
this.robot.messageRoom.call(this.robot, recipient, pretext + split_message.pretext);
78+
self.robot.messageRoom.call(self.robot, recipient, pretext + split_message.pretext);
7679
}
7780
};
7881

@@ -97,7 +100,8 @@ SlackMessagingHandler.prototype.formatRecepient = function(recepient) {
97100
};
98101

99102
SlackMessagingHandler.prototype.normalizeCommand = function(command) {
100-
command = SlackMessagingHandler.super_.prototype.normalizeCommand.call(this, command);
103+
var self = this;
104+
command = SlackMessagingHandler.super_.prototype.normalizeCommand.call(self, command);
101105
// replace left double quote with regular quote
102106
command = command.replace(/\u201c/g, '\u0022');
103107
// replace right double quote with regular quote

src/lib/messaging_handler/yammer.js

+6-4
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ var utils = require('./../utils');
77
var DefaultMessagingHandler = require('./default');
88

99
function YammerMessagingHandler(robot) {
10-
DefaultMessagingHandler.call(this, robot);
10+
var self = this;
11+
DefaultMessagingHandler.call(self, robot);
1112
}
1213

1314
util.inherits(YammerMessagingHandler, DefaultMessagingHandler);
1415

1516
YammerMessagingHandler.prototype.postData = function(data) {
17+
var self = this;
1618
var recipient, split_message, formatted_message,
1719
text = "";
1820

@@ -23,8 +25,8 @@ YammerMessagingHandler.prototype.postData = function(data) {
2325
text = (data.user && !data.whisper) ? util.format('@%s: ', data.user) : "";
2426
}
2527

26-
recipient = this.formatRecepient(recipient);
27-
text += this.formatData(data.message);
28+
recipient = self.formatRecepient(recipient);
29+
text += self.formatData(data.message);
2830

2931
// Ignore the delimiter in the default formatter and just concat parts.
3032
split_message = utils.splitMessage(text);
@@ -34,7 +36,7 @@ YammerMessagingHandler.prototype.postData = function(data) {
3436
formatted_message = split_message.pretext || split_message.text;
3537
}
3638

37-
this.robot.send.call(this.robot, recipient, formatted_message);
39+
self.robot.send.call(self.robot, recipient, formatted_message);
3840
};
3941

4042
YammerMessagingHandler.prototype.normalizeAddressee = function(msg) {

0 commit comments

Comments
 (0)