class Gemfilelint::Linter

Attributes

logger[R]

Public Class Methods

new(logger: nil) click to toggle source
# File lib/gemfilelint.rb, line 124
def initialize(logger: nil)
  @logger = logger || make_logger
end

Public Instance Methods

lint(*paths) click to toggle source

rubocop:disable Metrics/AbcSize, Metrics/MethodLength

# File lib/gemfilelint.rb, line 129
def lint(*paths)
  logger.info("Inspecting gemfiles at #{paths.join(', ')}\n")

  offenses = []

  each_offense_for(paths) do |offense|
    if offense
      offenses << offense
      logger.info('W'.colorize(:magenta))
    else
      logger.info('.'.colorize(:green))
    end
  end

  logger.info("\n")

  if offenses.empty?
    true
  else
    messages = offenses.map { |offense| offense_to_message(offense) }
    logger.info("\nOffenses:\n\n#{messages.join("\n")}\n")
    false
  end
end

Private Instance Methods

each_offense_for(paths) { |offense| ... } click to toggle source

rubocop:enable Metrics/AbcSize, Metrics/MethodLength

# File lib/gemfilelint.rb, line 157
def each_offense_for(paths)
  paths.each do |path|
    Parser.for(path).each_offense do |offense|
      yield offense
    end
  end
end
make_logger() click to toggle source
# File lib/gemfilelint.rb, line 165
def make_logger
  Logger.new($stdout).tap do |creating|
    creating.level = :info
    creating.formatter = ->(*, message) { message }
  end
end
offense_to_message(offense) click to toggle source
# File lib/gemfilelint.rb, line 172
def offense_to_message(offense)
  "#{offense.path.colorize(:cyan)}: #{'W'.colorize(:magenta)}: #{offense}"
end