module Prioritizer

Constants

DEFAULT
HEADERS
READOPT
WRITOPT

Public Instance Methods

call() click to toggle source
# File lib/assets/promo/lib/prioritizer.rb, line 14
def call
  load if File.exist?(output)
  repo = from_repo
  file = from_file
  inside_bin { write(merge(repo, file)) }
end

Protected Instance Methods

backup() click to toggle source
# File lib/assets/promo/lib/prioritizer.rb, line 61
def backup
  return unless File.exist?(output)
  bckp = File.basename(output, '.csv')
  bckp << ' '
  bckp << File.mtime(output).strftime('%Y-%b-%d %H-%M')
  bckp << '.csv'
  File.rename(output, bckp)
  puts "'#{Creq::Settings.bin}/#{output}' backup as '#{Creq::Settings.bin}/#{bckp}'."
end
from_file() click to toggle source
# File lib/assets/promo/lib/prioritizer.rb, line 44
def from_file
  return {} unless File.exist?(output)
  {}.tap {|res|
    CSV.foreach(output, READOPT) { |row|
      row.to_h.tap {|h| res[h.shift[1]] = h}
    }
  }
end
from_repo() click to toggle source
# File lib/assets/promo/lib/prioritizer.rb, line 35
def from_repo
  repo = requirements_repository
  repo = repo.query(query) unless query.empty?
  repo
    .inject([], :<<)
    .tap{|a| a.delete_at(0) unless repo.is_a? Array}
    .map{|r| {id: r.id, title: r.title}.merge(DEFAULT)}
end
merge(repo, file) click to toggle source
# File lib/assets/promo/lib/prioritizer.rb, line 23
def merge(repo, file)
  # TODO user add columns to output?
  repo.each {|i|
    next unless file[i[:id]]
    i[:status] = file[i[:id]][:status]
    i[:risk] = file[i[:id]][:risk]
    i[:effort] = file[i[:id]][:effort]
    i[:priority] = file[i[:id]][:priority]
  }
  repo
end
write(source) click to toggle source
# File lib/assets/promo/lib/prioritizer.rb, line 53
def write(source)
  backup
  CSV.open(output, "wb", WRITOPT){|csv|
    source.each{|i| csv << i.values}
  }
  puts "'#{Creq::Settings.bin}/#{output}' created."
end