josacar/lita-campfire

View on GitHub
lib/lita/adapters/campfire.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'eventmachine'

module Lita
  module Adapters
    class Campfire < Adapter
      namespace 'campfire'

      config :subdomain, type: String, required: true
      config :apikey, type: String, required: true
      config :rooms, type: Array, required: true

      config :debug, type: [TrueClass, FalseClass], default: false
      config :tinder_options, type: Hash, default: {}

      attr_reader :connector

      def initialize(robot)
        super

        options = {
          subdomain: config.subdomain,
          apikey: config.apikey,
          rooms: rooms,
          debug: config.debug,
          tinder_options: config.tinder_options
        }

        @connector = Connector.new(
          robot,
          options
        )
      end

      def run
        EM.run do
          connector.connect
          connector.join_rooms
        end
        sleep
      rescue Interrupt
        disconnect
      end

      def send_messages(target, messages)
        connector.send_messages(target.room, messages)
      end

      def set_topic(target, topic)
        connector.set_topic(target.room, topic)
      end

      def shut_down
        disconnect
      end

      private

      def config
        Lita.config.adapters.campfire
      end

      def rooms
        Array(config.rooms)
      end

      def disconnect
        connector.disconnect
      end
    end

    Lita.register_adapter(:campfire, Campfire)
  end
end