Sha256: d24404246c98ebfbf836422bd3022ab3b959e80dc3690b6af701f361904da5bd

Contents?: true

Size: 1.87 KB

Versions: 4

Compression:

Stored size: 1.87 KB

Contents

require 'erb'
require 'uri'
require 'forwardable'

begin
  require 'i18n'
rescue LoadError
  module Honeybadger
    module I18n
      def self.t(key, options={})
        options[:default]
      end
    end
  end
end

module Honeybadger
  module Rack
    class UserFeedback
      extend Forwardable

      def initialize(app, config)
        @app = app
        @config = config
      end

      def call(env)
        status, headers, body = @app.call(env)
        if enabled? && env['honeybadger.error_id'] && form = render_form(env['honeybadger.error_id'])
          new_body = []
          body.each do |chunk|
            new_body << chunk.gsub("<!-- HONEYBADGER FEEDBACK -->", form)
          end
          body.close if body.respond_to?(:close)
          headers['Content-Length'] = new_body.reduce(0) { |a,e| a += e.bytesize }.to_s
          body = new_body
        end
        [status, headers, body]
      end

      def enabled?
        config[:'feedback.enabled']
      end

      def action
        URI.parse("#{config.connection_protocol}://#{config[:'connection.host']}:#{config.connection_port}/v1/feedback/").to_s
      rescue URI::InvalidURIError
        nil
      end

      def render_form(error_id, action = action())
        return unless action
        ERB.new(@template ||= File.read(template_file)).result(binding)
      end

      def custom_template_file
        @custom_template_file ||= File.join(config[:root], 'lib', 'honeybadger', 'templates', 'feedback_form.erb')
      end

      def custom_template_file?
        custom_template_file && File.exists?(custom_template_file)
      end

      def template_file
        if custom_template_file?
          custom_template_file
        else
          File.expand_path('../../templates/feedback_form.erb', __FILE__)
        end
      end

      private

      attr_reader :config
      def_delegator :@config, :logger
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
honeybadger-2.1.0 lib/honeybadger/rack/user_feedback.rb
honeybadger-2.1.0.beta.1 lib/honeybadger/rack/user_feedback.rb
honeybadger-2.0.12 lib/honeybadger/rack/user_feedback.rb
honeybadger-2.0.11 lib/honeybadger/rack/user_feedback.rb