namespace :dep do desc ‘Produces a graph output from dependencies.yml (outputs to dependencies.yml by default)’

task :graph, [:name] do |t, args|
  name = args[:name] || "dependencies.svg"

  format = name[/^.*\.(\w*)$/, 1].to_sym

  # Remove Rails classes, self-calls, and inter-class calls
  filter = DependencyGrapher::Filter.new
  filter.load_file
  filter.filter

  # Tag methods in dependcies as
  analyzer = DependencyGrapher::Analyzer.new(filter.dependencies)
  analyzer.set_method_types
  analyzer.set_dependency_flags

  grapher = DependencyGrapher::Grapher.new(analyzer.dependencies)
  grapher.output(format => name)
end

namespace :list do
  desc 'List known classes in project from autoload_paths'
  task :all do
    classes = DependencyGrapher::GetKnownClasses.call
    classes.each do |klass|
      p klass
    end
  end

  desc 'List known classes in app/services'
  task :services do
    classes = DependencyGrapher::GetKnownClasses.call(:services)
    classes.each do |klass|
      p klass
    end
  end

  desc 'List known classes in app/controllers'
  task :controllers do
    classes = DependencyGrapher::GetKnownClasses.call(:controllers)
    classes.each do |klass|
      p klass
    end
  end
end

end