Sha256: 3ea885226bb9a0f2d5c8543ad5dfef286e962958036752c1c247009adfc2f280

Contents?: true

Size: 1.67 KB

Versions: 10

Compression:

Stored size: 1.67 KB

Contents

require 'erb'
require 'uri'

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

module Honeybadger
  class UserFeedback
    def initialize(app)
      @app = app
    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 config
      Honeybadger.configuration
    end

    def enabled?
      config.feedback && config.features['feedback']
    end

    def action
      URI.parse("#{config.protocol}://#{config.host}:#{config.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 ||= config.project_root &&
        File.join(config.project_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
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
honeybadger-1.13.2 lib/honeybadger/user_feedback.rb
honeybadger-1.13.1 lib/honeybadger/user_feedback.rb
honeybadger-1.13.0 lib/honeybadger/user_feedback.rb
honeybadger-1.11.2 lib/honeybadger/user_feedback.rb
honeybadger-1.11.1 lib/honeybadger/user_feedback.rb
honeybadger-1.11.0 lib/honeybadger/user_feedback.rb
honeybadger-1.11.0.beta4 lib/honeybadger/user_feedback.rb
honeybadger-1.11.0.beta3 lib/honeybadger/user_feedback.rb
honeybadger-1.11.0.beta2 lib/honeybadger/user_feedback.rb
honeybadger-1.11.0.beta1 lib/honeybadger/user_feedback.rb