Class: Lita::Handlers::Pubsub
- Inherits:
-
Handler
- Object
- Handler
- Lita::Handlers::Pubsub
- Defined in:
- lib/lita/handlers/pubsub.rb
Instance Method Summary collapse
- #all_subscriptions(response) ⇒ Object
- #http_get(request, response) ⇒ Object
- #http_post(request, response) ⇒ Object
- #publish(response) ⇒ Object
- #subscribe(response) ⇒ Object
- #subscribers(response) ⇒ Object
- #subscriptions(response) ⇒ Object
- #unsubscribe(response) ⇒ Object
- #unsubscribe_all(response) ⇒ Object
Instance Method Details
#all_subscriptions(response) ⇒ Object
102 103 104 105 106 107 108 |
# File 'lib/lita/handlers/pubsub.rb', line 102 def all_subscriptions(response) events = redis.smembers('pubsub.events').sort subscriptions = events.map do |event| "#{event} -> #{redis.smembers("pubsub.events.#{event}").sort}" end response.reply("All subscriptions:\n#{subscriptions.join("\n")}") end |
#http_get(request, response) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/lita/handlers/pubsub.rb', line 77 def http_get(request, response) validate_http_password!(request.params['password']) response.write('ok') Thread.new do robot.trigger( :publish, event: request.params['event'], data: request.params['data'] ) end end |
#http_post(request, response) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/lita/handlers/pubsub.rb', line 89 def http_post(request, response) data = JSON.parse(request.body.read) validate_http_password!(request.params['password'] || data['password']) response.write('ok') Thread.new do robot.trigger( :publish, event: data['event'], data: data['data'] ) end end |
#publish(response) ⇒ Object
165 166 167 168 |
# File 'lib/lita/handlers/pubsub.rb', line 165 def publish(response) event, data = response.matches[0] robot.trigger(:publish, event: event, data: data) end |
#subscribe(response) ⇒ Object
123 124 125 126 127 128 129 130 131 |
# File 'lib/lita/handlers/pubsub.rb', line 123 def subscribe(response) event = response.matches[0][0] room = response.room return response.reply('This command only works in a room') unless room redis.sadd("pubsub.events", event) redis.sadd("pubsub.rooms.#{room.id}", event) redis.sadd("pubsub.events.#{event}", room.id) response.reply("Subscribed #{room.name} to #{event} events") end |
#subscribers(response) ⇒ Object
117 118 119 120 121 |
# File 'lib/lita/handlers/pubsub.rb', line 117 def subscribers(response) event = response.matches[0][1] subscribers = find_subscriptions(event) response.reply("Subscribers of #{event}: #{subscribers}") end |
#subscriptions(response) ⇒ Object
110 111 112 113 114 115 |
# File 'lib/lita/handlers/pubsub.rb', line 110 def subscriptions(response) room = response.room return response.reply('This command only works in a room') unless room subscriptions = redis.smembers("pubsub.rooms.#{room.id}").sort response.reply("Subscriptions for #{room.name}: #{subscriptions}") end |
#unsubscribe(response) ⇒ Object
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/lita/handlers/pubsub.rb', line 133 def unsubscribe(response) event = response.matches[0][0] room = response.room return response.reply('This command only works in a room') unless room subscriptions = redis.smembers("pubsub.rooms.#{room.id}").sort if subscriptions.include?(event) redis.srem("pubsub.rooms.#{room.id}", event) redis.srem("pubsub.events.#{event}", room.id) subscribers = redis.smembers("pubsub.events.#{event}") redis.srem("pubsub.events", event) if subscribers.empty? response.reply("Unsubscribed #{room.name} from #{event} events") else response.reply( "There is no #{event} subscription in #{room.name}.\n" \ "Current subscriptions: #{subscriptions}" ) end end |
#unsubscribe_all(response) ⇒ Object
152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/lita/handlers/pubsub.rb', line 152 def unsubscribe_all(response) room = response.room return response.reply('This command only works in a room') unless room subscriptions = redis.smembers("pubsub.rooms.#{room.id}").sort subscriptions.each do |event| redis.srem("pubsub.rooms.#{room.id}", event) redis.srem("pubsub.events.#{event}", room.id) subscribers = redis.smembers("pubsub.events.#{event}") redis.srem("pubsub.events", event) if subscribers.empty? response.reply("Unsubscribed #{room.name} from #{event} events") end end |