matchi 3.0.0 → 3.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 16b38ee69034c01d5f2961a5d4e14b6c150cad89a9368f7c0cf84071761e2999
4
- data.tar.gz: f76f7a3286443d49f6e449af9ffefdb2f38b9d974aada733e1a611d75c627199
3
+ metadata.gz: 8da45849405d96c572ada45280a0acb673276092d25bc56c6a423892f1e1c1b8
4
+ data.tar.gz: 61f642b16e141704436eb2295fd0c5bc3bda93bb3991c992d40b71f491a328f4
5
5
  SHA512:
6
- metadata.gz: ed8abd4dd002520dc4740fc80b91573098e3242319e74b807e6621482beb131d4a40e299584fc507bacbb806867a00691a3f4bdcebf611dd2c45eb1b90e9e76e
7
- data.tar.gz: 3fd0b621816f91d0569fdebeb4a8c80c55890f83250ed87b0df2cd1b7683e02f390df159f372f6e87f62aab853b7d8042d438f1efc31f83fd3b169a12eab2b8e
6
+ metadata.gz: 8ddb08586b88d7bc3a1447b1ba503aa3170e587ba7a82134d660706be1e5a46ecf5f6180e16feb4736ebd2558e7bfc13f8474bdcca8f0a676945daa04d4ce04f
7
+ data.tar.gz: f0433134ba8bc1d93e4d4dbc6c8223c3033eda63525defb8a385c4cefc4bc43618b89cb97a47668060b744cfdac57b39e19dbdfebc7867a43ff18f7065d373c1
data/README.md CHANGED
@@ -12,7 +12,6 @@
12
12
 
13
13
  ## Project goals
14
14
 
15
- * Provide a collection of useful generic matchers.
16
15
  * Adding matchers should be as simple as possible.
17
16
  * Being framework agnostic and easy to integrate.
18
17
 
@@ -52,16 +51,24 @@ All examples here assume that this has been done.
52
51
 
53
52
  ### Anatomy of a matcher
54
53
 
55
- A __Matchi__ matcher is just an object that responds to the `matches?` method with a block as argument, and returns a boolean. That's all it is.
54
+ A __Matchi__ matcher is an object that must respond to the `matches?` method with a block as argument, and return a boolean.
56
55
 
57
- But let's see some examples.
56
+ To facilitate the integration of the matchers in other tools, it is recommended to expose the expected value via the `expected` method.
57
+
58
+ That's all it is.
59
+
60
+ Let's see some examples.
58
61
 
59
62
  ### Built-in matchers
60
63
 
64
+ Here is the collection of useful generic matchers.
65
+
61
66
  **Equivalence** matcher:
62
67
 
63
68
  ```ruby
64
69
  matcher = Matchi::Eq.new("foo")
70
+
71
+ matcher.expected # => "foo"
65
72
  matcher.matches? { "foo" } # => true
66
73
  ```
67
74
 
@@ -69,6 +76,8 @@ matcher.matches? { "foo" } # => true
69
76
 
70
77
  ```ruby
71
78
  matcher = Matchi::Be.new(:foo)
79
+
80
+ matcher.expected # => :foo
72
81
  matcher.matches? { :foo } # => true
73
82
  ```
74
83
 
@@ -76,13 +85,17 @@ matcher.matches? { :foo } # => true
76
85
 
77
86
  ```ruby
78
87
  matcher = Matchi::Match.new(/^foo$/)
88
+
89
+ matcher.expected # => /^foo$/
79
90
  matcher.matches? { "foo" } # => true
80
91
  ```
81
92
 
82
93
  **Expecting errors** matcher:
83
94
 
84
95
  ```ruby
85
- matcher = Matchi::RaiseException.new(NameError)
96
+ matcher = Matchi::RaiseException.new(:NameError)
97
+
98
+ matcher.expected # => :NameError
86
99
  matcher.matches? { Boom } # => true
87
100
  ```
88
101
 
@@ -90,6 +103,8 @@ matcher.matches? { Boom } # => true
90
103
 
