use gem spec for dependency management, not gemfile
refactor code so we can actually write tests