48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
IGNORED_CLASSES = ['RSpec::Core::ExampleGroup']
 | 
						|
DUMP_FILE = 'rubydeps.dump'
 | 
						|
DOT_FILE  = 'rubydeps.dot'
 | 
						|
SVG_FILE  = 'rubydeps.svg'
 | 
						|
 | 
						|
task :default => "rubydeps:svg"
 | 
						|
 | 
						|
file DUMP_FILE do
 | 
						|
  sh 'RUBYDEPS=y rspec'
 | 
						|
end
 | 
						|
 | 
						|
file DOT_FILE => DUMP_FILE do
 | 
						|
  ignore_regexp = IGNORED_CLASSES.join "|"
 | 
						|
  sh "rubydeps --class-name-filter='^(?!#{ignore_regexp})'"
 | 
						|
  dot = File.read(DOT_FILE)
 | 
						|
  dot.gsub!('rankdir=LR', 'rankdir=TB')
 | 
						|
  # Unfortunately due to https://github.com/dcadenas/rubydeps/issues/4
 | 
						|
  # we need to manually exclude some superfluous dependencies which
 | 
						|
  # go in the wrong direction.
 | 
						|
  dot.gsub!(/\\\n/, '')
 | 
						|
  dot.gsub!(/^(?=\s+Object )/, '#')
 | 
						|
  dot.gsub!(/^(?=\s+"Pacemaker::Resource::Meta" ->)/, '#')
 | 
						|
  dot.gsub!(/^(?=\s+"Pacemaker::CIBObject" ->)/, '#')
 | 
						|
  dot.gsub!(/^(?=\s+"Chef::Mixin::Pacemaker::StandardCIBObject" -> "(?!Pacemaker::CIBObject))/, '#')
 | 
						|
  dot.gsub!(/^(?=\s+"Chef::Mixin::Pacemaker::RunnableResource" -> "(?!Pacemaker::CIBObject))/, '#')
 | 
						|
  File.open(DOT_FILE, 'w') { |f| f.write(dot) }
 | 
						|
end
 | 
						|
 | 
						|
file SVG_FILE => DOT_FILE do
 | 
						|
  sh "dot -Tsvg #{DOT_FILE} > #{SVG_FILE}"
 | 
						|
end
 | 
						|
 | 
						|
namespace :rubydeps do
 | 
						|
  desc "Clean rubydeps dump"
 | 
						|
  task :clean do
 | 
						|
    FileUtils.rm_f([DUMP_FILE])
 | 
						|
  end
 | 
						|
 | 
						|
  desc "Regenerate #{DUMP_FILE}"
 | 
						|
  task :dump => DUMP_FILE
 | 
						|
 | 
						|
  desc "Regenerate #{DOT_FILE}"
 | 
						|
  task :dot  => DOT_FILE
 | 
						|
 | 
						|
  desc "Regenerate #{SVG_FILE}"
 | 
						|
  task :svg  => SVG_FILE
 | 
						|
end
 |