Sha256: 636fa906a87c68f70a9cb1d54de58017c59c6158e5d3796ab5b0e31678838088

Contents?: true

Size: 1.81 KB

Versions: 4

Compression:

Stored size: 1.81 KB

Contents

module Chatterbox
  
  class Notification
    
    attr_reader :message
    
    def initialize(message = nil)
      @message = message
    end
    
    def notice
      hash = normalize_message_to_hash(message)
      default_info.merge(hash)
    end
    
    def normalize_message_to_hash(message)
      case
      when Exception === message
        exception_to_notice(message)
      when message.respond_to?(:to_hash)
        message.to_hash
      when message.respond_to?(:to_s)
        string_to_notice(message.to_s)
      end
    end
    
    def default_info
      default_info     = {
        :summary       => "N/A",
        :environment   => env,
        :ruby_version  => ruby_version,
        :ruby_platform => ruby_platform
      }
      default_info = add_ruby_info(default_info)
      default_info = add_rails_info(default_info) if rails_configuration
      default_info
    end
    
    def string_to_notice(message)
      { :summary => message }
    end
    
    def exception_to_notice(exception)
      {
        :summary => "#{exception.class.name}: #{exception.message}",
        :error_class   => exception.class.name,
        :error_message => exception.message,
        :backtrace     => exception.backtrace,
      }
    end
    
    def add_rails_info(data)
      data.merge({
        :rails_env => rails_configuration.env,
        :rails_root => rails_configuration.root,
        :rails_version => rails_configuration.version
      })
    end
    
    def add_ruby_info(data)
      data.merge({
        :ruby_version  => ruby_version,
        :ruby_platform => ruby_platform
      })
    end

    def ruby_version
      RUBY_VERSION
    end
    
    def ruby_platform
      RUBY_PLATFORM
    end
    
    def env
      ENV.to_hash
    end
    
    def rails_configuration
      defined?(Rails) && Rails
    end
    
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
relevance-chatterbox-0.1.0 lib/chatterbox/notification.rb
relevance-chatterbox-0.2.0 lib/chatterbox/notification.rb
relevance-chatterbox-0.2.1 lib/chatterbox/notification.rb
relevance-chatterbox-0.2.2 lib/chatterbox/notification.rb