class Octaccord::Command::Scan

Public Class Methods

new(client, repos, replace = nil, **options) click to toggle source
# File lib/octaccord/command/scan.rb, line 6
def initialize(client, repos, replace = nil, **options)
  if options[:format] == "json"
    formatter = nil
  else
    formatter = Octaccord::Formatter.build(formatter: options[:format] || :text)
  end
  if query = options[:search]
    items = search(client, repos, query, formatter)
  else
    items = scan(client, repos, options[:type], formatter)
  end
  format(items, formatter, replace)
end

Public Instance Methods

corss_reference(parents, children, negop) click to toggle source
# File lib/octaccord/command/scan.rb, line 73
def corss_reference(parents, children, negop)
  if $OCTACCORD_DEBUG
    STDERR.puts "* PARENTS: #{parents.map{|i| i.number}.join(', ')}"
    STDERR.puts "* CHILDREN: #{children.map{|i| i.number}.join(', ')}"
    STDERR.puts "* NEGOP: #{negop}"
  end

  refered_parents = []
  refering_children = []

  parents.each do |parent|
    STDERR.puts "ABOUT PARENT: #{parent.number}:" if $OCTACCORD_DEBUG
    children.each do |child|
      Octaccord::Formatter::Issue.new(child).references.each do |refer_num|
        STDERR.puts "  child #{child.number} refers #{refer_num} #{parent.number.to_i == refer_num ? " FOUND" : "" }" if $OCTACCORD_DEBUG
        if parent.number.to_i == refer_num
          STDERR.puts "FOUND #{refer_num}" if $OCTACCORD_DEBUG
          refered_parents << parent
          refering_children << child
        end
      end
    end
  end

  refered_parents.uniq!
  refering_children.uniq!

  if negop
    return [parents-refered_parents, children-refering_children]
  else
    return [refered_parents, refering_children]
  end
end
format(issues, formatter, replace = nil) click to toggle source
# File lib/octaccord/command/scan.rb, line 107
def format(issues, formatter, replace = nil)
  if formatter == nil # raw format
    print issues.to_s
    return
  end

  issues.each do |issue|
    formatter << issue
  end
  formatter.order(replace) if replace
  print formatter.to_s
end
refered(parents, issues, negop) click to toggle source
# File lib/octaccord/command/scan.rb, line 68
def refered(parents, issues, negop)
  parents, children = corss_reference(parents, issues, negop)
  return parents
end
refers(parents, issues, negop) click to toggle source
# File lib/octaccord/command/scan.rb, line 63
def refers(parents, issues, negop)
  parents, children = corss_reference(parents, issues, negop)
  return children
end
scan(client, repos, type, formatter) click to toggle source
# File lib/octaccord/command/scan.rb, line 55
def scan(client, repos, type, formatter)
  if type == "pr"
    issues = client.issues(repos).select{|issue| issue.pull_request}
  else
    issues = client.issues(repos).select{|issue| not issue.pull_request}
  end
end