91
104
  ```ruby
92
105
  matcher = Matchi::BeAnInstanceOf.new(:String)
106
+
107
+ matcher.expected # => :String
93
108
  matcher.matches? { "foo" } # => true
94
109
  ```
95
110
 
@@ -98,22 +113,32 @@ matcher.matches? { "foo" } # => true
98
113
  ```ruby
99
114
  object = []
100
115
  matcher = Matchi::Change.new(object, :length).by(1)
116
+
117
+ matcher.expected # => 1
101
118
  matcher.matches? { object << 1 } # => true
102
119
 
103
120
  object = []
104
121
  matcher = Matchi::Change.new(object, :length).by_at_least(1)
122
+
123
+ matcher.expected # => 1
105
124
  matcher.matches? { object << 1 } # => true
106
125
 
107
126
  object = []
108
127
  matcher = Matchi::Change.new(object, :length).by_at_most(1)
128
+
129
+ matcher.expected # => 1
109
130
  matcher.matches? { object << 1 } # => true
110
131
 
111
132
  object = "foo"
112
133
  matcher = Matchi::Change.new(object, :to_s).from("foo").to("FOO")
134
+
135
+ matcher.expected # => "FOO"
113
136
  matcher.matches? { object.upcase! } # => true
114
137
 
115
138
  object = "foo"
116
139
  matcher = Matchi::Change.new(object, :to_s).to("FOO")
140
+
141
+ matcher.expected # => "FOO"
117
142
  matcher.matches? { object.upcase! } # => true
118
143
  ```
119
144
 
@@ -121,6 +146,8 @@ matcher.matches? { object.upcase! } # => true
121
146
 
122
147
  ```ruby
123
148
  matcher = Matchi::Satisfy.new { |value| value == 42 }
149
+
150
+ matcher.expected # => #<Proc:0x00007fbaafc65540>
124
151
  matcher.matches? { 42 } # => true
125
152
  ```
126
153
 
@@ -133,13 +160,19 @@ A **Be the answer** matcher:
133
160
  ```ruby
134
161
  module Matchi
135
162
  class BeTheAnswer
163
+ def expected
164
+ 42
165
+ end
166
+
136
167
  def matches?
137
- 42.equal?(yield)
168
+ expected.equal?(yield)
138
169
  end
139
170
  end
140
171
  end
141
172
 
142
173
  matcher = Matchi::BeTheAnswer.new
174
+
175
+ matcher.expected # => 42
143
176
  matcher.matches? { 42 } # => true
144
177
  ```
145
178
 
@@ -150,6 +183,8 @@ require "prime"
150
183
 
151
184
  module Matchi
152
185
  class BePrime
186
+ attr_reader :expected
187
+
153
188
  def matches?
154
189
  Prime.prime?(yield)
155
190
  end
@@ -157,6 +192,8 @@ module Matchi
157
192
  end
158
193
 
159
194
  matcher = Matchi::BePrime.new
195
+
196
+ matcher.expected # => nil
160
197
  matcher.matches? { 42 } # => false
161
198
  ```
162
199
 
@@ -178,6 +215,8 @@ module Matchi
178
215
  end
179
216
 
180
217
  matcher = Matchi::StartWith.new("foo")
218
+
219
+ matcher.expected # => "foo"
181
220
  matcher.matches? { "foobar" } # => true
182
221
  ```
183
222
 
data/lib/matchi/be.rb CHANGED
@@ -3,6 +3,9 @@
3
3
  module Matchi
4
4
  # *Identity* matcher.
5
5
  class Be
6
+ # @return [#equal?] The expected identical object.
7
+ attr_reader :expected
8
+
6
9
  # Initialize the matcher with an object.
7
10
  #
8
11
  # @example
@@ -21,24 +24,26 @@ module Matchi
21
24
  # require "matchi/be"
22
25
  #
23
26
  # matcher = Matchi::Be.new(:foo)
27
+ #
28
+ # matcher.expected # => :foo
24
29
  # matcher.matches? { :foo } # => true
