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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +1 -1
  3. data/README.md +47 -100
  4. data/lib/matchi.rb +1 -1
  5. data/lib/matchi/helper.rb +28 -0
  6. data/lib/matchi/matcher.rb +11 -0
  7. data/lib/matchi/matcher/base.rb +45 -0
  8. data/lib/matchi/matcher/be_false.rb +24 -0
  9. data/lib/matchi/matcher/be_nil.rb +24 -0
  10. data/lib/matchi/matcher/be_true.rb +24 -0
  11. data/lib/matchi/matcher/eql.rb +35 -0
  12. data/lib/matchi/matcher/equal.rb +35 -0
  13. data/lib/matchi/matcher/match.rb +35 -0
  14. data/lib/matchi/matcher/raise_exception.rb +39 -0
  15. metadata +62 -65
  16. data/.gitignore +0 -10
  17. data/.rubocop.yml +0 -1
  18. data/.rubocop_todo.yml +0 -7
  19. data/.travis.yml +0 -28
  20. data/.yardopts +0 -1
  21. data/CODE_OF_CONDUCT.md +0 -13
  22. data/Gemfile +0 -5
  23. data/Rakefile +0 -22
  24. data/VERSION.semver +0 -1
  25. data/bin/console +0 -8
  26. data/bin/setup +0 -6
  27. data/checksum/matchi-0.0.1.gem.sha512 +0 -1
  28. data/checksum/matchi-0.0.2.gem.sha512 +0 -1
  29. data/checksum/matchi-0.0.3.gem.sha512 +0 -1
  30. data/checksum/matchi-0.0.4.gem.sha512 +0 -1
  31. data/checksum/matchi-0.0.5.gem.sha512 +0 -1
  32. data/checksum/matchi-0.0.6.gem.sha512 +0 -1
  33. data/checksum/matchi-0.0.7.gem.sha512 +0 -1
  34. data/checksum/matchi-0.0.8.gem.sha512 +0 -1
  35. data/checksum/matchi-0.0.9.gem.sha512 +0 -1
  36. data/checksum/matchi-0.1.0.gem.sha512 +0 -1
  37. data/checksum/matchi-0.1.1.gem.sha512 +0 -1
  38. data/checksum/matchi-0.1.2.gem.sha512 +0 -1
  39. data/checksum/matchi-1.0.0.gem.sha512 +0 -1
  40. data/checksum/matchi-1.0.1.gem.sha512 +0 -1
  41. data/checksum/matchi-1.0.2.gem.sha512 +0 -1
  42. data/checksum/matchi-1.0.3.gem.sha512 +0 -1
  43. data/checksum/matchi-1.0.4.gem.sha512 +0 -1
  44. data/checksum/matchi-1.0.5.gem.sha512 +0 -1
  45. data/lib/matchi/matchers.rb +0 -11
  46. data/lib/matchi/matchers/be_false.rb +0 -30
  47. data/lib/matchi/matchers/be_nil.rb +0 -30
  48. data/lib/matchi/matchers/be_true.rb +0 -30
  49. data/lib/matchi/matchers/eql.rb +0 -40
  50. data/lib/matchi/matchers/equal.rb +0 -40
  51. data/lib/matchi/matchers/match.rb +0 -40
  52. data/lib/matchi/matchers/raise_exception.rb +0 -48
  53. data/lib/matchi/matchers_base.rb +0 -51
  54. data/matchi.gemspec +0 -24
  55. data/pkg_checksum +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0cd50716f5824ade60354692ac37487dbd8e27472fb7fde7d4aab4d1ce95b9ca
4
- data.tar.gz: bd1c131caf2e3812e34e1265a75b5cf2d274168646739b65116b3ba90516ee7a
3
+ metadata.gz: fbd646c1f880291334b1f98426cfdedab736a2f87bbb44e149e81bcb5f8affce
4
+ data.tar.gz: 9e285052b96848df8be1c22c2033032d2dcbe143ac4d84fa26e9e61b42ac8ee4
5
5
  SHA512:
