[Win32utils-devel] taskscheduler api change?

Daniel Berger djberg96 at gmail.com
Mon Feb 22 21:05:27 EST 2010


After going back over the win32-taskscheduler API, I'm leaning towards 
making a significant API change. I'd like to change the constructor.

At the moment it looks like this:

server = TaskScheduler.new(name = nil, trigger = nil)

Which is a shortcut for:

server = TaskScheduler.new
server.new_work_item(name, trigger)

My philosophy at the time was that you typically create one task at a 
time in practice, so this was convenient. However, when I look at that 
code now it makes me think that the +server+ is tied to that particular 
task, which it isn't. The second form is clearer.

On top of that, we don't have a way to set the root folder at the 
moment. Combined with my reasons above, I'd like to change the 
constructor to this:

server = TaskScheduler.new(folder = "\\", force = false)

Internally that would look something like this:

unless service.FolderExists(folder)
   if force
     raise ArgumentError, "folder '#{folder}' does not exist"

root = service.GetFolder(folder)

I could put in type checks to make sure people coming from 0.2.0 don't 
do something crazy by mistake, along with some warnings.

The alternative is to just leave the constructor alone and add 
TaskScheduler#folder and TaskScheduler#folder= methods that would 
require a separate method call, and reset our @root instance variable. 
The downside, besides feeling clunky, is that it means the end user 
would be making an unnecessary connection in the constructor, and would 
have remember to make that call before making any other calls.

What say you?



More information about the win32utils-devel mailing list