25
30
  #
26
31
  # @yieldreturn [#object_id] The actual value to compare to the expected
27
32
  # one.
28
33
  #
29
34
  # @return [Boolean] Comparison between actual and expected values.
30
- def matches?(*, **)
31
- @expected.equal?(yield)
35
+ def matches?
36
+ expected.equal?(yield)
32
37
  end
33
38
 
34
39
  # A string containing a human-readable representation of the matcher.
35
40
  def inspect
36
- "#{self.class}(#{@expected.inspect})"
41
+ "#{self.class}(#{expected.inspect})"
37
42
  end
38
43
 
39
44
  # Returns a string representing the matcher.
40
45
  def to_s
41
- "be #{@expected.inspect}"
46
+ "be #{expected.inspect}"
42
47
  end
43
48
  end
44
49
  end
@@ -3,6 +3,9 @@
3
3
  module Matchi
4
4
  # *Type/class* matcher.
5
5
  class BeAnInstanceOf
6
+ # @return [Symbol] The expected class name.
7
+ attr_reader :expected
8
+
6
9
  # Initialize the matcher with (the name of) a class or module.
7
10
  #
8
11
  # @example
@@ -10,7 +13,7 @@ module Matchi
10
13
  #
11
14
  # Matchi::BeAnInstanceOf.new(String)
12
15
  #
13
- # @param expected [#to_s] A (name of a) class or module.
16
+ # @param expected [Class, #to_s] The expected class name.
14
17
  def initialize(expected)
15
18
  @expected = String(expected).to_sym
16
19
  end
@@ -22,23 +25,25 @@ module Matchi
22
25
  # require "matchi/be_an_instance_of"
23
26
  #
24
27
  # matcher = Matchi::BeAnInstanceOf.new(String)
28
+ #
29
+ # matcher.expected # => :String
25
30
  # matcher.matches? { "foo" } # => true
26
31
  #
27
32
  # @yieldreturn [#class] the actual value to compare to the expected one.
28
33
  #
29
34
  # @return [Boolean] Comparison between actual and expected values.
30
- def matches?(*, **)
31
- self.class.const_get(@expected).equal?(yield.class)
35
+ def matches?
36
+ self.class.const_get(expected).equal?(yield.class)
32
37
  end
33
38
 
34
39
  # A string containing a human-readable representation of the matcher.
35
40
  def inspect
36
- "#{self.class}(#{@expected})"
41
+ "#{self.class}(#{expected})"
37
42
  end
38
43
 
39
44
  # Returns a string representing the matcher.
40
45
  def to_s
41
- "be an instance of #{@expected}"
46
+ "be an instance of #{expected}"
42
47
  end
43
48
  end
44
49
  end
data/lib/matchi/change.rb CHANGED
@@ -32,8 +32,8 @@ module Matchi
32
32
  #
33
33
  # object = []
34
34
  #
35
- # change = Matchi::Change.new(object, :length)
36
- # change.by_at_least(1)
35
+ # change_wrapper = Matchi::Change.new(object, :length)
36
+ # change_wrapper.by_at_least(1)
37
37
  #
38
38
  # @param expected [#object_id] The minimum delta of the expected change.
39
39
  #
@@ -49,8 +49,8 @@ module Matchi
49
49
  #
50
50
  # object = []
51
51
  #
52
- # change = Matchi::Change.new(object, :length)
53
- # change.by_at_most(1)
52
+ # change_wrapper = Matchi::Change.new(object, :length)
53
+ # change_wrapper.by_at_most(1)
54
54
  #
55
55
  # @param expected [#object_id] The maximum delta of the expected change.
56
56
  #
@@ -66,8 +66,8 @@ module Matchi
66
66
  #
67
67
  # object = []
68
68
  #
69
- # change = Matchi::Change.new(object, :length)
70
- # change.by(1)
69
+ # change_wrapper = Matchi::Change.new(object, :length)
70
+ # change_wrapper.by(1)
71
71
  #
