abstracted classes into a module
packaged everything into a gem