class Chutney::UseOutline

service class to lint for using outline

Public Instance Methods

add_issue(lhs, rhs, pct) click to toggle source
Calls superclass method Chutney::Linter#add_issue
# File lib/chutney/linter/use_outline.rb, line 24
def add_issue(lhs, rhs, pct)
  super(I18n.t('linters.use_outline',
               pct: pct,
               lhs_name: lhs[:name],
               lhs_line: lhs[:reference][:line],
               rhs_name: rhs[:name],
               rhs_line: rhs[:reference][:line]),
              feature)
end
check_similarity(scenarios) click to toggle source
# File lib/chutney/linter/use_outline.rb, line 10
def check_similarity(scenarios)
  scenarios.product(scenarios) do |lhs, rhs|
    next if lhs == rhs
    next if lhs[:reference][:line] > rhs[:reference][:line]

    similarity = determine_similarity(lhs[:text], rhs[:text])
    next unless similarity >= 0.95

    similarity_pct = similarity.round(3) * 100

    add_issue(lhs, rhs, similarity_pct)
  end
end
determine_similarity(lhs, rhs) click to toggle source
# File lib/chutney/linter/use_outline.rb, line 34
def determine_similarity(lhs, rhs)
  matcher = Amatch::Jaro.new(lhs)
  matcher.match(rhs)
end
gather_scenarios(feature) click to toggle source
# File lib/chutney/linter/use_outline.rb, line 39
def gather_scenarios(feature)
  scenarios = []
  return scenarios if feature.nil? || !feature.tests

  scenarios do |_feature, scenario|
    next unless scenario.steps
    next if scenario.steps.empty?

    scenarios.push generate_reference(feature, scenario)
  end
  scenarios
end
generate_reference(feature, scenario) click to toggle source
# File lib/chutney/linter/use_outline.rb, line 52
def generate_reference(feature, scenario)
  reference = {}
  reference[:reference] = location(feature, scenario, nil)
  reference[:name] = "#{scenario.keyword}: #{scenario.name}"
  reference[:text] = scenario.steps.map { |step| render_step(step) }.join ' '
  reference
end
lint() click to toggle source
# File lib/chutney/linter/use_outline.rb, line 6
def lint
  check_similarity(gather_scenarios(feature))
end