r_spec-clone 1.6.0 → 1.7.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.
- checksums.yaml +4 -4
- data/LICENSE.md +2 -2
- data/README.md +30 -25
- data/lib/r_spec/clone/dsl.rb +24 -58
- data/lib/r_spec/clone/expectation_helper/shared.rb +6 -6
- data/lib/r_spec/clone/expectation_target/base.rb +15 -11
- data/lib/r_spec/clone/expectation_target/block.rb +3 -3
- data/lib/r_spec/clone/expectation_target/value.rb +3 -3
- data/lib/r_spec/clone/{console.rb → logger.rb} +8 -4
- data/lib/r_spec.rb +6 -6
- metadata +11 -151
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc9ae84dcef40b1d832122a6a7bec48cf1bceb8104680cc2de36a9be584fd09d
|
4
|
+
data.tar.gz: b3d8ad619c723b0b90e82f93791f1d8d927457518e91e8ab36e324e45328fb11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5dabfdecc24dcb00bfc37a6c5f8afaa57520824ec9c8f08b86088c0f0e2fc3e3bcf9333dd0d3a21746127afa7c3bb072090145270f07c93cb318cc5dc7c9b806
|
7
|
+
data.tar.gz: 7998dfc059b0a80302ef5d123401ead7c7b2eec0bbfe64a551b8d53d3f8f1ab4f0f5624b787de685ddc1c355805a941bef3159cd2093e760c35ef9adff802ed5
|
data/LICENSE.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
The MIT License
|
1
|
+
# The MIT License
|
2
2
|
|
3
|
-
Copyright (c) 2015-
|
3
|
+
Copyright (c) 2015-2024 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,4 +1,4 @@
|
|
1
|
-
# RSpec clone
|
1
|
+
# RSpec clone <img src="https://github.com/cyril/r_spec-clone.rb/raw/main/img/logo.svg" style="height: 1em; width: 1em" />
|
2
2
|
|
3
3
|
A minimalist __RSpec clone__ with all the essentials.
|
4
4
|
|
@@ -7,33 +7,35 @@ A minimalist __RSpec clone__ with all the essentials.
|
|
7
7
|
## Status
|
8
8
|
|
9
9
|
[](https://r-spec.dev/)
|
10
|
-
[](https://github.com/cyril/r_spec-clone.rb/
|
10
|
+
[](https://github.com/cyril/r_spec-clone.rb/tags)
|
11
11
|
[](https://rubydoc.info/github/cyril/r_spec-clone.rb/main)
|
12
|
-
[](https://github.com/cyril/r_spec-clone.rb/actions?query=workflow%3Aruby+branch%3Amain)
|
13
13
|
[](https://github.com/cyril/r_spec-clone.rb/actions?query=workflow%3Arubocop+branch%3Amain)
|
14
14
|
[](https://github.com/cyril/r_spec-clone.rb/raw/main/LICENSE.md)
|
15
15
|
|
16
|
-
## Project
|
16
|
+
## Project Goals
|
17
17
|
|
18
|
-
1.
|
19
|
-
2.
|
20
|
-
3. Avoid
|
21
|
-
4. Provide
|
18
|
+
1. Maintain low code complexity to avoid false negatives and false positives.
|
19
|
+
2. Implement the loading of specifications using simple, atomic, and thread-safe Ruby primitives.
|
20
|
+
3. Avoid cluttering the interface with unnecessary alternative syntaxes.
|
21
|
+
4. Provide the basics of the RSpec DSL for writing tests.
|
22
22
|
|
23
|
-
## Some
|
23
|
+
## Some Differences
|
24
24
|
|
25
|
-
*
|
26
|
-
*
|
27
|
-
* Malicious _actual values_ cannot [
|
28
|
-
* If no `subject`
|
29
|
-
* If no described class is set, `described_class` is undefined
|
25
|
+
* Monkey-patching is not an available option.
|
26
|
+
* The framework does not use [hacks such as the `at_exit` hook](https://blog.arkency.com/2013/06/are-we-abusing-at-exit/) to trigger tests.
|
27
|
+
* Malicious _actual values_ cannot [compromise results](https://asciinema.org/a/423547?autoplay=1&speed=2).
|
28
|
+
* If no `subject` is explicitly determined, it remains undefined.
|
29
|
+
* If no described class is set, `described_class` is undefined rather than `nil`.
|
30
30
|
* Expectations cannot be added inside a `before` block.
|
31
|
-
* [Arbitrary helper methods](https://relishapp.com/rspec/rspec-core/v/3-10/docs/helper-methods/arbitrary-helper-methods) are not
|
31
|
+
* [Arbitrary helper methods](https://relishapp.com/rspec/rspec-core/v/3-10/docs/helper-methods/arbitrary-helper-methods) are not accessible within examples.
|
32
32
|
* The `let` method defines a helper method rather than a memoized helper method.
|
33
|
-
* The one-liner `is_expected` syntax
|
34
|
-
* `subject`, `before`,
|
35
|
-
* The
|
36
|
-
* The
|
33
|
+
* The one-liner `is_expected` syntax is compatible with block expectations.
|
34
|
+
* Definitions of `subject`, `before`, and `let` must precede examples.
|
35
|
+
* The `after` hook is unsupported.
|
36
|
+
* The execution of the test suite halts immediately when an error is detected.
|
37
|
+
* Each `context` block isolates its tests and any potential side effects.
|
38
|
+
* The `its` method is available without the need for external dependencies.
|
37
39
|
|
38
40
|
## Installation
|
39
41
|
|
@@ -46,7 +48,7 @@ gem "r_spec-clone"
|
|
46
48
|
And then execute:
|
47
49
|
|
48
50
|
```sh
|
49
|
-
bundle
|
51
|
+
bundle install
|
50
52
|
```
|
51
53
|
|
52
54
|
Or install it yourself as:
|
@@ -59,7 +61,7 @@ gem install r_spec-clone
|
|
59
61
|
|
60
62
|
__RSpec clone__ provides a structure for writing executable examples of how your code should behave.
|
61
63
|
|
62
|
-
Inspired by RSpec, it includes a domain
|
64
|
+
Inspired by RSpec, it includes a domain-specific language (DSL) that allows you to write examples in a way similar to plain english.
|
63
65
|
|
64
66
|
A basic spec looks something like this:
|
65
67
|
|
@@ -67,10 +69,10 @@ A basic spec looks something like this:
|
|
67
69
|
|
68
70
|
## Usage
|
69
71
|
|
70
|
-
### Anatomy of a
|
72
|
+
### Anatomy of a Spec File
|
71
73
|
|
72
|
-
To
|
73
|
-
Many projects
|
74
|
+
To utilize the `RSpec` module and its DSL, include `require "r_spec"` in your spec files.
|
75
|
+
Many projects organize these includes through a custom spec helper.
|
74
76
|
|
75
77
|
Concrete test cases are defined in `it` blocks.
|
76
78
|
An optional (but recommended) descriptive string or module indicates the purpose of the test and a block contains the main logic of the test.
|
@@ -87,7 +89,7 @@ To express an expectation, wrap an object or block in `expect`, call `to` (or `n
|
|
87
89
|
If the expectation is met, code execution continues.
|
88
90
|
Otherwise the example has _failed_ and other code will not be executed.
|
89
91
|
|
90
|
-
In test files, specs
|
92
|
+
In test files, specs can be structured by example groups which are defined by `describe` and `context` sections.
|
91
93
|
Typically a top level `describe` defines the outer unit (such as a class) to be tested by the spec.
|
92
94
|
Further `describe` sections can be nested within the outer unit to specify smaller units under test (such as individual methods).
|
93
95
|
|
@@ -98,6 +100,9 @@ For unit tests, it is recommended to follow the conventions for method names:
|
|
98
100
|
|
99
101
|
To establish certain contexts — think _empty array_ versus _array with elements_ — the `context` method may be used to communicate this to the reader.
|
100
102
|
|
103
|
+
Unlike a `describe` block, all specifications executed within a `context` are isolated in a subprocess.
|
104
|
+
This prevents possible side effects on the Ruby object environment from being propagated outside their context, which could alter the result of the unit test suite.
|
105
|
+
|
101
106
|
Note: if you are wondering what kind of code might be generated by the DSL, an article that shows the dynamic transcription of the main methods with simple examples is available in [Chinese](https://ruby-china.org/topics/41441), in [English](https://dev.to/cyri_/what-ruby-code-to-expect-from-a-testing-dsl-4oe1) and in [Japanese](https://qiita.com/cyril/items/17ee758e162bae144a07).
|
102
107
|
|
103
108
|
### Expectations
|
data/lib/r_spec/clone/dsl.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "
|
3
|
+
require_relative "logger"
|
4
4
|
require_relative "error"
|
5
5
|
require_relative "expectation_helper"
|
6
6
|
|
@@ -9,9 +9,8 @@ module RSpec
|
|
9
9
|
# Abstract class for handling the domain-specific language.
|
10
10
|
class Dsl
|
11
11
|
BEFORE_METHOD = :initialize
|
12
|
-
AFTER_METHOD = :terminate
|
13
12
|
|
14
|
-
private_constant :BEFORE_METHOD
|
13
|
+
private_constant :BEFORE_METHOD
|
15
14
|
|
16
15
|
# Executes the given block before each spec in the current context runs.
|
17
16
|
#
|
@@ -53,35 +52,6 @@ module RSpec
|
|
53
52
|
private BEFORE_METHOD
|
54
53
|
end
|
55
54
|
|
56
|
-
# Executes the given block after each spec in the current context runs.
|
57
|
-
#
|
58
|
-
# @example
|
59
|
-
# require "r_spec"
|
60
|
-
#
|
61
|
-
# RSpec.describe Integer do
|
62
|
-
# after do
|
63
|
-
# puts "That is the answer to everything."
|
64
|
-
# end
|
65
|
-
#
|
66
|
-
# it { expect(42).to be 42 }
|
67
|
-
# end
|
68
|
-
#
|
69
|
-
# # Output to the console
|
70
|
-
# # Success: expected to be 42.
|
71
|
-
# # That is the answer to everything.
|
72
|
-
#
|
73
|
-
# @param block [Proc] The content to execute at the class initialization.
|
74
|
-
#
|
75
|
-
# @api public
|
76
|
-
def self.after(&block)
|
77
|
-
define_method(AFTER_METHOD) do
|
78
|
-
instance_exec(&block)
|
79
|
-
super()
|
80
|
-
end
|
81
|
-
|
82
|
-
private AFTER_METHOD
|
83
|
-
end
|
84
|
-
|
85
55
|
# Sets a user-defined property.
|
86
56
|
#
|
87
57
|
# @example
|
@@ -109,10 +79,10 @@ module RSpec
|
|
109
79
|
# @return [Symbol] A private method that define the block content.
|
110
80
|
#
|
111
81
|
# @api public
|
112
|
-
def self.let(name,
|
113
|
-
raise Error::ReservedMethod if
|
82
|
+
def self.let(name, ...)
|
83
|
+
raise Error::ReservedMethod if BEFORE_METHOD.equal?(name.to_sym)
|
114
84
|
|
115
|
-
private define_method(name,
|
85
|
+
private define_method(name, ...)
|
116
86
|
end
|
117
87
|
|
118
88
|
# Sets a user-defined property named {#subject}.
|
@@ -143,8 +113,8 @@ module RSpec
|
|
143
113
|
# @return [Symbol] A {#subject} method that define the block content.
|
144
114
|
#
|
145
115
|
# @api public
|
146
|
-
def self.subject(&
|
147
|
-
let(__method__, &
|
116
|
+
def self.subject(&)
|
117
|
+
let(__method__, &)
|
148
118
|
end
|
149
119
|
|
150
120
|
# Defines an example group that describes a unit to be tested.
|
@@ -165,10 +135,10 @@ module RSpec
|
|
165
135
|
# @param block [Proc] The block to define the specs.
|
166
136
|
#
|
167
137
|
# @api public
|
168
|
-
def self.describe(const, &
|
138
|
+
def self.describe(const, &)
|
169
139
|
desc = ::Class.new(self)
|
170
140
|
desc.let(:described_class) { const } if const.is_a?(::Module)
|
171
|
-
desc.instance_eval(&
|
141
|
+
desc.instance_eval(&)
|
172
142
|
end
|
173
143
|
|
174
144
|
# :nocov:
|
@@ -176,6 +146,11 @@ module RSpec
|
|
176
146
|
# Defines an example group that establishes a specific context, like
|
177
147
|
# _empty array_ versus _array with elements_.
|
178
148
|
#
|
149
|
+
# Unlike a `describe` block, all specifications executed within a
|
150
|
+
# `context` are isolated in a subprocess. This prevents possible side
|
151
|
+
# effects on the Ruby object environment from being propagated outside
|
152
|
+
# their context, which could alter the result of the unit test suite.
|
153
|
+
#
|
179
154
|
# @example
|
180
155
|
# require "r_spec"
|
181
156
|
#
|
@@ -199,8 +174,8 @@ module RSpec
|
|
199
174
|
#
|
200
175
|
# @api public
|
201
176
|
def self.context(_description, &block)
|
202
|
-
|
203
|
-
|
177
|
+
pid = ::Process.fork { ::Class.new(self).instance_eval(&block) }
|
178
|
+
exit false unless ::Process::Status.wait(pid).exitstatus.zero?
|
204
179
|
end
|
205
180
|
|
206
181
|
# :nocov:
|
@@ -246,7 +221,8 @@ module RSpec
|
|
246
221
|
#
|
247
222
|
# @api public
|
248
223
|
def self.it(_name = nil, &block)
|
249
|
-
|
224
|
+
Logger.source(*block.source_location)
|
225
|
+
example_without_attribute.new.instance_eval(&block)
|
250
226
|
end
|
251
227
|
|
252
228
|
# :nocov:
|
@@ -297,8 +273,10 @@ module RSpec
|
|
297
273
|
# @return (see ExpectationTarget::Base#result)
|
298
274
|
#
|
299
275
|
# @api public
|
300
|
-
def self.its(attribute,
|
301
|
-
|
276
|
+
def self.its(attribute, *, **, &block)
|
277
|
+
Logger.source(*block.source_location)
|
278
|
+
example_with_attribute(attribute, *, **).new
|
279
|
+
.instance_eval(&block)
|
302
280
|
end
|
303
281
|
|
304
282
|
# :nocov:
|
@@ -329,7 +307,7 @@ module RSpec
|
|
329
307
|
#
|
330
308
|
# @api public
|
331
309
|
def self.pending(message)
|
332
|
-
|
310
|
+
Logger.passed_spec Error::PendingExpectation.result(message)
|
333
311
|
end
|
334
312
|
|
335
313
|
# Example class for concrete test case.
|
@@ -351,15 +329,7 @@ module RSpec
|
|
351
329
|
end
|
352
330
|
end
|
353
331
|
|
354
|
-
|
355
|
-
def self.run(example, &block)
|
356
|
-
Console.source(*block.source_location)
|
357
|
-
exit false unless ::Aw.fork? { example.instance_eval(&block) }
|
358
|
-
ensure
|
359
|
-
example&.send(AFTER_METHOD)
|
360
|
-
end
|
361
|
-
|
362
|
-
private_class_method :example_without_attribute, :example_with_attribute, :run
|
332
|
+
private_class_method :example_without_attribute, :example_with_attribute
|
363
333
|
|
364
334
|
private
|
365
335
|
|
@@ -374,10 +344,6 @@ module RSpec
|
|
374
344
|
def subject
|
375
345
|
raise Error::UndefinedSubject, "subject not explicitly defined"
|
376
346
|
end
|
377
|
-
|
378
|
-
define_method(AFTER_METHOD) do
|
379
|
-
# do nothing by default
|
380
|
-
end
|
381
347
|
end
|
382
348
|
end
|
383
349
|
end
|
@@ -194,8 +194,8 @@ module RSpec
|
|
194
194
|
# @return [#matches?] A change matcher.
|
195
195
|
#
|
196
196
|
# @api public
|
197
|
-
def change(object, method,
|
198
|
-
::Matchi::Change.new(object, method,
|
197
|
+
def change(object, method, ...)
|
198
|
+
::Matchi::Change.new(object, method, ...)
|
199
199
|
end
|
200
200
|
|
201
201
|
# Satisfy matcher
|
@@ -209,8 +209,8 @@ module RSpec
|
|
209
209
|
# @return [#matches?] A satisfy matcher.
|
210
210
|
#
|
211
211
|
# @api public
|
212
|
-
def satisfy(&
|
213
|
-
::Matchi::Satisfy.new(&
|
212
|
+
def satisfy(&)
|
213
|
+
::Matchi::Satisfy.new(&)
|
214
214
|
end
|
215
215
|
|
216
216
|
private
|
@@ -221,10 +221,10 @@ module RSpec
|
|
221
221
|
# matcher = be_empty
|
222
222
|
# matcher.matches? { [] } # => true
|
223
223
|
# matcher.matches? { [4] } # => false
|
224
|
-
def method_missing(name,
|
224
|
+
def method_missing(name, ...)
|
225
225
|
return super unless predicate_matcher_name?(name)
|
226
226
|
|
227
|
-
::Matchi::Predicate.new(name,
|
227
|
+
::Matchi::Predicate.new(name, ...)
|
228
228
|
end
|
229
229
|
|
230
230
|
# :nocov:
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require "expresenter"
|
4
4
|
require "test_tube"
|
5
5
|
|
6
|
-
require_relative File.join("..", "
|
6
|
+
require_relative File.join("..", "logger")
|
7
7
|
|
8
8
|
module RSpec
|
9
9
|
module Clone
|
@@ -32,7 +32,7 @@ module RSpec
|
|
32
32
|
#
|
33
33
|
# @api public
|
34
34
|
def to(matcher)
|
35
|
-
absolute_requirement(matcher
|
35
|
+
absolute_requirement(matcher:, negate: false)
|
36
36
|
end
|
37
37
|
|
38
38
|
# Runs the given expectation, passing if `matcher` returns false.
|
@@ -47,7 +47,7 @@ module RSpec
|
|
47
47
|
#
|
48
48
|
# @api public
|
49
49
|
def not_to(matcher)
|
50
|
-
absolute_requirement(matcher
|
50
|
+
absolute_requirement(matcher:, negate: true)
|
51
51
|
end
|
52
52
|
|
53
53
|
protected
|
@@ -66,8 +66,8 @@ module RSpec
|
|
66
66
|
actual: test.actual,
|
67
67
|
error: test.error,
|
68
68
|
got: test.got,
|
69
|
-
matcher
|
70
|
-
negate:
|
69
|
+
matcher:,
|
70
|
+
negate:
|
71
71
|
)
|
72
72
|
end
|
73
73
|
|
@@ -82,6 +82,8 @@ module RSpec
|
|
82
82
|
test.got.equal?(true)
|
83
83
|
end
|
84
84
|
|
85
|
+
# :nocov:
|
86
|
+
|
85
87
|
# @param passed [Boolean] The high expectation passed or failed.
|
86
88
|
# @param actual [#object_id] The actual value.
|
87
89
|
# @param error [Exception, nil] Any raised exception.
|
@@ -94,18 +96,20 @@ module RSpec
|
|
94
96
|
# @raise [SystemExit] Terminate execution immediately by calling
|
95
97
|
# `Kernel.exit(false)` with a failure message written to STDERR.
|
96
98
|
def result(passed, actual:, error:, got:, matcher:, negate:)
|
97
|
-
|
98
|
-
actual
|
99
|
+
Logger.passed_spec ::Expresenter.call(passed).with(
|
100
|
+
actual:,
|
99
101
|
definition: matcher.to_s,
|
100
|
-
error
|
102
|
+
error:,
|
101
103
|
expected: matcher.expected,
|
102
|
-
got
|
103
|
-
negate
|
104
|
+
got:,
|
105
|
+
negate:,
|
104
106
|
level: :MUST
|
105
107
|
)
|
106
108
|
rescue ::Expresenter::Fail => e
|
107
|
-
|
109
|
+
Logger.failed_spec(e)
|
108
110
|
end
|
111
|
+
|
112
|
+
# :nocov:
|
109
113
|
end
|
110
114
|
end
|
111
115
|
end
|
@@ -29,9 +29,9 @@ module RSpec
|
|
29
29
|
# @raise (see Base#absolute_requirement)
|
30
30
|
def absolute_requirement(matcher:, negate:)
|
31
31
|
super(
|
32
|
-
::TestTube.invoke(
|
33
|
-
matcher
|
34
|
-
negate:
|
32
|
+
::TestTube.invoke(matcher:, negate:, &@input),
|
33
|
+
matcher:,
|
34
|
+
negate:
|
35
35
|
)
|
36
36
|
end
|
37
37
|
end
|
@@ -29,9 +29,9 @@ module RSpec
|
|
29
29
|
# @raise (see Base#absolute_requirement)
|
30
30
|
def absolute_requirement(matcher:, negate:)
|
31
31
|
super(
|
32
|
-
::TestTube.pass(@input, matcher
|
33
|
-
matcher
|
34
|
-
negate:
|
32
|
+
::TestTube.pass(@input, matcher:, negate:),
|
33
|
+
matcher:,
|
34
|
+
negate:
|
35
35
|
)
|
36
36
|
end
|
37
37
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RSpec
|
4
4
|
module Clone
|
5
5
|
# Send log messages to the console.
|
6
|
-
module
|
6
|
+
module Logger
|
7
7
|
# @param report [::Expresenter::Pass] Passed expectation result presenter.
|
8
8
|
#
|
9
9
|
# @see https://github.com/fixrb/expresenter
|
@@ -13,17 +13,21 @@ module RSpec
|
|
13
13
|
puts report.colored_string
|
14
14
|
end
|
15
15
|
|
16
|
+
# :nocov:
|
17
|
+
|
16
18
|
# @param report [::Expresenter::Fail] Failed expectation result presenter.
|
17
19
|
#
|
18
20
|
# @see https://github.com/fixrb/expresenter
|
19
21
|
#
|
20
|
-
# @raise [SystemExit] Terminate execution immediately with
|
22
|
+
# @raise [SystemExit] Terminate execution immediately with message.
|
21
23
|
def self.failed_spec(report)
|
22
24
|
abort report.colored_string
|
23
25
|
end
|
24
26
|
|
25
|
-
#
|
26
|
-
|
27
|
+
# :nocov:
|
28
|
+
|
29
|
+
# The Ruby source filename and line number containing this method or nil
|
30
|
+
# if this method was not defined in Ruby (i.e. native).
|
27
31
|
#
|
28
32
|
# @param filename [String, nil] The Ruby source filename.
|
29
33
|
# @param line [Integer, nil] The Ruby source line number.
|
data/lib/r_spec.rb
CHANGED
@@ -83,8 +83,8 @@ module RSpec
|
|
83
83
|
# @param description [String] A description that usually begins with "when",
|
84
84
|
# "with" or "without".
|
85
85
|
# @param block [Proc] The block to define the specs.
|
86
|
-
def self.context(description, &
|
87
|
-
Clone::Dsl.context(description, &
|
86
|
+
def self.context(description, &)
|
87
|
+
Clone::Dsl.context(description, &)
|
88
88
|
end
|
89
89
|
|
90
90
|
# :nocov:
|
@@ -117,8 +117,8 @@ module RSpec
|
|
117
117
|
#
|
118
118
|
# @param const [Module, String] A module to include in block context.
|
119
119
|
# @param block [Proc] The block to define the specs.
|
120
|
-
def self.describe(const, &
|
121
|
-
Clone::Dsl.describe(const, &
|
120
|
+
def self.describe(const, &)
|
121
|
+
Clone::Dsl.describe(const, &)
|
122
122
|
end
|
123
123
|
|
124
124
|
# :nocov:
|
@@ -143,8 +143,8 @@ module RSpec
|
|
143
143
|
#
|
144
144
|
# @raise (see RSpec::Clone::ExpectationTarget::Base#result)
|
145
145
|
# @return (see RSpec::Clone::ExpectationTarget::Base#result)
|
146
|
-
def self.it(name = nil, &
|
147
|
-
Clone::Dsl.it(name, &
|
146
|
+
def self.it(name = nil, &)
|
147
|
+
Clone::Dsl.it(name, &)
|
148
148
|
end
|
149
149
|
|
150
150
|
# :nocov:
|
metadata
CHANGED
@@ -1,197 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: r_spec-clone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cyril Kato
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: aw
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.2.0
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.2.0
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: expresenter
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
17
|
- - "~>"
|
32
18
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.4.
|
19
|
+
version: 1.4.1
|
34
20
|
type: :runtime
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
38
24
|
- - "~>"
|
39
25
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.4.
|
26
|
+
version: 1.4.1
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: matchi
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
31
|
- - "~>"
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version: 3.3.
|
33
|
+
version: 3.3.2
|
48
34
|
type: :runtime
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
38
|
- - "~>"
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version: 3.3.
|
40
|
+
version: 3.3.2
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: test_tube
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
45
|
- - "~>"
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
47
|
+
version: 3.0.0
|
62
48
|
type: :runtime
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
52
|
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: bundler
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rake
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rubocop-md
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: rubocop-performance
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: rubocop-rake
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: rubocop-rspec
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - ">="
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: rubocop-thread_safety
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - ">="
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '0'
|
160
|
-
type: :development
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - ">="
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '0'
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: simplecov
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - ">="
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0'
|
174
|
-
type: :development
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - ">="
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '0'
|
181
|
-
- !ruby/object:Gem::Dependency
|
182
|
-
name: yard
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
184
|
-
requirements:
|
185
|
-
- - ">="
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
version: '0'
|
188
|
-
type: :development
|
189
|
-
prerelease: false
|
190
|
-
version_requirements: !ruby/object:Gem::Requirement
|
191
|
-
requirements:
|
192
|
-
- - ">="
|
193
|
-
- !ruby/object:Gem::Version
|
194
|
-
version: '0'
|
54
|
+
version: 3.0.0
|
195
55
|
description: A minimalist RSpec clone with all the essentials.
|
196
56
|
email: contact@cyril.email
|
197
57
|
executables: []
|
@@ -202,7 +62,6 @@ files:
|
|
202
62
|
- README.md
|
203
63
|
- lib/r_spec.rb
|
204
64
|
- lib/r_spec/clone.rb
|
205
|
-
- lib/r_spec/clone/console.rb
|
206
65
|
- lib/r_spec/clone/dsl.rb
|
207
66
|
- lib/r_spec/clone/error.rb
|
208
67
|
- lib/r_spec/clone/error/pending_expectation.rb
|
@@ -217,6 +76,7 @@ files:
|
|
217
76
|
- lib/r_spec/clone/expectation_target/base.rb
|
218
77
|
- lib/r_spec/clone/expectation_target/block.rb
|
219
78
|
- lib/r_spec/clone/expectation_target/value.rb
|
79
|
+
- lib/r_spec/clone/logger.rb
|
220
80
|
homepage: https://r-spec.dev/
|
221
81
|
licenses:
|
222
82
|
- MIT
|
@@ -234,14 +94,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
234
94
|
requirements:
|
235
95
|
- - ">="
|
236
96
|
- !ruby/object:Gem::Version
|
237
|
-
version: 2.
|
97
|
+
version: 3.2.4
|
238
98
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
239
99
|
requirements:
|
240
100
|
- - ">="
|
241
101
|
- !ruby/object:Gem::Version
|
242
102
|
version: '0'
|
243
103
|
requirements: []
|
244
|
-
rubygems_version: 3.
|
104
|
+
rubygems_version: 3.4.19
|
245
105
|
signing_key:
|
246
106
|
specification_version: 4
|
247
107
|
summary: A minimalist RSpec clone
|