====
TODO
====

Implementation
--------------

[DONE] Convert the criteria classes to use interfaces. Then, instead of
subclassing these in the voting methods, they would implement them. This will
make zope.interface a dependency.

[DONE] Copy multi-doctest file test suite code from txULS/soom to here.

[DONE] Add a new docs/methods directory and a file for each voting method.

[IN PROGRESS] Finish implementing the single-winner voting methods.

Implement the Multi-winner voting methods.

Implement the proxy and random voting methods.

Do research on distance-based voting:

 * in particular, defining a metric space for candidates based on a set of
   preferences

 * then taking the square root of the sum of the squares, getting the
   n-dimensional distance 

Testing
-------

[IN PROGRESS] Add doctests for each voting method.

Add a make target that tests the source dist:

 * create a temp dir

 * untar the dist there

 * run the unit tests and doctests against that directory

Documentation
-------------

 * Change uppercase doc files to lower case (with the exceptions of the
   standard ones like README, TODO, etc.) 

 * Updated the sphinx configuration file to use ballotbox.meta

 * Add sidebar links in the generated docs

 * Autogenerate ReST files for API docs

   * the logic that drives this should go in ballotbox.util.docs

   * add a make target that imports and calls the appropriate functions to
     generate the API docs