72
72
  # @param expected [#object_id] The delta of the expected change.
73
73
  #
@@ -81,8 +81,8 @@ module Matchi
81
81
  # @example
82
82
  # require "matchi/change"
83
83
  #
84
- # change = Matchi::Change.new("foo", :to_s)
85
- # change.from("foo")
84
+ # change_wrapper = Matchi::Change.new("foo", :to_s)
85
+ # change_wrapper.from("foo")
86
86
  #
87
87
  # @param expected [#object_id] The original value.
88
88
  #
@@ -96,8 +96,8 @@ module Matchi
96
96
  # @example
97
97
  # require "matchi/change"
98
98
  #
99
- # change = Matchi::Change.new("foo", :to_s)
100
- # change.to("FOO")
99
+ # change_wrapper = Matchi::Change.new("foo", :to_s)
100
+ # change_wrapper.to("FOO")
101
101
  #
102
102
  # @param expected [#object_id] The new value to expect.
103
103
  #
@@ -4,6 +4,9 @@ module Matchi
4
4
  class Change
5
5
  # *Change by* matcher.
6
6
  class By
7
+ # @return [#object_id] An expected delta.
8
+ attr_reader :expected
9
+
7
10
  # Initialize the matcher with an object and a block.
8
11
  #
9
12
  # @example
@@ -30,28 +33,30 @@ module Matchi
30
33
  # object = []
31
34
  #
32
35
  # matcher = Matchi::Change::By.new(1) { object.length }
36
+ #
37
+ # matcher.expected # => 1
33
38
  # matcher.matches? { object << "foo" } # => true
34
39
  #
35
40
  # @yieldreturn [#object_id] The block of code to execute.
36
41
  #
37
42
  # @return [Boolean] Comparison between the value before and after the
38
43
  # code execution.
39
- def matches?(*, **)
44
+ def matches?
40
45
  value_before = @state.call
41
46
  yield
42
47
  value_after = @state.call
43
48
 
44
- @expected == (value_after - value_before)
49
+ expected == (value_after - value_before)
45
50
  end
46
51
 
47
52
  # A string containing a human-readable representation of the matcher.
48
53
  def inspect
49
- "#{self.class}(#{@expected.inspect})"
54
+ "#{self.class}(#{expected.inspect})"
50
55
  end
51
56
 
52
57
  # Returns a string representing the matcher.
53
58
  def to_s
54
- "change by #{@expected.inspect}"
59
+ "change by #{expected.inspect}"
55
60
  end
56
61
  end
57
62
  end
@@ -4,6 +4,9 @@ module Matchi
4
4
  class Change
5
5
  # *Change by at least* matcher.
6
6
  class ByAtLeast
7
+ # @return [#object_id] An expected delta.
8
+ attr_reader :expected
9
+
7
10
  # Initialize the matcher with an object and a block.
8
11
  #
9
12
  # @example
@@ -30,28 +33,30 @@ module Matchi
30
33
  # object = []
31
34
  #
32
35
  # matcher = Matchi::Change::ByAtLeast.new(1) { object.length }
36
+ #
37
+ # matcher.expected # => 1
33
38
  # matcher.matches? { object << "foo" } # => true
34
39
  #
35
40
  # @yieldreturn [#object_id] The block of code to execute.
36
41
  #
37
42
  # @return [Boolean] Comparison between the value before and after the
38
43
  # code execution.
39
- def matches?(*, **)
44
+ def matches?
40
45
  value_before = @state.call
41
46
  yield
42
47
  value_after = @state.call
43
48
 
44
- @expected <= (value_after - value_before)
49
+ expected <= (value_after - value_before)
45
50
  end
46
51
 
47
52
  # A string containing a human-readable representation of the matcher.
48
53
  def inspect
49
- "#{self.class}(#{@expected.inspect})"
54
+ "#{self.class}(#{expected.inspect})"
50
55
  end
51
56
 
52
57
  # Returns a string representing the matcher.
53
58
  def to_s
54
- "change by at least #{@expected.inspect}"
59
+ "change by at least #{expected.inspect}"
55
60
  end
