matchi 1.0.5 → 2.0.1

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +1 -1
  3. data/README.md +50 -97
  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 +61 -63
  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/lib/matchi/matchers.rb +0 -11
  45. data/lib/matchi/matchers/be_false.rb +0 -30
  46. data/lib/matchi/matchers/be_nil.rb +0 -30
  47. data/lib/matchi/matchers/be_true.rb +0 -30
  48. data/lib/matchi/matchers/eql.rb +0 -40
  49. data/lib/matchi/matchers/equal.rb +0 -40
  50. data/lib/matchi/matchers/match.rb +0 -40
  51. data/lib/matchi/matchers/raise_exception.rb +0 -44
  52. data/lib/matchi/matchers_base.rb +0 -51
  53. data/matchi.gemspec +0 -24
  54. data/pkg_checksum +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bcf4ea2585e0f28100e46fc43359e72a2144914c34b7054b8eefbbbf50554aeb
4
- data.tar.gz: d4bd35c7e7d76bea0351970a5d298832f78df357b5609cbc14226691858e3933
3
+ metadata.gz: a9afc0e3e02c4150637f3d1080cf6eacd470ad7dec335417bda0e79ee60ecdea
4
+ data.tar.gz: d62e283556fc4f9d4a6d93bde1efb518861d482dba734786f00b57a166f4ade6
5
5
  SHA512:
6
- metadata.gz: 98a4faa1e51f9c7e19628251f64eac732b793a0a85a7ee40f46294d92ed80c1b8b0590ad11282698a48a26edd048a53ef31305843bf1caac0921ccb2af47852e
7
- data.tar.gz: 7d0cc22350a289c524c77ee67e972b05872c5d97d0e6e573278e3ba858d5b0583e7916d1a8f2e62e8358f192d8f7f5792846914fc5f3ca9788d8c6686c5ce005
6
+ metadata.gz: 50d45962387971730773221e8756fa543457ebd1375f7205538040d2fb115eb1fae0784c1e9949794e9c990efc7788fda49ce03f8096918005eae384ed460a13
7
+ data.tar.gz: 12071d2d5462243d42eac25ca3d70fc5a236cd79b8cbdd20a608e4d2ceeacdbdddbaeeba06f30218c30d1cbf0c6f16279be655eead7a42dcf6b9cecdf1c645cf
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
9
  > Collection of expectation matchers for Ruby.
10
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/)
21
-
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,54 @@ 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("^#{expected}").match(yield).nil?
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
142
+ ## Contact
183
143
 
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.
144
+ * Home page: https://github.com/fixrb/matchi
145
+ * Bugs/issues: https://github.com/fixrb/matchi/issues
188
146
 
189
- The checksum of a file can be checked using the `sha512sum` command. For
190
- example:
147
+ ## Rubies
191
148
 
192
- $ sha512sum pkg/matchi-0.0.1.gem
193
- 548d9f669ded4e622182791a5390aaceae0bf2e557b0864f05a842b0be2c65e10e1fb8499f49a3b9efd0e8eaeb691351b1c670d6316ce49965a99683b1071389 pkg/matchi-0.0.1.gem
149
+ * [MRI](https://www.ruby-lang.org/)
150
+ * [Rubinius](https://rubinius.com/)
151
+ * [JRuby](https://www.jruby.org/)
194
152
 
195
153
  ## Versioning
196
154
 
197
155
  __Matchi__ follows [Semantic Versioning 2.0](https://semver.org/).
198
156
 
199
- ## Contributing
157
+ ## License
200
158
 
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
159
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
206
160
 
207
- ## License
161
+ ***
208
162
 
209
- See `LICENSE.md` file.
163
+ <p>
164
+ This project is sponsored by:<br />
165
+ <a href="https://sashite.com/"><img
166
+ src="https://github.com/fixrb/matchi/raw/main/img/sashite.png"
167
+ alt="Sashite" /></a>
168
+ </p>
210
169
 
211
170
  [gem]: https://rubygems.org/gems/matchi
212
171
  [travis]: https://travis-ci.org/fixrb/matchi
213
172
  [codeclimate]: https://codeclimate.com/github/fixrb/matchi
214
173
  [inchpages]: https://inch-ci.org/github/fixrb/matchi
215
174
  [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