namespace :hooks do

desc 'Print a list of object names that can be hooked'
task :objects => :environment do
  puts ActiveRecord::Base.descendants.collect(&:name).collect(&:underscore).sort
end

desc 'Print a list of event names for a given object, e.g. hooks:events[host/managed]'
task :events, [:object] => :environment do |t,args|
  model = begin
            args[:object].camelize.constantize
          rescue NameError => e
            fail("Unknown model #{args[:object]}, run hooks:objects to get a list (#{e.message})")
          end

  events = ActiveRecord::Callbacks::CALLBACKS.map(&:to_s).reject { |e| e.start_with?('around_') }
  events.concat(['create', 'destroy', 'update']) if model.included_modules.include?(Orchestration)
  puts events.sort
end

end