Module: RakeFlowVisualizer

Defined in:
lib/rake_flow_visualizer.rb,
lib/rake_flow_visualizer/task.rb

Defined Under Namespace

Classes: Task

Class Method Summary collapse

Class Method Details

.parse(text) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/rake_flow_visualizer.rb', line 8

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


28
29
30
31
32
33
34
# File 'lib/rake_flow_visualizer.rb', line 28

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

.runObject



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/rake_flow_visualizer.rb', line 36

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