This looks ugly IMO. Given we already convert 2 of the options to true/false variables, perhaps we should do the same with --push-facts. Then you could have:

```
push_fact = ARGV.delete("--push-facts")
push_fact_parallel = ARGV.delete("--push-facts-parallel")
watch = ARGV.delete("--watch-facts")
if watch && ! ( push_fact || push_fact_parallel )
  ....
end
if push_fact
  ...
```

Looks better?