Matchi

Build Status Dependency Status Gem Version Inline docs Documentation

Collection of expectation matchers for Ruby.

Contact

Rubies

Installation

Add this line to your application's Gemfile:

gem 'matchi'

And then execute:

$ bundle

Or install it yourself as:

$ gem install matchi

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

Versioning

Matchi follows Semantic Versioning 2.0.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

License

See LICENSE.md file.