Sha256: a072acb619ce59fb5ee595065091d7deb5a1d4a9fcf0dfc85d9da0403a507acf

Contents?: true

Size: 1.66 KB

Versions: 1

Compression:

Stored size: 1.66 KB

Contents

# error_enhancements.rb

module ErrorEnhancements
  def message
    original_message = begin
                         super()
                       rescue
                         ''
                       end
    vars_message = variables_message rescue ""
    if original_message.include?(vars_message)
      original_message
    else
      "#{original_message}\n#{vars_message}"
    end
  rescue => e
    original_message || ''
  end

  def variables_message
    @variables_message ||= begin
                             if @binding_infos&.any?
                               bindings_of_interest = select_binding_infos(@binding_infos)
                               EnhancedErrors.format(bindings_of_interest)
                             else
                               ''
                             end
                           rescue
                             ''
                           end
  end

  private

    def select_binding_infos(binding_infos)
      # Preference:
      # 1. First 'raise' binding that isn't from a library (gem).
      # 2. If none, the first binding.
      # 3. The last 'rescue' binding if available.

      bindings_of_interest = []

      first_app_raise = binding_infos.find do |info|
        info[:capture_event] == 'raise' && !info[:library]
      end
      bindings_of_interest << first_app_raise if first_app_raise

      if bindings_of_interest.empty? && binding_infos.first
        bindings_of_interest << binding_infos.first
      end

      last_rescue = binding_infos.reverse.find do |info|
        info[:capture_event] == 'rescue'
      end
      bindings_of_interest << last_rescue if last_rescue

      bindings_of_interest
    end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
enhanced_errors-1.0.0 lib/error_enhancements.rb