I worked on a system of "red-green-refactor" with this project. I first wanted to get all the methods to pass per the interaction patterns listed, then refactor to see if I could improve my code.
I believe this refactoring was very helpful and allowed me to simplify my code substantially. In this process I was able to add a module and delete 2 extraneous classes and a module that went along with them, plus any associated tests. I was able to use better enumerators and methods and implement a hash where I thought it relevant.
My self-evaluation based on the rubric (linked here) is below.
I was able to write working encrypt and decrypt methods, which are able to be used in the command line. I opted to not try for the cracking method as I felt refactoring was a better use of my time.
I implemented a module in a logical manner and used encapsulation in an appropriate way. I'm able to explain why I made the design choices that I did and why those choices improve organization.
I used proper indentation, spacing and good line length, and all class, method, variable and file names follow convention. I believe I chose the right enumerable for the job. Some of my methods are long however well and I struggled to see how I could reduce their line length, which keeps this from being a 4.
I tested every method at both the unit and integration level, and wrote tests before methods. However, I did not implement mocks or stubs as I could not find a way to implement one in a good way. I did have 100% test coverage however.