Class: CukeLinter::Linter

Inherits:
Object
  • Object
show all
Defined in:
lib/cuke_linter/linters/linter.rb

Overview

A generic linter that can be used to make arbitrary linting rules

Instance Method Summary collapse

Constructor Details

#initialize(name: nil, message: nil, rule: nil) ⇒ Linter

Creates a new linter object



8
9
10
11
12
# File 'lib/cuke_linter/linters/linter.rb', line 8

def initialize(name: nil, message: nil, rule: nil)
  @name    = name || self.class.name.split('::').last
  @message = message || "#{self.name} problem detected"
  @rule    = rule
end

Instance Method Details

#lint(model) ⇒ Object

Lints the given model and returns linting data about said model



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/cuke_linter/linters/linter.rb', line 20

def lint(model)
  raise 'No linting rule provided!' unless @rule || respond_to?(:rule)

  problem_found = respond_to?(:rule) ? rule(model) : @rule.call(model)

  if problem_found
    problem_message = respond_to?(:message) ? message : @message

    if model.is_a?(CukeModeler::FeatureFile)
      { problem: problem_message, location: "#{model.path}" }
    else
      { problem: problem_message, location: "#{model.get_ancestor(:feature_file).path}:#{model.source_line}" }
    end
  else
    nil
  end
end

#nameObject

Returns the name of the linter



15
16
17
# File 'lib/cuke_linter/linters/linter.rb', line 15

def name
  @name
end