Matchi
Collection of expectation matchers for Ruby.
Contact
- Home page: https://github.com/fixrb/matchi
- Bugs/issues: https://github.com/fixrb/matchi/issues
- Support: https://stackoverflow.com/questions/tagged/matchi
Rubies
Installation
Matchi is cryptographically signed.
To be sure the gem you install hasn't been tampered with, add my public key (if you haven't already) as a trusted certificate:
$ gem cert --add <(curl -Ls https://raw.github.com/fixrb/matchi/master/certs/gem-fixrb-public_cert.pem)
$ gem install matchi -P HighSecurity
The HighSecurity trust profile will verify all gems. All of Matchi's
dependencies are signed.
Usage
List all matchers
Matchi.constants # => [:BeFalse, :BeNil, :BeTrue, :Eql, :Equal, :Match, :RaiseException]
Built-in matchers
Equivalence matcher:
eql = Matchi.fetch(:Eql, 'foo')
eql.matches? { 'foo' } # => true
Identity matcher:
equal = Matchi.fetch(:Equal, :foo)
equal.matches? { :foo } # => true
Regular expressions matcher:
match = Matchi.fetch(:Match, /^foo$/)
match.matches? { 'foo' } # => true
Expecting errors matcher:
raise_exception = Matchi.fetch(:RaiseException, NameError)
raise_exception.matches? { Boom } # => true
Truth matcher:
be_true = Matchi.fetch(:BeTrue)
be_true.matches? { true } # => true
Untruth matcher:
be_false = Matchi.fetch(:BeFalse)
be_false.matches? { false } # => true
Nil matcher:
be_nil = Matchi.fetch(:BeNil)
be_nil.matches? { nil } # => true
Custom matchers
Custom matchers can easily be defined for expressing expectations.
Be the answer matcher:
module Matchi
class BeTheAnswer
def matches?
42.equal? yield
end
end
end
be_the_answer = Matchi.fetch(:BeTheAnswer)
be_the_answer.matches? { 42 } # => true
Be prime matcher:
require 'prime'
module Matchi
class BePrime
def matches?
Prime.prime? yield
end
end
end
be_prime = Matchi.fetch(:BePrime)
be_prime.matches? { 42 } # => false
Start with matcher:
module Matchi
class StartWith
def initialize expected
@expected = expected
end
def matches?
!Regexp.new("^#{@expected}").match(yield).nil?
end
end
end
start_with = Matchi.fetch(:StartWith, '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.