def self.task(klass = Task)
self.internal_init
t = klass.new
yield(t)
t.prepare
existing_watch = self.watches[t.name]
if self.running && existing_watch
self.pending_watch_states[existing_watch.name] = existing_watch.state
self.unwatch(existing_watch)
end
if self.watches[t.name] || self.groups[t.name]
abort "Task name '#{t.name}' already used for a Task or Group"
end
t.valid? || abort("Task '#{t.name}' is not valid (see above)")
self.watches[t.name] = t
self.pending_watches << t
if t.group
if self.watches[t.group]
abort "Group name '#{t.group}' already used for a Task"
end
self.groups[t.group] ||= []
self.groups[t.group] << t
end
t.register!
if self.running && existing_watch
applog(t, :info, "#{t.name} Reloaded config")
elsif self.running
applog(t, :info, "#{t.name} Loaded config")
end
end