matchi 1.0.6 → 2.0.2
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 +4 -4
- data/LICENSE.md +1 -1
- data/README.md +47 -100
- data/lib/matchi.rb +1 -1
- data/lib/matchi/helper.rb +28 -0
- data/lib/matchi/matcher.rb +11 -0
- data/lib/matchi/matcher/base.rb +45 -0
- data/lib/matchi/matcher/be_false.rb +24 -0
- data/lib/matchi/matcher/be_nil.rb +24 -0
- data/lib/matchi/matcher/be_true.rb +24 -0
- data/lib/matchi/matcher/eql.rb +35 -0
- data/lib/matchi/matcher/equal.rb +35 -0
- data/lib/matchi/matcher/match.rb +35 -0
- data/lib/matchi/matcher/raise_exception.rb +39 -0
- metadata +62 -65
- data/.gitignore +0 -10
- data/.rubocop.yml +0 -1
- data/.rubocop_todo.yml +0 -7
- data/.travis.yml +0 -28
- data/.yardopts +0 -1
- data/CODE_OF_CONDUCT.md +0 -13
- data/Gemfile +0 -5
- data/Rakefile +0 -22
- data/VERSION.semver +0 -1
- data/bin/console +0 -8
- data/bin/setup +0 -6
- data/checksum/matchi-0.0.1.gem.sha512 +0 -1
- data/checksum/matchi-0.0.2.gem.sha512 +0 -1
- data/checksum/matchi-0.0.3.gem.sha512 +0 -1
- data/checksum/matchi-0.0.4.gem.sha512 +0 -1
- data/checksum/matchi-0.0.5.gem.sha512 +0 -1
- data/checksum/matchi-0.0.6.gem.sha512 +0 -1
- data/checksum/matchi-0.0.7.gem.sha512 +0 -1
- data/checksum/matchi-0.0.8.gem.sha512 +0 -1
- data/checksum/matchi-0.0.9.gem.sha512 +0 -1
- data/checksum/matchi-0.1.0.gem.sha512 +0 -1
- data/checksum/matchi-0.1.1.gem.sha512 +0 -1
- data/checksum/matchi-0.1.2.gem.sha512 +0 -1
- data/checksum/matchi-1.0.0.gem.sha512 +0 -1
- data/checksum/matchi-1.0.1.gem.sha512 +0 -1
- data/checksum/matchi-1.0.2.gem.sha512 +0 -1
- data/checksum/matchi-1.0.3.gem.sha512 +0 -1
- data/checksum/matchi-1.0.4.gem.sha512 +0 -1
- data/checksum/matchi-1.0.5.gem.sha512 +0 -1
- data/lib/matchi/matchers.rb +0 -11
- data/lib/matchi/matchers/be_false.rb +0 -30
- data/lib/matchi/matchers/be_nil.rb +0 -30
- data/lib/matchi/matchers/be_true.rb +0 -30
- data/lib/matchi/matchers/eql.rb +0 -40
- data/lib/matchi/matchers/equal.rb +0 -40
- data/lib/matchi/matchers/match.rb +0 -40
- data/lib/matchi/matchers/raise_exception.rb +0 -48
- data/lib/matchi/matchers_base.rb +0 -51
- data/matchi.gemspec +0 -24
- data/pkg_checksum +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fbd646c1f880291334b1f98426cfdedab736a2f87bbb44e149e81bcb5f8affce
|
4
|
+
data.tar.gz: 9e285052b96848df8be1c22c2033032d2dcbe143ac4d84fa26e9e61b42ac8ee4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d81a615fca3627cf424226c015e63ab09419be15059b83e926afa3d99819153ced25afca5adfe1421d85bbffcaf4048f2c36531b14b6a9f4920a1f7edf9efd61
|
7
|
+
data.tar.gz: e80cd7a69eef70a3ca0fc80bb4bf94468c14de22a9309d4bf736ea050e5feeeadf69216eadddc6e4ee678c08ccf64949729a3ef830ed9e1b4b3ca3d5ba23d0f7
|
data/LICENSE.md
CHANGED
data/README.md
CHANGED
@@ -1,30 +1,19 @@
|
|
1
1
|
# Matchi
|
2
2
|
|
3
|
-
[][travis]
|
4
4
|
[][codeclimate]
|
5
5
|
[][gem]
|
6
|
-
[][inchpages]
|
7
7
|
[][rubydoc]
|
8
8
|
|
9
|
-
> Collection of expectation matchers for Ruby
|
10
|
-
|
11
|
-
## Contact
|
12
|
-
|
13
|
-
* Home page: https://github.com/fixrb/matchi
|
14
|
-
* Bugs/issues: https://github.com/fixrb/matchi/issues
|
15
|
-
|
16
|
-
## Rubies
|
17
|
-
|
18
|
-
* [MRI](https://www.ruby-lang.org/)
|
19
|
-
* [Rubinius](https://rubinius.com/)
|
20
|
-
* [JRuby](https://www.jruby.org/)
|
9
|
+
> Collection of expectation matchers for Ruby 🤹
|
21
10
|
|
22
11
|
## Installation
|
23
12
|
|
24
13
|
Add this line to your application's Gemfile:
|
25
14
|
|
26
15
|
```ruby
|
27
|
-
gem
|
16
|
+
gem "matchi"
|
28
17
|
```
|
29
18
|
|
30
19
|
And then execute:
|
@@ -42,49 +31,49 @@ Or install it yourself as:
|
|
42
31
|
**Equivalence** matcher:
|
43
32
|
|
44
33
|
```ruby
|
45
|
-
eql = Matchi::
|
46
|
-
eql.matches? {
|
34
|
+
eql = Matchi::Matcher::Eql.new("foo")
|
35
|
+
eql.matches? { "foo" } # => true
|
47
36
|
```
|
48
37
|
|
49
38
|
**Identity** matcher:
|
50
39
|
|
51
40
|
```ruby
|
52
|
-
equal = Matchi::
|
41
|
+
equal = Matchi::Matcher::Equal.new(:foo)
|
53
42
|
equal.matches? { :foo } # => true
|
54
43
|
```
|
55
44
|
|
56
45
|
**Regular expressions** matcher:
|
57
46
|
|
58
47
|
```ruby
|
59
|
-
match = Matchi::
|
60
|
-
match.matches? {
|
48
|
+
match = Matchi::Matcher::Match.new(/^foo$/)
|
49
|
+
match.matches? { "foo" } # => true
|
61
50
|
```
|
62
51
|
|
63
52
|
**Expecting errors** matcher:
|
64
53
|
|
65
54
|
```ruby
|
66
|
-
raise_exception = Matchi::
|
55
|
+
raise_exception = Matchi::Matcher::RaiseException.new(NameError)
|
67
56
|
raise_exception.matches? { Boom } # => true
|
68
57
|
```
|
69
58
|
|
70
59
|
**Truth** matcher:
|
71
60
|
|
72
61
|
```ruby
|
73
|
-
be_true = Matchi::
|
62
|
+
be_true = Matchi::Matcher::BeTrue.new
|
74
63
|
be_true.matches? { true } # => true
|
75
64
|
```
|
76
65
|
|
77
66
|
**Untruth** matcher:
|
78
67
|
|
79
68
|
```ruby
|
80
|
-
be_false = Matchi::
|
69
|
+
be_false = Matchi::Matcher::BeFalse.new
|
81
70
|
be_false.matches? { false } # => true
|
82
71
|
```
|
83
72
|
|
84
73
|
**Nil** matcher:
|
85
74
|
|
86
75
|
```ruby
|
87
|
-
be_nil = Matchi::
|
76
|
+
be_nil = Matchi::Matcher::BeNil.new
|
88
77
|
be_nil.matches? { nil } # => true
|
89
78
|
```
|
90
79
|
|
@@ -96,55 +85,35 @@ A **Be the answer** matcher:
|
|
96
85
|
|
97
86
|
```ruby
|
98
87
|
module Matchi
|
99
|
-
module
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
42.equal? yield
|
104
|
-
end
|
105
|
-
|
106
|
-
def to_s
|
107
|
-
'be_the_answer'
|
108
|
-
end
|
109
|
-
|
110
|
-
def to_h
|
111
|
-
{ BeTheAnswer: [] }
|
112
|
-
end
|
88
|
+
module Matcher
|
89
|
+
class BeTheAnswer < ::Matchi::Matcher::Base
|
90
|
+
def matches?
|
91
|
+
42.equal?(yield)
|
113
92
|
end
|
114
93
|
end
|
115
94
|
end
|
116
95
|
end
|
117
96
|
|
118
|
-
be_the_answer = Matchi::
|
97
|
+
be_the_answer = Matchi::Matcher::BeTheAnswer.new
|
119
98
|
be_the_answer.matches? { 42 } # => true
|
120
99
|
```
|
121
100
|
|
122
101
|
A **Be prime** matcher:
|
123
102
|
|
124
103
|
```ruby
|
125
|
-
require
|
104
|
+
require "prime"
|
126
105
|
|
127
106
|
module Matchi
|
128
|
-
module
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
Prime.prime? yield
|
133
|
-
end
|
134
|
-
|
135
|
-
def to_s
|
136
|
-
'be_prime'
|
137
|
-
end
|
138
|
-
|
139
|
-
def to_h
|
140
|
-
{ BePrime: [] }
|
141
|
-
end
|
107
|
+
module Matcher
|
108
|
+
class BePrime < ::Matchi::Matcher::Base
|
109
|
+
def matches?
|
110
|
+
Prime.prime?(yield)
|
142
111
|
end
|
143
112
|
end
|
144
113
|
end
|
145
114
|
end
|
146
115
|
|
147
|
-
be_prime = Matchi::
|
116
|
+
be_prime = Matchi::Matcher::BePrime.new
|
148
117
|
be_prime.matches? { 42 } # => false
|
149
118
|
```
|
150
119
|
|
@@ -152,70 +121,48 @@ A **Start with** matcher:
|
|
152
121
|
|
153
122
|
```ruby
|
154
123
|
module Matchi
|
155
|
-
module
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
end
|
165
|
-
|
166
|
-
def to_s
|
167
|
-
'start_with'
|
168
|
-
end
|
169
|
-
|
170
|
-
def to_h
|
171
|
-
{ StartWith: [@expected] }
|
172
|
-
end
|
124
|
+
module Matcher
|
125
|
+
class StartWith < ::Matchi::Matcher::Base
|
126
|
+
def initialize(expected)
|
127
|
+
super()
|
128
|
+
@expected = expected
|
129
|
+
end
|
130
|
+
|
131
|
+
def matches?
|
132
|
+
Regexp.new(/\A#{expected}/).match?(yield)
|
173
133
|
end
|
174
134
|
end
|
175
135
|
end
|
176
136
|
end
|
177
137
|
|
178
|
-
start_with = Matchi::
|
179
|
-
start_with.matches? {
|
138
|
+
start_with = Matchi::Matcher::StartWith.new("foo")
|
139
|
+
start_with.matches? { "foobar" } # => true
|
180
140
|
```
|
181
141
|
|
182
|
-
##
|
183
|
-
|
184
|
-
As a basic form of security __Matchi__ provides a set of SHA512 checksums for
|
185
|
-
every Gem release. These checksums can be found in the `checksum/` directory.
|
186
|
-
Although these checksums do not prevent malicious users from tampering with a
|
187
|
-
built Gem they can be used for basic integrity verification purposes.
|
188
|
-
|
189
|
-
The checksum of a file can be checked using the `sha512sum` command. For
|
190
|
-
example:
|
142
|
+
## Contact
|
191
143
|
|
192
|
-
|
193
|
-
|
144
|
+
* Home page: https://github.com/fixrb/matchi
|
145
|
+
* Bugs/issues: https://github.com/fixrb/matchi/issues
|
194
146
|
|
195
147
|
## Versioning
|
196
148
|
|
197
149
|
__Matchi__ follows [Semantic Versioning 2.0](https://semver.org/).
|
198
150
|
|
199
|
-
##
|
151
|
+
## License
|
200
152
|
|
201
|
-
|
202
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
203
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
204
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
205
|
-
5. Create a new Pull Request
|
153
|
+
The [gem](https://rubygems.org/gems/matchi) is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
206
154
|
|
207
|
-
|
155
|
+
***
|
208
156
|
|
209
|
-
|
157
|
+
<p>
|
158
|
+
This project is sponsored by:<br />
|
159
|
+
<a href="https://sashite.com/"><img
|
160
|
+
src="https://github.com/fixrb/matchi/raw/main/img/sashite.png"
|
161
|
+
alt="Sashite" /></a>
|
162
|
+
</p>
|
210
163
|
|
211
164
|
[gem]: https://rubygems.org/gems/matchi
|
212
165
|
[travis]: https://travis-ci.org/fixrb/matchi
|
213
166
|
[codeclimate]: https://codeclimate.com/github/fixrb/matchi
|
214
167
|
[inchpages]: https://inch-ci.org/github/fixrb/matchi
|
215
168
|
[rubydoc]: https://rubydoc.info/gems/matchi/frames
|
216
|
-
|
217
|
-
***
|
218
|
-
|
219
|
-
This project is sponsored by:
|
220
|
-
|
221
|
-
[](https://sashite.com/)
|
data/lib/matchi.rb
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "matcher"
|
4
|
+
|
5
|
+
module Matchi
|
6
|
+
# Collection of helper methods.
|
7
|
+
module Helper
|
8
|
+
::Matchi::Matcher.constants.each do |matcher_const|
|
9
|
+
next if matcher_const.equal?(:Base)
|
10
|
+
|
11
|
+
matcher_klass = ::Matchi::Matcher.const_get(matcher_const)
|
12
|
+
|
13
|
+
# Define a method for the given matcher.
|
14
|
+
#
|
15
|
+
# @example Given the `Matchi::Matchers::Equal::Matcher` matcher, its
|
16
|
+
# method would be:
|
17
|
+
#
|
18
|
+
# def equal(expected)
|
19
|
+
# Matchi::Matchers::Equal::Matcher.new(expected)
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# @return [#matches?] The matcher.
|
23
|
+
define_method(matcher_klass.to_sym) do |*args|
|
24
|
+
matcher_klass.new(*args)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Matchi
|
4
|
+
module Matcher
|
5
|
+
# Abstract matcher class.
|
6
|
+
class Base
|
7
|
+
# @return [Symbol] A symbol identifying the matcher.
|
8
|
+
def self.to_sym
|
9
|
+
name.delete_prefix("Matchi::Matcher::")
|
10
|
+
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
11
|
+
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
12
|
+
.downcase
|
13
|
+
.to_sym
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [#object_id] Any value to give to the matcher.
|
17
|
+
attr_reader :expected
|
18
|
+
|
19
|
+
# A string containing a human-readable representation of the matcher.
|
20
|
+
#
|
21
|
+
# @return [String] The human-readable representation of the matcher.
|
22
|
+
def inspect
|
23
|
+
"#{self.class}(#{expected&.inspect})"
|
24
|
+
end
|
25
|
+
|
26
|
+
# Abstract matcher class.
|
27
|
+
#
|
28
|
+
# @raise [NotImplementedError] Override me inside a matcher.
|
29
|
+
def matches?
|
30
|
+
raise ::NotImplementedError, "matcher MUST respond to this method."
|
31
|
+
end
|
32
|
+
|
33
|
+
# Returns a string representing the matcher.
|
34
|
+
#
|
35
|
+
# @example The readable definition of a FooBar matcher.
|
36
|
+
# matcher = Matchi::Matcher::FooBar.new(42)
|
37
|
+
# matcher.to_s # => "foo_bar 42"
|
38
|
+
#
|
39
|
+
# @return [String] A string representing the matcher.
|
40
|
+
def to_s
|
41
|
+
[self.class.to_sym, expected&.inspect].compact.join(" ")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Matchi
|
6
|
+
module Matcher
|
7
|
+
# **Untruth** matcher.
|
8
|
+
class BeFalse < ::Matchi::Matcher::Base
|
9
|
+
# Boolean comparison between the actual value and the expected value.
|
10
|
+
#
|
11
|
+
# @example Is it false?
|
12
|
+
# be_false = Matchi::Matcher::BeFalse.new
|
13
|
+
# be_false.matches? { false } # => true
|
14
|
+
#
|
15
|
+
# @yieldreturn [#object_id] The actual value to compare to the expected
|
16
|
+
# one.
|
17
|
+
#
|
18
|
+
# @return [Boolean] Comparison between actual and expected values.
|
19
|
+
def matches?(*, **)
|
20
|
+
false.equal?(yield)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Matchi
|
6
|
+
module Matcher
|
7
|
+
# **Nil** matcher.
|
8
|
+
class BeNil < ::Matchi::Matcher::Base
|
9
|
+
# Boolean comparison between the actual value and the expected value.
|
10
|
+
#
|
11
|
+
# @example Is it nil?
|
12
|
+
# be_nil = Matchi::Matcher::BeNil.new
|
13
|
+
# be_nil.matches? { nil } # => true
|
14
|
+
#
|
15
|
+
# @yieldreturn [#object_id] The actual value to compare to the expected
|
16
|
+
# one.
|
17
|
+
#
|
18
|
+
# @return [Boolean] Comparison between actual and expected values.
|
19
|
+
def matches?(*, **)
|
20
|
+
nil.equal?(yield)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Matchi
|
6
|
+
module Matcher
|
7
|
+
# **Truth** matcher.
|
8
|
+
class BeTrue < ::Matchi::Matcher::Base
|
9
|
+
# Boolean comparison between the actual value and the expected value.
|
10
|
+
#
|
11
|
+
# @example Is it true?
|
12
|
+
# be_true = Matchi::Matcher::BeTrue.new
|
13
|
+
# be_true.matches? { true } # => true
|
14
|
+
#
|
15
|
+
# @yieldreturn [#object_id] The actual value to compare to the expected
|
16
|
+
# one.
|
17
|
+
#
|
18
|
+
# @return [Boolean] Comparison between actual and expected values.
|
19
|
+
def matches?(*, **)
|
20
|
+
true.equal?(yield)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|