Isy
Guard clauses for argument type assertions can be messy:
def fullname segments=[]
raise 'User#fullname expects 'segments' to be an Array' if segments.is_a? Array
# ...
end
Setting aside that an issue of this type can be a sign of an
architectural problem, isy is meant to clean this up.
def fullname segments=[]
isy segments, Array
# ...
end
Isy takes a declarative approach to solving the problem. Instead of
dictating the contraints (and resulting response) to each argument type,
you can levelage Isy's simple interface.
Performance
It's not great against a more "native" implementation; but, where you lose a little in performance, you (may) gain in an ability to quickly reason about the code.
A native implementation is incredibly light (see above): no additional dependencies
and logistical overhead. Using Isy you're introducing an additional dependency and
better support for evaluation routines (by providing a block).
To run a comparison benchmark:
$ ruby spec/benchmark.rb
Installation
Add this line to your application's Gemfile:
gem 'isy'
Development
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.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/isy. 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.
License
The gem is available as open source under the terms of the MIT License.