56
61
  end
57
62
  end
@@ -4,6 +4,9 @@ module Matchi
4
4
  class Change
5
5
  # *Change by at most* matcher.
6
6
  class ByAtMost
7
+ # @return [#object_id] An expected delta.
8
+ attr_reader :expected
9
+
7
10
  # Initialize the matcher with an object and a block.
8
11
  #
9
12
  # @example
@@ -30,28 +33,30 @@ module Matchi
30
33
  # object = []
31
34
  #
32
35
  # matcher = Matchi::Change::ByAtMost.new(1) { object.length }
36
+ #
37
+ # matcher.expected # => 1
33
38
  # matcher.matches? { object << "foo" } # => true
34
39
  #
35
40
  # @yieldreturn [#object_id] The block of code to execute.
36
41
  #
37
42
  # @return [Boolean] Comparison between the value before and after the
38
43
  # code execution.
39
- def matches?(*, **)
44
+ def matches?
40
45
  value_before = @state.call
41
46
  yield
42
47
  value_after = @state.call
43
48
 
44
- @expected >= (value_after - value_before)
49
+ expected >= (value_after - value_before)
45
50
  end
46
51
 
47
52
  # A string containing a human-readable representation of the matcher.
48
53
  def inspect
49
- "#{self.class}(#{@expected.inspect})"
54
+ "#{self.class}(#{expected.inspect})"
50
55
  end
51
56
 
52
57
  # Returns a string representing the matcher.
53
58
  def to_s
54
- "change by at most #{@expected.inspect}"
59
+ "change by at most #{expected.inspect}"
55
60
  end
56
61
  end
57
62
  end
@@ -30,8 +30,8 @@ module Matchi
30
30
  #
31
31
  # object = "foo"
32
32
  #
33
- # change = Matchi::Change::From.new("foo") { object.to_s }
34
- # change.to("FOO")
33
+ # change_from_wrapper = Matchi::Change::From.new("foo") { object.to_s }
34
+ # change_from_wrapper.to("FOO")
35
35
  #
36
36
  # @param expected_new_value [#object_id] The new value to expect.
37
37
  #
@@ -5,6 +5,9 @@ module Matchi
5
5
  class From
6
6
  # *Change from to* matcher.
7
7
  class To
8
+ # @return [#object_id] An expected new value.
9
+ attr_reader :expected
10
+
8
11
  # Initialize the matcher with two objects and a block.
9
12
  #
10
13
  # @example
@@ -33,30 +36,32 @@ module Matchi
33
36
  # object = "foo"
34
37
  #
35
38
  # matcher = Matchi::Change::From::To.new("foo", "FOO") { object.to_s }
39
+ #
40
+ # matcher.expected # => "FOO"
36
41
  # matcher.matches? { object.upcase! } # => true
37
42
  #
38
43
  # @yieldreturn [#object_id] The block of code to execute.
39
44
  #
40
45
  # @return [Boolean] Comparison between the value before and after the
41
46
  # code execution.
42
- def matches?(*, **)
47
+ def matches?
43
48
  value_before = @state.call
44
49
  return false unless @expected_init == value_before
45
50
 
46
51
  yield
47
52
  value_after = @state.call
48
53
 
49
- @expected == value_after
54
+ expected == value_after
50
55
  end
51
56
 
52
57
  # A string containing a human-readable representation of the matcher.
53
58
  def inspect
54
- "#{self.class}(#{@expected_init.inspect}, #{@expected.inspect})"
59
+ "#{self.class}(#{@expected_init.inspect}, #{expected.inspect})"
55
60
  end
56
61
 
57
62
  # Returns a string representing the matcher.
58
63
  def to_s
59
- "change from #{@expected_init.inspect} to #{@expected.inspect}"
64
+ "change from #{@expected_init.inspect} to #{expected.inspect}"
60
65
  end
61
66
  end
62
67
  end
@@ -4,6 +4,9 @@ module Matchi
4
4
  class Change
