Sha256: d26ef110bd813c741920b8e6d2bfc129d26816f66388a9566fb15a8be1b43d08

Contents?: true

Size: 1.39 KB

Versions: 4

Compression:

Stored size: 1.39 KB

Contents

module ExceptionNotifier
  class IrcNotifier
    def initialize(options)
      @config = OpenStruct.new
      parse_options(options)
    end

    def call(exception, options={})
      message = "'#{exception.message}' on '#{exception.backtrace.first}'"
      send_message([*@config.prefix, *message].join(' ')) if active?
    end

    def send_message(message)
      CarrierPigeon.send @config.irc.merge({message: message})
    end

    private
      def parse_options(options)
        nick = options.fetch(:nick, 'ExceptionNotifierBot')
        password = options[:password] ? ":#{options[:password]}" : nil
        domain = options.fetch(:domain, nil)
        port = options[:port] ? ":#{options[:port]}" : nil
        channel = options.fetch(:channel, '#log')
        notice = options.fetch(:notice, false)
        ssl = options.fetch(:ssl, false)
        join = options.fetch(:join, false)
        uri = "irc://#{nick}#{password}@#{domain}#{port}/#{channel}"
        prefix = options.fetch(:prefix, nil)
        recipients = options[:recipients] ? options[:recipients].join(', ') + ':' : nil

        @config.prefix = [*prefix, *recipients].join(' ')
        @config.irc = { uri: uri, ssl: ssl, notice: notice, join: join }
      end

      def active?
        valid_uri? @config.irc[:uri]
      end

      def valid_uri?(uri)
        !!URI.parse(uri)
      rescue URI::InvalidURIError
        false
      end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
exception_notification-4.1.1 lib/exception_notifier/irc_notifier.rb
exception_notification-4.1.0 lib/exception_notifier/irc_notifier.rb
exception_notification-4.1.0.rc2 lib/exception_notifier/irc_notifier.rb
exception_notification-4.1.0.rc1 lib/exception_notifier/irc_notifier.rb