spec_combos 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.gitignore +19 -0
- data/.rspec +1 -0
- data/.travis.yml +10 -0
- data/Gemfile +4 -0
- data/Guardfile +9 -0
- data/LICENSE.txt +22 -0
- data/README.md +49 -0
- data/Rakefile +7 -0
- data/lib/spec_combos.rb +7 -0
- data/lib/spec_combos/all_matcher.rb +27 -0
- data/lib/spec_combos/and_matcher.rb +44 -0
- data/lib/spec_combos/any_matcher.rb +28 -0
- data/lib/spec_combos/collection_matcher.rb +39 -0
- data/lib/spec_combos/matcher_combiner.rb +74 -0
- data/lib/spec_combos/version.rb +3 -0
- data/spec/lib/spec_combos/all_matcher_spec.rb +39 -0
- data/spec/lib/spec_combos/and_matcher_spec.rb +47 -0
- data/spec/lib/spec_combos/any_matcher_spec.rb +39 -0
- data/spec/lib/spec_combos/matcher_combiner_spec.rb +16 -0
- data/spec/spec_helper.rb +1 -0
- data/spec_combos.gemspec +26 -0
- metadata +150 -0
- metadata.gz.sig +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 70820418ff04ef8f2f40f0382ba4ed28d2375211
|
4
|
+
data.tar.gz: 4adfb37fcde42123dad029c4514c40ba651b3dfa
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6ac030cb28dc2164a38fb605440a0ad0dd4bfac1dcf869ed9a615e79c6a3bd938ccbd4637eace6db9cf8d98f06bddf5bc34c30d65063a1cc6aa169038436066a
|
7
|
+
data.tar.gz: c6fced32dc8f7eb9b20777ba55074996fa5977fa136ffe2c9c9def008d9e4b6374d8d862bb5d1eb2a3ee3ed98161fa95236d00137c43a79345cce76e83c600e7
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data.tar.gz.sig
ADDED
Binary file
|
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Philippe Bourgau
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# SpecCombos
|
2
|
+
|
3
|
+
Rspec matchers that can combine other matchers together, to allow precise testing elements of a sequence for example. The goal is to get :
|
4
|
+
|
5
|
+
* concise and readable specs
|
6
|
+
* factorized code
|
7
|
+
* explicit assertion failure messages
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
gem 'spec_combos'
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install spec_combos
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
The matchers can be used like any matcher, just taking other matchers as arguments.
|
26
|
+
|
27
|
+
### All matcher
|
28
|
+
|
29
|
+
expect([1,3,5]).to all_ { be_odd }
|
30
|
+
|
31
|
+
### Any matcher
|
32
|
+
|
33
|
+
expect([2,1,4]).to have_any_that { be_odd }
|
34
|
+
|
35
|
+
### And matcher
|
36
|
+
|
37
|
+
expect(2).to and_(be_even, be_instance_of(Fixnum))
|
38
|
+
|
39
|
+
It can be composed with 'any' or 'all' matchers :
|
40
|
+
|
41
|
+
expect([1,3,5]).to all_ { and_(be_odd, be_instance_of(Fixnum)) }
|
42
|
+
|
43
|
+
## Contributing
|
44
|
+
|
45
|
+
1. Fork it
|
46
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
47
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
48
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
49
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
data/lib/spec_combos.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
module SpecCombos
|
2
|
+
|
3
|
+
# Matcher to verify that all items match something else
|
4
|
+
class AllMatcher
|
5
|
+
include MatcherCombiner
|
6
|
+
include MatcherCombiner::And
|
7
|
+
include CollectionMatcher
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def short_description
|
12
|
+
"all"
|
13
|
+
end
|
14
|
+
|
15
|
+
def failure_summary_for_should
|
16
|
+
"expected #{actual_items} to #{description}, but the following were not:"
|
17
|
+
end
|
18
|
+
|
19
|
+
def failure_summary_for_should_not
|
20
|
+
"expected #{actual_items} not to #{description}, but all were:"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def all_(&item_matcher_proc)
|
26
|
+
SpecCombos::AllMatcher.new(&item_matcher_proc)
|
27
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module SpecCombos
|
2
|
+
|
3
|
+
# Matcher to verify that an item matches all matchers in a list
|
4
|
+
class AndMatcher
|
5
|
+
include MatcherCombiner
|
6
|
+
include MatcherCombiner::And
|
7
|
+
|
8
|
+
def initialize(*matchers)
|
9
|
+
@matchers = matchers
|
10
|
+
end
|
11
|
+
|
12
|
+
def description
|
13
|
+
descriptions = @matchers.map &:description
|
14
|
+
|
15
|
+
if descriptions.size <= 2
|
16
|
+
descriptions.join(" and ")
|
17
|
+
else
|
18
|
+
descriptions[0..-2].join(", ") + " and " + descriptions.last
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def perform_matches(actual)
|
25
|
+
@matchers.map do |matcher|
|
26
|
+
{ matcher: matcher,
|
27
|
+
match: matcher.matches?(actual)}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def failure_summary_for_should
|
32
|
+
"expected #{actual} to #{description}, but:"
|
33
|
+
end
|
34
|
+
|
35
|
+
def failure_summary_for_should_not
|
36
|
+
"expected #{actual} not to #{description}, but it is all:"
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def and_(*matchers)
|
43
|
+
SpecCombos::AndMatcher.new(*matchers)
|
44
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module SpecCombos
|
2
|
+
|
3
|
+
# Matcher to verify that all items match something else
|
4
|
+
class AnyMatcher
|
5
|
+
include MatcherCombiner
|
6
|
+
include MatcherCombiner::Or
|
7
|
+
include CollectionMatcher
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def short_description
|
12
|
+
"have any that"
|
13
|
+
end
|
14
|
+
|
15
|
+
def failure_summary_for_should
|
16
|
+
"expected #{actual_items} to #{description}, but none were:"
|
17
|
+
end
|
18
|
+
|
19
|
+
def failure_summary_for_should_not
|
20
|
+
"expected #{actual_items} not to #{description}, but the following were:"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def any_(&item_matcher_proc)
|
26
|
+
SpecCombos::AnyMatcher.new(&item_matcher_proc)
|
27
|
+
end
|
28
|
+
alias :have_any_that :any_
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module SpecCombos
|
2
|
+
|
3
|
+
# Mixin for the :and and :any collection matchers
|
4
|
+
module CollectionMatcher
|
5
|
+
|
6
|
+
def initialize(&item_matcher_proc)
|
7
|
+
@item_matcher_proc = item_matcher_proc
|
8
|
+
end
|
9
|
+
|
10
|
+
def description
|
11
|
+
"#{short_description} #{new_matcher.description}"
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def perform_matches(actual_items)
|
17
|
+
actual_items.each_with_index.map do |item, index|
|
18
|
+
matcher = new_matcher
|
19
|
+
{ index: index,
|
20
|
+
item: item,
|
21
|
+
matcher: matcher,
|
22
|
+
match: matcher.matches?(item)}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def new_matcher
|
27
|
+
@item_matcher_proc.call
|
28
|
+
end
|
29
|
+
|
30
|
+
def failure_message_prefix(failure)
|
31
|
+
"[#{failure[:index]}] (#{failure[:item]}): "
|
32
|
+
end
|
33
|
+
|
34
|
+
def actual_items
|
35
|
+
@actual
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module SpecCombos
|
2
|
+
|
3
|
+
module MatcherCombiner
|
4
|
+
|
5
|
+
module And
|
6
|
+
def match_result
|
7
|
+
matches(NOT_MATCHING).empty?
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module Or
|
12
|
+
def match_result
|
13
|
+
!matches(MATCHING).empty?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def matches?(actual)
|
18
|
+
@actual = actual
|
19
|
+
@match_details = perform_matches(actual)
|
20
|
+
match_result
|
21
|
+
end
|
22
|
+
|
23
|
+
def failure_message_for_should
|
24
|
+
failure_message(MATCHING, failure_summary_for_should)
|
25
|
+
end
|
26
|
+
|
27
|
+
def failure_message_for_should_not
|
28
|
+
failure_message(NOT_MATCHING, failure_summary_for_should_not)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
attr_reader :actual
|
34
|
+
|
35
|
+
MATCHING = true
|
36
|
+
NOT_MATCHING = false
|
37
|
+
INDENT_WIDTH = 2
|
38
|
+
|
39
|
+
def failure_message(expected_match, summary)
|
40
|
+
summary + "\n" + indent(full_explanation(expected_match), INDENT_WIDTH)
|
41
|
+
end
|
42
|
+
def full_explanation(expected_match)
|
43
|
+
explanations(!expected_match).join("\n")
|
44
|
+
end
|
45
|
+
def explanations(expected_match)
|
46
|
+
matches(expected_match).map {|failure| explain(failure)}
|
47
|
+
end
|
48
|
+
def explain(failure)
|
49
|
+
failure_message_prefix(failure) + message(failure)
|
50
|
+
end
|
51
|
+
def failure_message_prefix(failure)
|
52
|
+
""
|
53
|
+
end
|
54
|
+
def message(failure)
|
55
|
+
failure[:matcher].send(message_selector(failure))
|
56
|
+
end
|
57
|
+
def message_selector(failure)
|
58
|
+
if failure[:match]
|
59
|
+
:failure_message_for_should_not
|
60
|
+
else
|
61
|
+
:failure_message_for_should
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def matches(expected_match)
|
66
|
+
@match_details.find_all {|detail| detail[:match] == expected_match}
|
67
|
+
end
|
68
|
+
|
69
|
+
def indent(text, tabs)
|
70
|
+
text.gsub(/^/, ' ' * tabs)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module SpecCombos
|
4
|
+
|
5
|
+
describe AllMatcher do
|
6
|
+
it 'matches collections with all matching elements' do
|
7
|
+
expect([1,3,5]).to all_ { be_odd }
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'does not match collections where not all elements match' do
|
11
|
+
expect([3,5,6]).not_to all_ { be_odd }
|
12
|
+
end
|
13
|
+
|
14
|
+
it "has a straigtforward description" do
|
15
|
+
matcher = all_ { be_odd }
|
16
|
+
|
17
|
+
expect(matcher.description).to eq "all #{be_odd.description}"
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'has an explicit should message' do
|
21
|
+
expect do
|
22
|
+
expect([1,2,3]).to all_ { be_odd }
|
23
|
+
|
24
|
+
end.to raise_error(RSpec::Expectations::ExpectationNotMetError,
|
25
|
+
"expected [1, 2, 3] to all be odd, but the following were not:\n" +
|
26
|
+
" [1] (2): expected odd? to return true, got false")
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'has an explicit should not message' do
|
30
|
+
expect do
|
31
|
+
expect([1,3]).not_to all_ { be_odd }
|
32
|
+
|
33
|
+
end.to raise_error(RSpec::Expectations::ExpectationNotMetError,
|
34
|
+
"expected [1, 3] not to all be odd, but all were:\n" +
|
35
|
+
" [0] (1): expected odd? to return false, got true\n" +
|
36
|
+
" [1] (3): expected odd? to return false, got true")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module SpecCombos
|
4
|
+
|
5
|
+
describe AndMatcher do
|
6
|
+
it 'matches items that matches all matchers' do
|
7
|
+
expect(2).to and_(be_even,
|
8
|
+
be_instance_of(Fixnum))
|
9
|
+
end
|
10
|
+
|
11
|
+
it "does not match items that don't match all matchers" do
|
12
|
+
expect(2).not_to and_(be_odd,
|
13
|
+
be_even)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "has a straigtforward description" do
|
17
|
+
matcher = and_(be_odd, be_even)
|
18
|
+
|
19
|
+
expect(matcher.description).to eq "#{be_odd.description} and #{be_even.description}"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "does not repeat 'and' in the description" do
|
23
|
+
matcher = and_(be_odd, be_even, be_instance_of(Fixnum))
|
24
|
+
|
25
|
+
expect(matcher.description).to eq "#{be_odd.description}, #{be_even.description} and #{be_instance_of(Fixnum).description}"
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'has an explicit should message' do
|
29
|
+
expect do
|
30
|
+
expect(1).to and_(be_odd, be_even)
|
31
|
+
|
32
|
+
end.to raise_error(RSpec::Expectations::ExpectationNotMetError,
|
33
|
+
"expected 1 to be odd and be even, but:\n" +
|
34
|
+
" expected even? to return true, got false")
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'has an explicit should not message' do
|
38
|
+
expect do
|
39
|
+
expect(2).not_to and_(be_even, be_instance_of(Fixnum))
|
40
|
+
|
41
|
+
end.to raise_error(RSpec::Expectations::ExpectationNotMetError,
|
42
|
+
"expected 2 not to be even and be an instance of Fixnum, but it is all:\n" +
|
43
|
+
" expected even? to return false, got true\n" +
|
44
|
+
" expected 2 not to be an instance of Fixnum")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module SpecCombos
|
4
|
+
|
5
|
+
describe AnyMatcher do
|
6
|
+
it 'matches collections with at least one matching element' do
|
7
|
+
expect([2,3,4]).to have_any_that { be_odd }
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'does not match collections where no element match' do
|
11
|
+
expect([2,4,6]).not_to have_any_that { be_odd }
|
12
|
+
end
|
13
|
+
|
14
|
+
it "has a straigtforward description" do
|
15
|
+
matcher = have_any_that { be_odd }
|
16
|
+
|
17
|
+
expect(matcher.description).to eq "have any that #{be_odd.description}"
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'has an explicit should message' do
|
21
|
+
expect do
|
22
|
+
expect([0,2]).to have_any_that { be_odd }
|
23
|
+
|
24
|
+
end.to raise_error(RSpec::Expectations::ExpectationNotMetError,
|
25
|
+
"expected [0, 2] to have any that be odd, but none were:\n" +
|
26
|
+
" [0] (0): expected odd? to return true, got false\n" +
|
27
|
+
" [1] (2): expected odd? to return true, got false")
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'has an explicit should not message' do
|
31
|
+
expect do
|
32
|
+
expect([1,4,6]).not_to have_any_that { be_odd }
|
33
|
+
|
34
|
+
end.to raise_error(RSpec::Expectations::ExpectationNotMetError,
|
35
|
+
"expected [1, 4, 6] not to have any that be odd, but the following were:\n" +
|
36
|
+
" [0] (1): expected odd? to return false, got true")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module SpecCombos
|
4
|
+
|
5
|
+
describe MatcherCombiner do
|
6
|
+
it 'can combine :all_ and :and_ matcher messages correctly' do
|
7
|
+
expect do
|
8
|
+
expect([1,2,3]).to all_{and_(be_odd, be_instance_of(Fixnum))}
|
9
|
+
|
10
|
+
end.to raise_error(RSpec::Expectations::ExpectationNotMetError,
|
11
|
+
"expected [1, 2, 3] to all be odd and be an instance of Fixnum, but the following were not:\n"+
|
12
|
+
" [1] (2): expected 2 to be odd and be an instance of Fixnum, but:\n"+
|
13
|
+
" expected odd? to return true, got false")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'spec_combos'
|
data/spec_combos.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'spec_combos/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "spec_combos"
|
8
|
+
spec.version = SpecCombos::VERSION
|
9
|
+
spec.authors = ["Philou"]
|
10
|
+
spec.email = ["philippe.bourgau@gmail.com"]
|
11
|
+
spec.description = %q{Rspec matchers to combine matchers together}
|
12
|
+
spec.summary = %q{Allows to build up matchers able to precisely match item from a collection for example}
|
13
|
+
spec.homepage = "http://github.com/philou/spec_combos"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "rspec", "~> 2.11"
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
24
|
+
spec.add_development_dependency "rake", "~> 10.1"
|
25
|
+
spec.add_development_dependency "guard-rspec", "~> 3.0"
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: spec_combos
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Philou
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDkjCCAnqgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMRkwFwYDVQQDDBBwaGls
|
14
|
+
aXBwZS5ib3VyZ2F1MRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/Is
|
15
|
+
ZAEZFgNjb20wHhcNMTMwOTIzMTEwOTA3WhcNMTQwOTIzMTEwOTA3WjBHMRkwFwYD
|
16
|
+
VQQDDBBwaGlsaXBwZS5ib3VyZ2F1MRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzAR
|
17
|
+
BgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
18
|
+
AQC8CpoqZwEbzXr55EUxdSplgn0MYZ9xPGO/XmRa8bD63n+JYWF0AS+mj452ZY18
|
19
|
+
rwM+yKrKhtsA+aJJdlOafgIUnY5SrZOr7v7kgc6T2YNoUj+M00Um2jv+shQbOtV6
|
20
|
+
qGp0Jw1HfPNUMVa+3pXZyAGCecN6rTnsZJIuW6KNaJUq6lEMVXanoTHgAKrH5aHd
|
21
|
+
Y6ofwQL86d6LDkC1S4p86iMUWvF34w8h5ItVo+JKlPRR22rzsK/ZKgNH3lfjbS6i
|
22
|
+
JWqPva70rL2xz5kCVn6DL7XhNZtqnAO4kvCQyQeWezvcoGXEnbHacKky7B+/WKec
|
23
|
+
OIWEwedl6j+X0OD5OYki3QaTAgMBAAGjgYgwgYUwCQYDVR0TBAIwADALBgNVHQ8E
|
24
|
+
BAMCBLAwHQYDVR0OBBYEFJnLz40Onu/dfpLSipU5FgTy6WLmMCUGA1UdEQQeMByB
|
25
|
+
GnBoaWxpcHBlLmJvdXJnYXVAZ21haWwuY29tMCUGA1UdEgQeMByBGnBoaWxpcHBl
|
26
|
+
LmJvdXJnYXVAZ21haWwuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQBGoH72KWYACGZl
|
27
|
+
cMHMJ9d/DRU7rynJ8c4xuuM4c3Ri8bGPqI/a1BAp4QPJApS4+ANXXJ220hslrekP
|
28
|
+
9/ExEKFiqiywh1clih9ttuN4cHqJzCP6QHqJznQrvaYToZLxGARDf3Mwz4mFSh4W
|
29
|
+
snSep53DZ1vrY2Gzmig/4PuBF4q3nhwPgxV6H3SH4/Py7QF5COZPQlCdBwPYczqW
|
30
|
+
XxIbXhRVXcgjBHT0w2HsXkOwmmYvBzbrfqtTx5NswwHcIeQZB/NID7berIf9awx3
|
31
|
+
yLcl1cmm5ALtJ/+Bkkmp0i4amXeTDMvq9r8PBsVsQwxYOYJBP+Umxz3PX6HjFHrQ
|
32
|
+
XdkXx3oZ
|
33
|
+
-----END CERTIFICATE-----
|
34
|
+
date: 2013-09-23 00:00:00.000000000 Z
|
35
|
+
dependencies:
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ~>
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '2.11'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ~>
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '2.11'
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: bundler
|
52
|
+
requirement: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ~>
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '1.3'
|
57
|
+
type: :development
|
58
|
+
prerelease: false
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ~>
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '1.3'
|
64
|
+
- !ruby/object:Gem::Dependency
|
65
|
+
name: rake
|
66
|
+
requirement: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ~>
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '10.1'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '10.1'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: guard-rspec
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ~>
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '3.0'
|
85
|
+
type: :development
|
86
|
+
prerelease: false
|
87
|
+
version_requirements: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ~>
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '3.0'
|
92
|
+
description: Rspec matchers to combine matchers together
|
93
|
+
email:
|
94
|
+
- philippe.bourgau@gmail.com
|
95
|
+
executables: []
|
96
|
+
extensions: []
|
97
|
+
extra_rdoc_files: []
|
98
|
+
files:
|
99
|
+
- .gitignore
|
100
|
+
- .rspec
|
101
|
+
- .travis.yml
|
102
|
+
- Gemfile
|
103
|
+
- Guardfile
|
104
|
+
- LICENSE.txt
|
105
|
+
- README.md
|
106
|
+
- Rakefile
|
107
|
+
- lib/spec_combos.rb
|
108
|
+
- lib/spec_combos/all_matcher.rb
|
109
|
+
- lib/spec_combos/and_matcher.rb
|
110
|
+
- lib/spec_combos/any_matcher.rb
|
111
|
+
- lib/spec_combos/collection_matcher.rb
|
112
|
+
- lib/spec_combos/matcher_combiner.rb
|
113
|
+
- lib/spec_combos/version.rb
|
114
|
+
- spec/lib/spec_combos/all_matcher_spec.rb
|
115
|
+
- spec/lib/spec_combos/and_matcher_spec.rb
|
116
|
+
- spec/lib/spec_combos/any_matcher_spec.rb
|
117
|
+
- spec/lib/spec_combos/matcher_combiner_spec.rb
|
118
|
+
- spec/spec_helper.rb
|
119
|
+
- spec_combos.gemspec
|
120
|
+
homepage: http://github.com/philou/spec_combos
|
121
|
+
licenses:
|
122
|
+
- MIT
|
123
|
+
metadata: {}
|
124
|
+
post_install_message:
|
125
|
+
rdoc_options: []
|
126
|
+
require_paths:
|
127
|
+
- lib
|
128
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - '>='
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - '>='
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
138
|
+
requirements: []
|
139
|
+
rubyforge_project:
|
140
|
+
rubygems_version: 2.0.3
|
141
|
+
signing_key:
|
142
|
+
specification_version: 4
|
143
|
+
summary: Allows to build up matchers able to precisely match item from a collection
|
144
|
+
for example
|
145
|
+
test_files:
|
146
|
+
- spec/lib/spec_combos/all_matcher_spec.rb
|
147
|
+
- spec/lib/spec_combos/and_matcher_spec.rb
|
148
|
+
- spec/lib/spec_combos/any_matcher_spec.rb
|
149
|
+
- spec/lib/spec_combos/matcher_combiner_spec.rb
|
150
|
+
- spec/spec_helper.rb
|
metadata.gz.sig
ADDED
Binary file
|