6
- metadata.gz: ba8f7453990d61caa22ece7510a78a9183d5a92da5fcc7661f6b61f8369c69b3a8cd597ec91bc367159808b6099d6c5644adba4c0ab510b31d213457b308bc60
7
- data.tar.gz: a0175c66fa876e7819034586a0d9491300733015aeb405587a875f7829407d75d8d6bc0cab1cb00e7f9c1c9a66bc4d818897f75c439d573b5ce0c50fa7ef8076
6
+ metadata.gz: d81a615fca3627cf424226c015e63ab09419be15059b83e926afa3d99819153ced25afca5adfe1421d85bbffcaf4048f2c36531b14b6a9f4920a1f7edf9efd61
7
+ data.tar.gz: e80cd7a69eef70a3ca0fc80bb4bf94468c14de22a9309d4bf736ea050e5feeeadf69216eadddc6e4ee678c08ccf64949729a3ef830ed9e1b4b3ca3d5ba23d0f7
data/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015-2019 Cyril Kato
3
+ Copyright (c) 2015-2021 Cyril Kato
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,30 +1,19 @@
1
1
  # Matchi
2
2
 
3
- [![Build Status](https://api.travis-ci.org/fixrb/matchi.svg?branch=master)][travis]
3
+ [![Build Status](https://api.travis-ci.org/fixrb/matchi.svg?branch=main)][travis]
4
4
  [![Code Climate](https://codeclimate.com/github/fixrb/matchi/badges/gpa.svg)][codeclimate]
5
5
  [![Gem Version](https://badge.fury.io/rb/matchi.svg)][gem]
6
- [![Inline docs](https://inch-ci.org/github/fixrb/matchi.svg?branch=master)][inchpages]
6
+ [![Inline docs](https://inch-ci.org/github/fixrb/matchi.svg?branch=main)][inchpages]
7
7
  [![Documentation](https://img.shields.io/:yard-docs-38c800.svg)][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 'matchi'
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::Matchers::Eql::Matcher.new('foo')
46
- eql.matches? { 'foo' } # => true
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::Matchers::Equal::Matcher.new(:foo)
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::Matchers::Match::Matcher.new(/^foo$/)
60
- match.matches? { 'foo' } # => true
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::Matchers::RaiseException::Matcher.new(NameError)
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::Matchers::BeTrue::Matcher.new
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::Matchers::BeFalse::Matcher.new
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::Matchers::BeNil::Matcher.new
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 Matchers
100
- module BeTheAnswer
101
- class Matcher
102
- def matches?
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::Matchers::BeTheAnswer::Matcher.new
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 'prime'
104
+ require "prime"
126
105
 
127
106
  module Matchi
128
- module Matchers
129
- module BePrime
130
- class Matcher
131
- def matches?
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::Matchers::BePrime::Matcher.new
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 Matchers
156
- module StartWith
157
- class Matcher
158
- def initialize(expected)
159
- @expected = expected
160
- end
161
-
162
- def matches?
163
- !Regexp.new("^#{@expected}").match(yield).nil?
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::Matchers::StartWith::Matcher.new('foo')
179
- start_with.matches? { 'foobar' } # => true
138
+ start_with = Matchi::Matcher::StartWith.new("foo")
139
+ start_with.matches? { "foobar" } # => true
180
140
  ```
181
141
 
182
- ## Security
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
- $ sha512sum pkg/matchi-0.0.1.gem
193
- 548d9f669ded4e622182791a5390aaceae0bf2e557b0864f05a842b0be2c65e10e1fb8499f49a3b9efd0e8eaeb691351b1c670d6316ce49965a99683b1071389 pkg/matchi-0.0.1.gem
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
- ## Contributing
151
+ ## License
200
152
 
201
- 1. [Fork it](https://github.com/fixrb/matchi/fork)
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
- ## License
155
+ ***
208
156
 
209
- See `LICENSE.md` file.
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
- [![Sashite](https://pbs.twimg.com/profile_images/618485028322975744/PZ9qPuI__400x400.png)](https://sashite.com/)
data/lib/matchi.rb CHANGED
@@ -4,4 +4,4 @@
4
4
  module Matchi
5
5
  end
6
6
 
7
- require_relative File.join('matchi', 'matchers')
7
+ require_relative File.join("matchi", "matcher")
@@ -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,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Matchi
4
+ # Collection of matcher classes.
5
+ module Matcher
6
+ end
7
+ end
8
+
9
+ Dir[File.join(File.dirname(__FILE__), "matcher", "*.rb")].each do |fname|
10
+ require_relative fname
11
+ 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