Sha256: 1fea224681a00057678fb21e3c89f85fca7ee489930a614c5ab63c3bbd22f0ec

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

require 'open3'

require 'rake_flow_visualizer/task'


module RakeFlowVisualizer

  def self.parse(text)
    lines = text.split("\n").map(&:strip)
    parent = nil
    lines.each do |line|
      if line[0..4] == 'rake '
        parent_name = line[5..-1]
        parent = Task.find_or_create(parent_name)
        next
      end
      raise unless parent
      dependency_name = line
      dependency = Task.find_or_create(dependency_name)
      parent.dependencies << dependency
    end
    Task.all.each do |task|
      print_task(0, task, [])
      puts
    end
  end
  
  def self.print_task(depth, task, ignore)
    return if ignore.include?(task)
    ignore << task
    print "|" * depth
    puts task
    task.dependencies.each { |dependency| print_task(depth + 1, dependency, ignore) }
  end
  
  def self.run
    _stdout, status = Open3.capture2('rake --help')
    raise 'can not find rake, is it installed?' unless status.success?
    stdout, status = Open3.capture2('rake -P')
    unless status.success?
      puts stdout
      raise "executing 'rake -P' resulted in an exception"
    end
    puts "--- Rake Flow Visualizer ---"
    puts "The following shows a list for every task that can be run."
    puts "Each list will have the requisites for the task and the order that they will be executed."
    puts
    puts
    parse(stdout)
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rake_flow_visualizer-0.0.0 lib/rake_flow_visualizer.rb