| 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 |