Sha256: 45f8fcd14ec2da38dbb02e214d02bc1cd3002a2c7b4c5cdd85e1eb71627e1ec6

Contents?: true

Size: 1.12 KB

Versions: 9

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

require 'elastic_apm/naively_hashable'

module ElasticAPM
  class Stacktrace
    # @api private
    class Frame
      include NaivelyHashable

      attr_accessor(
        :abs_path,
        :filename,
        :function,
        :vars,
        :pre_context,
        :context_line,
        :post_context,
        :library_frame,
        :lineno,
        :module,
        :colno
      )

      # rubocop:disable Metrics/AbcSize
      def build_context(context_line_count)
        return unless abs_path && context_line_count > 0

        padding = (context_line_count - 1) / 2
        from = lineno - padding - 1
        from = 0 if from < 0
        to = lineno + padding - 1
        file_lines = read_lines(abs_path, from..to)

        return unless file_lines

        self.context_line = file_lines[padding]
        self.pre_context  = file_lines.first(padding)
        self.post_context = file_lines.last(padding)
      end
      # rubocop:enable Metrics/AbcSize

      private

      def read_lines(path, range)
        File.readlines(path)[range]
      rescue Errno::ENOENT
        nil
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
elastic-apm-3.2.0 lib/elastic_apm/stacktrace/frame.rb
elastic-apm-3.1.0 lib/elastic_apm/stacktrace/frame.rb
elastic-apm-3.0.0 lib/elastic_apm/stacktrace/frame.rb
elastic-apm-2.12.0 lib/elastic_apm/stacktrace/frame.rb
elastic-apm-2.11.0 lib/elastic_apm/stacktrace/frame.rb
elastic-apm-2.10.1 lib/elastic_apm/stacktrace/frame.rb
elastic-apm-2.10.0 lib/elastic_apm/stacktrace/frame.rb
elastic-apm-2.9.1 lib/elastic_apm/stacktrace/frame.rb
elastic-apm-2.9.0 lib/elastic_apm/stacktrace/frame.rb