I would give myself a 2.5 on Functionality. My implementation of encrypt and decrypt was mostly successful, but sometimes my program has trouble handling spaces. Namely, my test to decrypt without a date passed in fails because my output is "helloworld" instead of "hello world." I also figured out how to successfully implement command line interfaces, but again, occasionally there are issues with spaces when messages are decrypted.
I would give myself a 3 for OOP. I created reasonable classes and was very intentional when planning where specific methods should go and which classes should know about what behavior.
I would give myself a 3 for Ruby Conventions and Mechanics. My lines are all indented and spaced properly and only 4 lines are too long. I put a lot of thought into my variable names and tried to write my code to be easily readable to future users. I branched out in my use of enumerables (like map and find_key) and created hashes when appropriate.
I would give myself a 2 for TDD, only because I did not test edge cases. Expected behavior is fully tested and SimpleCov shows 100% test coverage. I used tests to drive my code writing and found my tests especially useful during the refactoring process -- code failures and errors helped me make sure that refactoring didn't break my program.
I would give myself a 3 for Version Control. I made a concerted effort with this project to try to write clear commit messages and detailed pull requests. I made 61 commits and 12 pull requests. I added discrete pieces of functionality to my master branch using pull requests and committed often.