Total Complexity | 9 |
Total Lines | 47 |
Duplicated Lines | 0 % |
Changes | 1 | ||
Bugs | 0 | Features | 0 |
1 | require 'multi_json' |
||
6 | class MessageHandler |
||
7 | TYPE_PROPERTY_A = 'eventType' |
||
8 | TYPE_PROPERTY_B = 'messageType' |
||
9 | |||
10 | attr_reader :robot |
||
11 | |||
12 | def initialize(robot, glip_sdk) |
||
13 | @robot = robot |
||
14 | @glip_sdk = glip_sdk |
||
15 | @logger_prefix = " -- #{self.class.name}: " |
||
16 | end |
||
17 | |||
18 | def update(message) |
||
19 | m = message |
||
20 | |||
21 | Lita.logger.debug("#{@logger_prefix}Glip Lita: Glip Message Received: #{MultiJson.encode(m)}") |
||
22 | |||
23 | unless m.is_a?(Hash) && m.key?('event') && m['event'].index('/glip/posts').is_a?(Integer) |
||
24 | return |
||
25 | end |
||
26 | |||
27 | unless m.key?('body') |
||
28 | Lita.logger.warn("#{@logger_prefix}Glip Lita: Glip Message Received without body: #{MultiJson.encode(m)}") |
||
29 | return |
||
30 | end |
||
31 | |||
32 | unless (m['body'].key?(TYPE_PROPERTY_A) && m['body'][TYPE_PROPERTY_A] == "PostAdded") || |
||
33 | (m['body'].key?(TYPE_PROPERTY_B) && m['body'][TYPE_PROPERTY_B] == "PostAdded") |
||
34 | return |
||
35 | end |
||
36 | |||
37 | post = m['body'].key?('post') ? m['body']['post'] : m['body'] |
||
38 | |||
39 | user_id = post['creatorId'] |
||
40 | user = UserCreator.find_or_create_user user_id, @glip_sdk |
||
41 | |||
42 | room_id = post['groupId'] |
||
43 | room = RoomCreator.find_or_create_room room_id, @glip_sdk |
||
44 | |||
45 | source = Lita::Source.new user: user, room: room |
||
46 | post = post['text'].to_s |
||
47 | msg = Lita::Message.new @robot, post, source |
||
48 | |||
49 | Lita.logger.debug("#{@logger_prefix}Glip Lita: Robot Message Built") |
||
50 | @robot.receive msg |
||
51 | end |
||
52 | end |
||
53 | end |
||
56 |