Matchi
Collection of expectation matchers for Ruby.
Contact
- Home page: https://github.com/fixrb/matchi
- Bugs/issues: https://github.com/fixrb/matchi/issues
Rubies
Installation
Add this line to your application’s Gemfile:
ruby
gem 'matchi'
And then execute:
$ bundle
Or install it yourself as:
$ gem install matchi
Usage
Built-in matchers
Equivalence matcher:
ruby
eql = Matchi::Matchers::Eql::Matcher.new('foo')
eql.matches? { 'foo' } # => true
Identity matcher:
ruby
equal = Matchi::Matchers::Equal::Matcher.new(:foo)
equal.matches? { :foo } # => true
Regular expressions matcher:
ruby
match = Matchi::Matchers::Match::Matcher.new(/^foo$/)
match.matches? { 'foo' } # => true
Expecting errors matcher:
ruby
raise_exception = Matchi::Matchers::RaiseException::Matcher.new(NameError)
raise_exception.matches? { Boom } # => true
Truth matcher:
ruby
be_true = Matchi::Matchers::BeTrue::Matcher.new
be_true.matches? { true } # => true
Untruth matcher:
ruby
be_false = Matchi::Matchers::BeFalse::Matcher.new
be_false.matches? { false } # => true
Nil matcher:
ruby
be_nil = Matchi::Matchers::BeNil::Matcher.new
be_nil.matches? { nil } # => true
Custom matchers
Custom matchers can easily be defined for expressing expectations. They can be any Ruby class that responds to matches?
, to_s
and to_h
instance methods.
A Be the answer matcher:
```ruby module Matchi module Matchers module BeTheAnswer class Matcher def matches? 42.equal? yield end
def to_s
'be_the_answer'
end
def to_h
{ BeTheAnswer: [] }
end
end
end end end
be_the_answer = Matchi::Matchers::BeTheAnswer::Matcher.new be_the_answer.matches? { 42 } # => true ```
A Be prime matcher:
```ruby require ‘prime’
module Matchi module Matchers module BePrime class Matcher def matches? Prime.prime? yield end
def to_s
'be_prime'
end
def to_h
{ BePrime: [] }
end
end
end end end
be_prime = Matchi::Matchers::BePrime::Matcher.new be_prime.matches? { 42 } # => false ```
A Start with matcher:
```ruby module Matchi module Matchers module StartWith class Matcher def initialize(expected) @expected = expected end
def matches?
!Regexp.new("^#{@expected}").match(yield).nil?
end
def to_s
'start_with'
end
def to_h
{ StartWith: [@expected] }
end
end
end end end
start_with = Matchi::Matchers::StartWith::Matcher.new(‘foo’) start_with.matches? { ‘foobar’ } # => true ```
Security
As a basic form of security Matchi provides a set of SHA512 checksums for
every Gem release. These checksums can be found in the checksum/
directory.
Although these checksums do not prevent malicious users from tampering with a
built Gem they can be used for basic integrity verification purposes.
The checksum of a file can be checked using the sha512sum
command. For
example:
$ sha512sum pkg/matchi-0.0.1.gem
548d9f669ded4e622182791a5390aaceae0bf2e557b0864f05a842b0be2c65e10e1fb8499f49a3b9efd0e8eaeb691351b1c670d6316ce49965a99683b1071389 pkg/matchi-0.0.1.gem
Versioning
Matchi follows Semantic Versioning 2.0.
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 a new Pull Request
License
See LICENSE.md
file.
This project is sponsored by: