FirstAndOnly
Get the first element from an enumerable, and assert that there is only one element to take.
[:just_one].first_and_only! # => :just_one
[].first_and_only! # => 0 (Enumerable::FirstAndOnly::CountNotOne)
[:one, :and_two].first_and_only! # => 2 (Enumerable::FirstAndOnly::CountNotOne)
Why?
Sometimes in a spec you have a collection object that you know only has one element. You set it up this way. Later spec refactors may accidentally introduce a second element. To prevent accidental false positives, and to make fixing failures introduced by this easier, you can use #first_and_only! to codify the "there is only one" assumption.
Another common use case for #first_and_only is id assertions on HTML documents. A valid HTML document can only have one occurrence of each id attribute, but authoring tools and browsers don't typically enforce this. If you hang your JavaScript of the "only one" assumption of id attributes, you should enforce this with a specification.
This gem follows the same line of thinking as the fetching gem
Installation
Add this line to your application's Gemfile:
gem 'first_and_only'
And then execute:
$ bundle
Or install it yourself as:
$ gem install first_and_only
Running specs
bundle exec rspec
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request