Sha256: c284e976d3e34a7b3e61e2d6df1be957b333fabc266e3f98790fd2ebc012a5b1

Contents?: true

Size: 1.18 KB

Versions: 9

Compression:

Stored size: 1.18 KB

Contents

require 'method_source'

module Pork
  module ShowSource
    def show_source test, err
      source = test.source
      sopath = "#{test.source_location.first}:"
      lowers = test.source_location.last
      uppers = lowers + source.size
      lineno = reject_pork(test, err).find do |backtrace|
        # find the line from the test source, exclude everything else
        next unless backtrace.start_with?(sopath)
        number = backtrace[/(?<=\.rb:)\d+/].to_i
        break number if number >= lowers && number < uppers
      end
      return '' unless lineno # TODO: error might be coming from before block
      lowerl = lineno - lowers
      upperl = MethodSource.expression_at(source, lowerl + 1).
                 count("\n") + lowerl
      indent = source[/^\s*/].size
      result = source.each_line.with_index.map do |source_line, index|
        line = source_line[indent..-1] || "\n"
        if index >= lowerl && index < upperl
          highlight_line("  => #{line}")
        else
          backlight_line("     #{line}")
        end
      end.join
      "\n#{result.chomp}"
    rescue SyntaxError => e
      "\nPork bug: Cannot parse the source. Please report: #{e}"
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
pork-2.0.0 lib/pork/extra/show_source.rb
pork-1.5.0 lib/pork/extra/show_source.rb
pork-1.4.4 lib/pork/extra/show_source.rb
pork-1.4.3 lib/pork/extra/show_source.rb
pork-1.4.2 lib/pork/extra/show_source.rb
pork-1.4.1 lib/pork/extra/show_source.rb
pork-1.4.0 lib/pork/extra/show_source.rb
pork-1.3.1 lib/pork/extra/show_source.rb
pork-1.3.0 lib/pork/extra/show_source.rb