Sha256: eb21dcd45e9e20439ee581ef8b8ebfb6fe88ed174c32256bea1e5c3a0d396a2f

Contents?: true

Size: 1.98 KB

Versions: 11

Compression:

Stored size: 1.98 KB

Contents

# frozen_string_literal: true

# rubocop:disable: Layout/IndentHeredoc
module ReactOnRails
  class PrerenderError < ::ReactOnRails::Error
    MAX_ERROR_SNIPPET_TO_LOG = 1000
    # TODO: Consider remove providing original `err` as already have access to `self.cause`
    # http://blog.honeybadger.io/nested-errors-in-ruby-with-exception-cause/
    attr_reader :component_name, :err, :props, :js_code, :console_messages

    # err might be nil if JS caught the error
    def initialize(component_name: nil, err: nil, props: nil,
                   js_code: nil, console_messages: nil)
      @component_name = component_name
      @err = err
      @props = props
      @js_code = js_code
      @console_messages = console_messages

      backtrace, message = calc_message(component_name, console_messages, err, js_code, props)

      super([message, backtrace].compact.join("\n"))
    end

    def to_honeybadger_context
      to_error_context
    end

    def raven_context
      to_error_context
    end

    def to_error_context
      result = {
        component_name: component_name,
        err: err,
        props: props,
        js_code: js_code,
        console_messages: console_messages
      }

      result.merge!(err.to_error_context) if err.respond_to?(:to_error_context)
      result
    end

    private

    def calc_message(component_name, console_messages, err, js_code, props)
      message = "ERROR in SERVER PRERENDERING\n".dup
      if err
        message << <<~MSG
          Encountered error: \"#{err}\"
        MSG

        backtrace = err.backtrace.join("\n")
      else
        backtrace = nil
      end
      message << <<~MSG
        when prerendering #{component_name} with props: #{Utils.smart_trim(props, MAX_ERROR_SNIPPET_TO_LOG)}

        code:

        #{Utils.smart_trim(js_code, MAX_ERROR_SNIPPET_TO_LOG)}

      MSG

      if console_messages
        message << <<~MSG
          console messages:
          #{console_messages}
        MSG

      end
      [backtrace, message]
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
react_on_rails-12.0.4 lib/react_on_rails/prerender_error.rb
react_on_rails-12.0.3 lib/react_on_rails/prerender_error.rb
react_on_rails-12.0.3.beta.0 lib/react_on_rails/prerender_error.rb
react_on_rails-12.0.2 lib/react_on_rails/prerender_error.rb
react_on_rails-12.0.1 lib/react_on_rails/prerender_error.rb
react_on_rails-12.0.0 lib/react_on_rails/prerender_error.rb
react_on_rails-12.0.0.pre.beta.4 lib/react_on_rails/prerender_error.rb
react_on_rails-12.0.0.pre.beta.3 lib/react_on_rails/prerender_error.rb
react_on_rails-12.0.0.pre.beta.2 lib/react_on_rails/prerender_error.rb
react_on_rails-12.0.0.pre.beta.1 lib/react_on_rails/prerender_error.rb
react_on_rails-12.0.0.pre.beta.0 lib/react_on_rails/prerender_error.rb