OK, so there are a lot of links to commits in this article. Sorry! I would paste more code blocks into the article, but for the most part, the commits grow off eachother (like commits do...), so it doesn't always wind up with small enough chunks of code to show without having to put all the functions they depend on etc for it to make sense.
I put the tests and the initial version in code blocks in the article, and I may port a few more diffs into the article code blocks instead of just links to GitHub, but bear with me here...
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.