Sha256: ca5ac6ed6f52224428205e3d592c1dc0b4ee78e4e2417154350d73bb507385fa

Contents?: true

Size: 1.39 KB

Versions: 2

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

require_relative 'offense'

module Punchlist
  # Inspects files for punchlist items
  class Inspector
    # @param punchlist_line_regexp [Regexp] a regular expression that matches punchlist items
    # @param filename [String] the file to inspect
    # @param file_opener [Class<File>] an object that responds to `open` like `File`
    def initialize(punchlist_line_regexp, filename, file_opener: File)
      @file_opener = file_opener
      @punchlist_line_regexp = punchlist_line_regexp
      @filename = filename
      @lines = []
      @line_num = 0
    end

    # @return [Array<Offense>] punchlist items for the specified file
    def run
      @file_opener.open(filename, 'r') do |file|
        file.each_line { |line| inspect_line(line) }
      end
      @lines
    end

    private

    # @return [Regexp]
    attr_reader :punchlist_line_regexp

    # @return [String]
    attr_reader :filename

    # Inspects a line for punchlist items and stores it in this objects state
    #
    # @param line [String] the line to inspect
    # @return [void]
    def inspect_line(line)
      @line_num += 1
      return unless line =~ punchlist_line_regexp

      @lines << Offense.new(filename, @line_num, line.chomp)
    rescue ArgumentError => e
      if e.message != 'invalid byte sequence in UTF-8'
        # not a simple binary file we should ignore
        raise
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
punchlist-1.3.2 lib/punchlist/inspector.rb
punchlist-1.3.1 lib/punchlist/inspector.rb