lanej/cistern

View on GitHub
lib/cistern/coverage.rb

Summary

Maintainability
A
55 mins
Test Coverage
# frozen_string_literal: true

module Cistern::Coverage
  unless Kernel.respond_to? :caller_locations
    abort <<-ABORT
Cannot enable Cistern coverage reporting

Your ruby version ruby is: #{begin
                               RUBY_VERSION
                             rescue
                               'unknown'
                             end}
`Kernel` does not have the required method `caller_locations`

Try a newer ruby (should be > 2.0)
    ABORT
  end

  # returns the first caller_locations entry before entries in `file`
  def self.find_caller_before(file)
    enum = caller_locations.each

    call = nil

    # seek to the first entry from within `file`
    while (call = enum.next)
      break if call.path.end_with? file
    end

    # seek to the first entry thats not within `file`
    while (call = enum.next)
      break unless call.path.end_with? file
    end

    # the call location that called in to `file`
    call
  end
end