class Pronto::Flay

Public Instance Methods

files() click to toggle source
# File lib/pronto/flay.rb, line 23
def files
  @files ||= ruby_patches.map(&:new_file_full_path)
end
flay() click to toggle source

The current Flay (2.8.0) takes care of filtering files by looking at .flayignore. Saving the returned Flay object at @flay so we can inspect it and build the messages Array.

# File lib/pronto/flay.rb, line 19
def flay
  @flay ||= ::Flay.run(files)
end
level(hash) click to toggle source
# File lib/pronto/flay.rb, line 51
def level(hash)
  same?(hash) ? :error : :warning
end
masses() click to toggle source
# File lib/pronto/flay.rb, line 80
def masses
  flay.masses
end
message(hash) click to toggle source
# File lib/pronto/flay.rb, line 59
def message(hash)
  match = same?(hash) ? 'Identical' : 'Similar'
  location = nodes_for(hash).map do |node|
    "#{File.basename(node.file)}:#{node.line}"
  end

  "#{match} code found in #{location.join(', ')} (mass = #{masses[hash]})"
end
messages() click to toggle source
# File lib/pronto/flay.rb, line 27
def messages
  nodes.map do |node|
    patch = patch_for_node(node)

    line = patch.added_lines.find do |added_line|
      added_line.new_lineno == node.line
    end

    new_message(line, node) if line
  end.flatten.compact
end
new_message(line, node) click to toggle source
# File lib/pronto/flay.rb, line 45
def new_message(line, node)
  path = line.patch.delta.new_file[:path]
  hash = node.structural_hash
  Message.new(path, line, level(hash), message(hash), nil, self.class)
end
nodes() click to toggle source
# File lib/pronto/flay.rb, line 72
def nodes
  result = []
  masses.keys.each do |hash|
    nodes_for(hash).each { |node| result << node }
  end
  result
end
nodes_for(hash) click to toggle source
# File lib/pronto/flay.rb, line 68
def nodes_for(hash)
  flay.hashes[hash]
end
patch_for_node(node) click to toggle source
# File lib/pronto/flay.rb, line 39
def patch_for_node(node)
  ruby_patches.find do |patch|
    patch.new_file_full_path == node.file
  end
end
run() click to toggle source
# File lib/pronto/flay.rb, line 6
def run
  if files.any?
    flay.analyze
    messages
  else
    []
  end
end
same?(hash) click to toggle source
# File lib/pronto/flay.rb, line 55
def same?(hash)
  flay.identical[hash]
end