5
5
  # *Change to* matcher.
6
6
  class To
7
+ # @return [#object_id] An expected new value.
8
+ attr_reader :expected
9
+
7
10
  # Initialize the matcher with an object and a block.
8
11
  #
9
12
  # @example
@@ -13,7 +16,7 @@ module Matchi
13
16
  #
14
17
  # Matchi::Change::To.new("FOO") { object.to_s }
15
18
  #
16
- # @param expected [#object_id] An expected result value.
19
+ # @param expected [#object_id] An expected new value.
17
20
  # @param state [Proc] A block of code to execute to get the
18
21
  # state of the object.
19
22
  def initialize(expected, &state)
@@ -30,27 +33,29 @@ module Matchi
30
33
  # object = "foo"
31
34
  #
32
35
  # matcher = Matchi::Change::To.new("FOO") { object.to_s }
36
+ #
37
+ # matcher.expected # => "FOO"
33
38
  # matcher.matches? { object.upcase! } # => true
34
39
  #
35
40
  # @yieldreturn [#object_id] The block of code to execute.
36
41
  #
37
42
  # @return [Boolean] Comparison between the value before and after the
38
43
  # code execution.
39
- def matches?(*, **)
44
+ def matches?
40
45
  yield
41
46
  value_after = @state.call
42
47
 
43
- @expected == value_after
48
+ expected == value_after
44
49
  end
45
50
 
46
51
  # A string containing a human-readable representation of the matcher.
47
52
  def inspect
48
- "#{self.class}(#{@expected.inspect})"
53
+ "#{self.class}(#{expected.inspect})"
49
54
  end
50
55
 
51
56
  # Returns a string representing the matcher.
52
57
  def to_s
53
- "change to #{@expected.inspect}"
58
+ "change to #{expected.inspect}"
54
59
  end
55
60
  end
56
61
  end
data/lib/matchi/eq.rb CHANGED
@@ -3,6 +3,9 @@
3
3
  module Matchi
4
4
  # *Equivalence* matcher.
5
5
  class Eq
6
+ # @return [#eql?] An expected equivalent object.
7
+ attr_reader :expected
8
+
6
9
  # Initialize the matcher with an object.
7
10
  #
8
11
  # @example
@@ -21,24 +24,26 @@ module Matchi
21
24
  # require "matchi/eq"
22
25
  #
23
26
  # matcher = Matchi::Eq.new("foo")
27
+ #
28
+ # matcher.expected # => "foo"
24
29
  # matcher.matches? { "foo" } # => true
25
30
  #
26
31
  # @yieldreturn [#object_id] The actual value to compare to the expected
27
32
  # one.
28
33
  #
29
34
  # @return [Boolean] Comparison between actual and expected values.
30
- def matches?(*, **)
31
- @expected.eql?(yield)
35
+ def matches?
36
+ expected.eql?(yield)
32
37
  end
33
38
 
34
39
  # A string containing a human-readable representation of the matcher.
35
40
  def inspect
36
- "#{self.class}(#{@expected.inspect})"
41
+ "#{self.class}(#{expected.inspect})"
37
42
  end
38
43
 
39
44
  # Returns a string representing the matcher.
40
45
  def to_s
41
- "eq #{@expected.inspect}"
46
+ "eq #{expected.inspect}"
42
47
  end
43
48
  end
44
49
  end
data/lib/matchi/match.rb CHANGED
@@ -3,6 +3,9 @@
3
3
  module Matchi
4
4
  # *Regular expressions* matcher.
5
5
  class Match
6
+ # @return [#match] A regular expression.
7
+ attr_reader :expected
8
+
6
9
  # Initialize the matcher with an instance of Regexp.
7
10
  #
8
11
  # @example
@@ -21,24 +24,26 @@ module Matchi
21
24
  # require "matchi/match"
22
25
  #
23
26
  # matcher = Matchi::Match.new(/^foo$/)
27
+ #
28
+ # matcher.expected # => /^foo$/
24
29
  # matcher.matches? { "foo" } # => true
