This simple Reverse Polish Notation (RPN) Calculator is built to be composable. It is a command-line program that (as of this writing) has the following features:
Ability to operate in console mode or take input by file
Support for a quit command (via
q) in addition to EOF (or
Graceful recovery from input errors such as invalid operations (e.g., trying to perform addition with only 1 operand)
Install it locally like so:
$ hub clone gary/calc $ cd calc $ rake install:local
After installing it, invoke it as follows:
$ calc [optional-file]
No runtime dependencies
Classes abide by the Single Responsibility Principle
All components (except the
Main) strive to be loosely coupled and highly reusable
Public interfaces for all classes have:
Distinct earmarks via YARD’s
Documentation of inputs, outputs, exceptions raised, and return values
Maintenance friendly signatures (i.e., exclusive use of keyword arguments)
All member variables accessed through
attr_macros to show intent and are grouped at the top of each class declaration
Calculatoris built to be composable: New operations can be added with ease
Interfaceis also built with extension to new, IO-like interfaces in mind
If I was to spend more time on this project, I would do two things:
Mutation test it. I feel that I did a thorough job of designing my components to minimize surprise and control user input to provide a good user experience, but I human. Mutation testing can find additional code that is either not covered or does not have a specced side effect. Maybe next time.
Make its output less “echo-ey”. While I do feel that the output is intelligible, I believe it could be improved to, say, only return either the sole operand (in the case of single item, non-sign input) or the result of an operation (in the case of a multi-item input that could be a complex calculation).
After checking out the repo, run
bin/setup to install dependencies. Then, run
rake spec to run the tests. You can also run
bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run
bundle exec rake install. To release a new version, update the version number in
version.rb, and then run
bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the
.gem file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/gary/calc. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
The gem is available as open source under the terms of the MIT License.