Sha256: d6f2801d0a765340f72cc66f21d1ae30d27aa1e0f83435de98119edc60c26e95
Contents?: true
Size: 1.91 KB
Versions: 2
Compression:
Stored size: 1.91 KB
Contents
require 'yaml' require 'pp' module Chatterbox::ExceptionNotification class Presenter attr_reader :options def self.render(options) new(options).to_message end def initialize(options = {}) @options = options @config = options[:config] end def summary options.delete(:summary) end def to_message { :summary => summary, :body => render_body, :config => @config } end def error_details [:error_message, :request, :backtrace, :environment, :ruby_info, :rails_info] end def render_body processed_keys = [] extra_sections = options.keys - error_details body = render_sections(extra_sections, processed_keys) body << render_sections(error_details, processed_keys) body end def render_sections(keys, already_processed) keys.inject(String.new) do |str, key| output = render_section(key, already_processed) str << output if output str end end def render_section(key, processed_keys = []) processed_keys << key return nil unless options.key?(key) output = "#{key.to_s.titleize}\n" output << "----------\n" output << render_obj(options[key]) output << "\n" output end def render_obj(object) case object when Hash then render_hash(object) when Array then render_array(object) else render_object(object) end end def render_array(object) render_object(object.join("\n")) end def render_object(object) "#{object}\n" end # renders hashes with keys in alpha-sorted order def render_hash(hsh) str = "" indiff_hsh = hsh.with_indifferent_access indiff_hsh.keys.sort.each do |key| str << "#{key}: " value = indiff_hsh[key] PP::pp(value, str) end str end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
chatterbox-0.8.2 | lib/chatterbox/exception_notification/presenter.rb |
chatterbox-0.8.1 | lib/chatterbox/exception_notification/presenter.rb |