25
30
  #
26
31
  # @yieldreturn [#object_id] The actual value to compare to the expected
27
32
  # one.
28
33
  #
29
34
  # @return [Boolean] Comparison between actual and expected values.
30
- def matches?(*, **)
31
- @expected.match?(yield)
35
+ def matches?
36
+ expected.match?(yield)
32
37
  end
33
38
 
34
39
  # A string containing a human-readable representation of the matcher.
35
40
  def inspect
36
- "#{self.class}(#{@expected.inspect})"
41
+ "#{self.class}(#{expected.inspect})"
37
42
  end
38
43
 
39
44
  # Returns a string representing the matcher.
40
45
  def to_s
41
- "match #{@expected.inspect}"
46
+ "match #{expected.inspect}"
42
47
  end
43
48
  end
44
49
  end
@@ -3,6 +3,9 @@
3
3
  module Matchi
4
4
  # *Expecting errors* matcher.
5
5
  class RaiseException
6
+ # @return [Symbol] The expected exception name.
7
+ attr_reader :expected
8
+
6
9
  # Initialize the matcher with a descendant of class Exception.
7
10
  #
8
11
  # @example
@@ -10,9 +13,9 @@ module Matchi
10
13
  #
11
14
  # Matchi::RaiseException.new(NameError)
12
15
  #
13
- # @param expected [Exception] The class of the expected exception.
16
+ # @param expected [Exception, #to_s] The expected exception name.
14
17
  def initialize(expected)
15
- @expected = expected
18
+ @expected = String(expected).to_sym
16
19
  end
17
20
 
18
21
  # Boolean comparison between the actual value and the expected value.
@@ -21,15 +24,17 @@ module Matchi
21
24
  # require "matchi/raise_exception"
22
25
  #
23
26
  # matcher = Matchi::RaiseException.new(NameError)
27
+ #
28
+ # matcher.expected # => :NameError
24
29
  # matcher.matches? { Boom } # => true
25
30
  #
26
31
  # @yieldreturn [#object_id] The actual value to compare to the expected
27
32
  # one.
28
33
  #
29
34
  # @return [Boolean] Comparison between actual and expected values.
30
- def matches?(*, **)
35
+ def matches?
31
36
  yield
32
- rescue @expected => _e
37
+ rescue self.class.const_get(expected) => _e
33
38
  true
34
39
  else
35
40
  false
@@ -37,12 +42,12 @@ module Matchi
37
42
 
38
43
  # A string containing a human-readable representation of the matcher.
39
44
  def inspect
40
- "#{self.class}(#{@expected.inspect})"
45
+ "#{self.class}(#{expected})"
41
46
  end
42
47
 
43
48
  # Returns a string representing the matcher.
44
49
  def to_s
45
- "raise exception #{@expected.inspect}"
50
+ "raise exception #{expected}"
46
51
  end
47
52
  end
48
53
  end
@@ -3,6 +3,9 @@
3
3
  module Matchi
4
4
  # *Satisfy* matcher.
5
5
  class Satisfy
6
+ # @return [Proc] A block of code.
7
+ attr_reader :expected
8
+
6
9
  # Initialize the matcher with a block.
7
10
  #
8
11
  # @example
@@ -21,14 +24,16 @@ module Matchi
21
24
  # require "matchi/satisfy"
22
25
  #
23
26
  # matcher = Matchi::Satisfy.new { |value| value == 42 }
27
+ #
28
+ # matcher.expected # => #<Proc:0x00007fbaafc65540>
24
29
  # matcher.matches? { 42 } # => true
25
30
  #
26
31
  # @yieldreturn [#object_id] The actual value to compare to the expected
27
32
  # one.
28
33
  #
29
34
  # @return [Boolean] Comparison between actual and expected values.
30
- def matches?(*, **)
31
- @expected.call(yield)
35
+ def matches?
36
+ expected.call(yield)
32
37
  end
33
38
 
34
39
  # A string containing a human-readable representation of the matcher.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: matchi
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyril Kato