r_spec 1.0.0 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b251a708b0d9e2f0dcc8a17f7ef08cfeeafa6e553446e9a650431c9aaf7b6951
4
- data.tar.gz: 528cbc2cd07397ba094a5f08703be53467ac04ee85c82f1cd1465e419f4c5c92
3
+ metadata.gz: d50f4d43bfbae6d44a65b621585a8214ef347e6680cf783ba0983fa5cc39eda2
4
+ data.tar.gz: 80939bc93d83710a842203b519b25bb5784205477fb8dc6b0672cfaa5282613d
5
5
  SHA512:
6
- metadata.gz: 7132f226d0510929ec1a466c2c3e9a3c90a654efd399646476eb04b5fbdcad84254791eb270b83ca68e2c17ad06ca98581a79251714ae7032a9eb888f8716db2
7
- data.tar.gz: 55d0b1f4e98feeca3c875c542529e1ea5a4f43093a30658f56670f380de23f7f5402e562fccfb85e69e234a066f06ec8600493fcdedd871d78183ea419d055f6
6
+ metadata.gz: 2c9ad5b0ae0bd629818369e4065fc1191fb81e03f01513bc80fc6fa66f9adfbe16d6ce4147f942b5a8f6a1b9bf9c461c7ef9d63e74363b4c2ff39b77f7819a73
7
+ data.tar.gz: c9828c3a30f74b6468b137fbe5d03667f3ded7819d7dd08afe09d9fc2274cef3b389226b4d5873de2421f9cb2911941935cb1c378d86a77010565f64d5698c95
data/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
- The MIT License (MIT)
1
+ # The MIT License
2
2
 
3
- Copyright (c) 2015-2021 Cyril Kato
3
+ Copyright (c) 2015-2022 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,49 +1,33 @@
1
1
  # RSpec clone
2
2
 
3
- A minimalist __[RSpec](https://github.com/rspec/rspec) clone__ with all the essentials.
3
+ > A small [RSpec](https://github.com/rspec) clone based on [Fix testing tools for Ruby](https://github.com/fixrb).
4
4
 
5
- ![What did you RSpec?](https://github.com/cyril/r_spec.rb/raw/main/img/what-did-you-rspec.jpg)
5
+ ***
6
6
 
7
- ## Status
8
-
9
- [![Version](https://img.shields.io/github/v/tag/cyril/r_spec.rb?include_prereleases&label=Version&logo=github&sort=semver)](https://github.com/cyril/r_spec.rb/releases)
10
- [![Yard documentation](https://img.shields.io/badge/Yard-documentation-blue.svg?)](https://rubydoc.info/github/cyril/r_spec.rb/main)
11
- [![CI](https://github.com/cyril/r_spec.rb/workflows/CI/badge.svg?branch=main)](https://github.com/cyril/r_spec.rb/actions?query=workflow%3Aci+branch%3Amain)
12
- [![RuboCop](https://github.com/cyril/r_spec.rb/workflows/RuboCop/badge.svg?branch=main)](https://github.com/cyril/r_spec.rb/actions?query=workflow%3Arubocop+branch%3Amain)
13
- [![License](https://img.shields.io/github/license/cyril/r_spec.rb?label=License&logo=github)](https://github.com/cyril/r_spec.rb/raw/main/LICENSE.md)
7
+ :warning: Important:
14
8
 
15
- ## Project goals
9
+ I'd like to avoid confusion in the Ruby community by emphasizing that the gem of this project is not [rspec](https://rubygems.org/gems/rspec) but [r_spec](https://rubygems.org/gems/r_spec).
16
10
 
17
- * Enforce the guidelines and best practices outlined in the community [RSpec style guide](https://rspec.rubystyle.guide/).
18
- * Provide most of RSpec's DSL to express expected outcomes of a code example with no magical powers.
11
+ The [r_spec](https://rubygems.org/gems/r_spec) gem is a minimalist and personal reimplementation of the popular RSpec framework. My reimplementation is therefore independent of the original RSpec project.
19
12
 
20
- ## Some differences
13
+ For the purpose of the DSL reimplementation, I have kept the same `RSpec` module name, and following the [Ruby gems naming convention](https://guides.rubygems.org/name-your-gem/#use-underscores-for-multiple-words), I called its gem [r_spec](https://rubygems.org/gems/r_spec).
21
14
 
22
- * Less features and an implementation with much less code complexity.
23
- * Spec files can also be executed directly with the `ruby` executable.
24
- * There is no option to activate monkey-patching.
25
- * It does not rely on hacks such as `at_exit` hook to trigger the tests.
26
- * Built-in matchers [do not trust _actual_](https://asciinema.org/a/29172?autoplay=1&speed=2) and do not send it messages.
27
- * If no `subject` has been explicitly determined, none is defined.
28
- * If no described class is set, `described_class` is undefined instead of `nil`.
29
- * Expectations cannot be added inside a `before` block.
30
- * [Arbitrary helper methods](https://relishapp.com/rspec/rspec-core/v/3-10/docs/helper-methods/arbitrary-helper-methods) are not exposed to examples.
31
- * The `let` method defines a helper method rather than a memoized helper method.
32
- * The one-liner `is_expected` syntax also works with block expectations.
33
- * `subject`, `before`, `after` and `let` definitions must come before examples.
34
- * Each [`context` runs its tests in _isolation_](https://asciinema.org/a/29070?autoplay=1&speed=2) to prevent side effects.
15
+ However, to go further and explicitly indicate that this reimplementation is a clone, I have grouped all the code in a `RSpec::Clone` submodule within its [r_spec-clone](https://rubygems.org/gems/r_spec-clone) gem.
35
16
 
36
- ## Important ⚠️
17
+ ***
37
18
 
38
- To avoid confusion in the community, please note that:
19
+ ## Status
39
20
 
40
- - the gem of this project is **not [`rspec`](https://rubygems.org/gems/rspec)**,
41
- it is **[`r_spec`](https://rubygems.org/gems/r_spec)**;
42
- - this project is totally independent of [rspec.info](https://rspec.info/).
21
+ [![Home](https://img.shields.io/badge/Home-r--spec.dev-00af8b)](https://r-spec.dev/)
22
+ [![Version](https://img.shields.io/github/v/tag/cyril/r_spec.rb?label=Version&logo=github)](https://github.com/cyril/r_spec.rb/releases)
23
+ [![Yard documentation](https://img.shields.io/badge/Yard-documentation-blue.svg?logo=github)](https://rubydoc.info/github/cyril/r_spec.rb/main)
24
+ [![CI](https://github.com/cyril/r_spec.rb/workflows/CI/badge.svg?branch=main)](https://github.com/cyril/r_spec.rb/actions?query=workflow%3Aci+branch%3Amain)
25
+ [![RuboCop](https://github.com/cyril/r_spec.rb/workflows/RuboCop/badge.svg?branch=main)](https://github.com/cyril/r_spec.rb/actions?query=workflow%3Arubocop+branch%3Amain)
26
+ [![License](https://img.shields.io/github/license/cyril/r_spec.rb?label=License&logo=github)](https://github.com/cyril/r_spec.rb/raw/main/LICENSE.md)
43
27
 
44
- ### Note
28
+ ## Why did I redid that?
45
29
 
46
- Following [RubyGems naming conventions](https://guides.rubygems.org/name-your-gem/#use-underscores-for-multiple-words), the module name for this project is `RSpec`.
30
+ An urge to simplify the RSpec DSL and reduce the complexity of the code that implements it, and nothing better to do during a stay in Tokyo.
47
31
 
48
32
  ## Installation
49
33
 
@@ -56,7 +40,7 @@ gem "r_spec"
56
40
  And then execute:
57
41
 
58
42
  ```sh
59
- bundle
43
+ bundle install
60
44
  ```
61
45
 
62
46
  Or install it yourself as:
@@ -65,204 +49,68 @@ Or install it yourself as:
65
49
  gem install r_spec
66
50
  ```
67
51
 
68
- ## Overview
69
-
70
- __RSpec clone__ provides a structure for writing executable examples of how your code should behave.
71
-
72
- Inspired by [RSpec](https://rspec.info/), it includes a domain specific language (DSL) that allows you to write examples in a way similar to plain english.
73
-
74
- A basic spec looks something like this:
75
-
76
- [![RSpec clone demo](https://asciinema.org/a/422210.svg)](https://asciinema.org/a/422210?autoplay=1&speed=2)
77
-
78
- ## Usage
79
-
80
- ### Anatomy of a spec file
81
-
82
- To use the `RSpec` module and its DSL, you need to add `require "r_spec"` to your spec files.
83
- Many projects use a custom spec helper which organizes these includes.
84
-
85
- Concrete test cases are defined in `it` blocks.
86
- An optional descriptive string states it's purpose and a block contains the main logic performing the test.
87
-
88
- Test cases that have been defined or outlined but are not yet expected to work can be defined using `pending` instead of `it`. They will not be run but show up in the spec report as pending.
89
-
90
- An `it` block contains an example that should invoke the code to be tested and define what is expected of it.
91
- Each example can contain multiple expectations, but it should test only one specific behaviour.
92
-
93
- To express an expectation, wrap an object or block in `expect`, call `to` (or `not_to`) and pass it a matcher object.
94
- If the expectation is met, code execution continues.
95
- Otherwise the example has _failed_ and other code will not be executed.
96
-
97
- In test files, specs are structured by example groups which are defined by `describe` and `context` sections.
98
- Typically a top level `describe` defines the outer unit (such as a class) to be tested by the spec.
99
- Further `describe` sections can be nested within the outer unit to specify smaller units under test (such as individual methods).
100
-
101
- For unit tests, it is recommended to follow the conventions for method names:
102
-
103
- * outer `describe` is the name of the class, inner `describe` targets methods;
104
- * instance methods are prefixed with `#`, class methods with `.`.
105
-
106
- To establish certain contexts — think _empty array_ versus _array with elements_ — the `context` method may be used to communicate this to the reader.
107
- Its behavior is slightly different from `describe` because each `context` runs its tests in isolation,
108
- so side effects caused by testing do not propagate out of contexts.
109
-
110
- `describe` and `context` take an optional description as argument and a block containing the individual specs or nested groupings.
111
-
112
- ### Expectations
113
-
114
- Expectations define if the value being tested (_actual_) matches a certain value or specific criteria.
115
-
116
- #### Equivalence
117
-
118
- ```ruby
119
- expect(actual).to eql(expected) # passes if expected.eql?(actual)
120
- expect(actual).to eq(expected) # passes if expected.eql?(actual)
121
- ```
122
-
123
- #### Identity
124
-
125
- ```ruby
126
- expect(actual).to equal(expected) # passes if expected.equal?(actual)
127
- expect(actual).to be(expected) # passes if expected.equal?(actual)
128
- ```
129
-
130
- #### Regular expressions
131
-
132
- ```ruby
133
- expect(actual).to match(expected) # passes if expected.match?(actual)
134
- ```
135
-
136
- #### Expecting errors
137
-
138
- ```ruby
139
- expect { actual }.to raise_exception(expected) # passes if expected exception is raised
140
- ```
141
-
142
- #### Truth
52
+ ## GitHub repo
143
53
 
144
- ```ruby
145
- expect(actual).to be_true # passes if true.equal?(actual)
146
- ```
54
+ All the code is centralized in the `RSpec::Clone` module, whose source code is versioned at <https://github.com/cyril/r_spec-clone.rb>.
147
55
 
148
- #### Untruth
56
+ ## "`Hello, World!`" example
149
57
 
150
- ```ruby
151
- expect(actual).to be_false # passes if false.equal?(actual)
152
- ```
153
-
154
- #### Nil
58
+ Let's imagine a `string_hello_world_spec.rb` file that contains this code:
155
59
 
156
60
  ```ruby
157
- expect(actual).to be_nil # passes if nil.equal?(actual)
158
- ```
61
+ # frozen_string_literal: false
159
62
 
160
- #### Type/class
63
+ require "r_spec"
161
64
 
162
- ```ruby
163
- expect(actual).to be_instance_of(expected) # passes if expected.equal?(actual.class)
164
- expect(actual).to be_an_instance_of(expected) # passes if expected.equal?(actual.class)
165
- ```
65
+ app = "Hello, World!"
166
66
 
167
- ### Running specs
67
+ RSpec.describe String do
68
+ subject do
69
+ app
70
+ end
168
71
 
169
- By convention, specs live in the `spec/` directory of a project. Spec files should end with `_spec.rb` to be recognizable as such.
72
+ before do
73
+ subject.gsub!("World", friend)
74
+ end
170
75
 
171
- Depending of the project settings, you may run the specs of a project by running `rake spec` (see [`rake` integration example](#rake-integration-example) below).
172
- A single file can also be executed directly with the Ruby interpreter.
76
+ context "when Alice is greeted" do
77
+ let(:friend) { "Alice" }
173
78
 
174
- #### Examples
79
+ it { is_expected.to eq "Hello, Alice!" }
80
+ end
175
81
 
176
- Run all specs in files matching `spec/**/*_spec.rb`:
82
+ context "when Bob is greeted" do
83
+ let(:friend) { "Bob" }
177
84
 
178
- ```sh
179
- bundle exec rake spec
85
+ it { is_expected.to eq "Hello, Bob!" }
86
+ end
87
+ end
180
88
  ```
181
89
 
182
- Run a single file:
90
+ We can run it with Ruby:
183
91
 
184
92
  ```sh
185
- ruby spec/my/test/file_spec.rb
93
+ ruby string_hello_world_spec.rb
186
94
  ```
187
95
 
188
- I know that sounds weird, but the [`rspec` command line](https://relishapp.com/rspec/rspec-core/docs/command-line) is also working pretty well:
96
+ The report of the execution should be:
189
97
 
190
- ```sh
191
- rspec spec/my/test/file_spec.rb
192
- rspec spec/my/test/file_spec.rb:42
193
- rspec spec/my/test/
194
- rspec
98
+ ```txt
99
+ string_hello_world_spec.rb:19
100
+ Success: expected to eq "Hello, Alice!".
101
+ string_hello_world_spec.rb:25
102
+ Success: expected to eq "Hello, Bob!".
195
103
  ```
196
104
 
197
- ### Spec helper
198
-
199
- Many projects use a custom spec helper file, usually named `spec/spec_helper.rb`.
200
-
201
- This file is used to require `r_spec` and other includes, like the code from the project needed for every spec file.
105
+ ## External links
202
106
 
203
- ### `rake` integration example
204
-
205
- The following `Rakefile` settings should be enough:
206
-
207
- ```ruby
208
- require "bundler/gem_tasks"
209
- require "rake/testtask"
210
-
211
- Rake::TestTask.new do |t|
212
- t.pattern = "spec/**/*_spec.rb"
213
- t.verbose = true
214
- t.warning = true
215
- end
216
-
217
- task spec: :test
218
- task default: :test
219
- ```
220
-
221
- ## Performance
222
-
223
- ### Runtime
224
-
225
- Benchmark against [100 executions of a file containing one expectation](https://github.com/cyril/r_spec.rb/blob/main/benchmark/) (lower is better).
226
-
227
- ![Runtime](https://r-spec.dev/benchmark-runtime.png)
228
-
229
- ## Test suite
230
-
231
- __RSpec clone__'s specifications are self-described here: [spec/](https://github.com/cyril/r_spec.rb/blob/main/spec/)
232
-
233
- ## Contact
234
-
235
- * Home page: [https://r-spec.dev/](https://r-spec.dev/)
236
- * Cheatsheet: [https://r-spec.dev/cheatsheet.html](https://r-spec.dev/cheatsheet.html)
237
- * Source code: [https://github.com/cyril/r_spec.rb](https://github.com/cyril/r_spec.rb)
238
- * API Doc: [https://rubydoc.info/gems/r_spec](https://rubydoc.info/gems/r_spec)
239
- * Twitter: [https://twitter.com/cyri\_](https://twitter.com/cyri\_)
240
-
241
- ## Special thanks ❤️
242
-
243
- I would like to thank the whole [RSpec team](https://rspec.info/about/) for all their work.
244
- It's a great framework and it's a pleasure to work with every day.
245
-
246
- Without RSpec, this clone would not have been possible.
247
-
248
- ## Buy me a coffee ☕
249
-
250
- If you like this project please consider making a small donation.
251
-
252
- [![Donate with Ethereum](https://github.com/cyril/r_spec.rb/raw/main/img/donate-eth.svg)](https://etherscan.io/address/0x834b5c1feaff5aebf9cd0f25dc38e741d65ab773)
107
+ * [Official RSpec project](https://rspec.info/)
108
+ * [Personal RSpec reimplementation](https://r-spec.dev/)
253
109
 
254
110
  ## Versioning
255
111
 
256
- __RSpec clone__ follows [Semantic Versioning 2.0](https://semver.org/).
112
+ __RSpec__ uses [Semantic Versioning 2.0.0](https://semver.org/)
257
113
 
258
114
  ## License
259
115
 
260
- The [gem](https://rubygems.org/gems/r_spec) is available as open source under the terms of the [MIT License](https://github.com/cyril/r_spec.rb/raw/main/LICENSE.md).
261
-
262
- ## One more thing
263
-
264
- Under the hood, __RSpec clone__ is largely animated by [a collection of testing libraries designed to make programmers happy](https://github.com/fixrb/).
265
-
266
- It's a living example of what we can do combining small libraries together that can boost the fun of programming.
267
-
268
- ![Fix testing tools logo for Ruby](https://github.com/cyril/r_spec.rb/raw/main/img/fixrb.svg)
116
+ The [gem](https://rubygems.org/gems/r_spec) is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/lib/r_spec.rb CHANGED
@@ -1,170 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative File.join("r_spec", "dsl")
4
-
5
3
  # Top level namespace for the RSpec clone.
6
- #
7
- # @example The true from the false
8
- # require "r_spec"
9
- #
10
- # RSpec.describe "The true from the false" do
11
- # it { expect(false).not_to be true }
12
- # end
13
- #
14
- # # Output to the console
15
- # # Success: expected false not to be true.
16
- #
17
- # @example The basic behavior of arrays
18
- # require "r_spec"
19
- #
20
- # RSpec.describe Array do
21
- # describe "#size" do
22
- # it "correctly reports the number of elements in the Array" do
23
- # expect([1, 2, 3].size).to eq 3
24
- # end
25
- # end
26
- #
27
- # describe "#empty?" do
28
- # it "is empty when no elements are in the array" do
29
- # expect([].empty?).to be_true
30
- # end
31
- #
32
- # it "is not empty if there are elements in the array" do
33
- # expect([1].empty?).to be_false
34
- # end
35
- # end
36
- # end
37
- #
38
- # # Output to the console
39
- # # Success: expected to eq 3.
40
- # # Success: expected true to be true.
41
- # # Success: expected false to be false.
42
- #
43
- # @example An inherited definition of let
44
- # require "r_spec"
45
- #
46
- # RSpec.describe Integer do
47
- # let(:answer) { 42 }
48
- #
49
- # it "returns the value" do
50
- # expect(answer).to be(42)
51
- # end
52
- #
53
- # context "when the number is incremented" do
54
- # let(:answer) { super().next }
55
- #
56
- # it "returns the next value" do
57
- # expect(answer).to be(43)
58
- # end
59
- # end
60
- # end
61
- #
62
- # # Output to the console
63
- # # Success: expected to be 42.
64
- # # Success: expected to be 43.
65
- #
66
- # @api public
4
+ # @see https://github.com/cyril/r_spec-clone.rb
67
5
  module RSpec
68
- # Defines an example group that establishes a specific context, like _empty
69
- # array_ versus _array with elements_.
70
- #
71
- # Unlike {.describe}, the block is evaluated in isolation in order to scope
72
- # possible side effects inside its context.
73
- #
74
- # @example
75
- # require "r_spec"
76
- #
77
- # RSpec.context "when divided by zero" do
78
- # subject { 42 / 0 }
79
- #
80
- # it { is_expected.to raise_exception ZeroDivisionError }
81
- # end
82
- #
83
- # # Output to the console
84
- # # Success: divided by 0.
85
- #
86
- # @param description [String] A description that usually begins with "when",
87
- # "with" or "without".
88
- # @param block [Proc] The block to define the specs.
89
- #
90
- # @api public
91
- def self.context(description, &block)
92
- Dsl.context(description, &block)
93
- end
94
-
95
- # Defines an example group that describes a unit to be tested.
96
- #
97
- # @example
98
- # require "r_spec"
99
- #
100
- # RSpec.describe String do
101
- # describe "+" do
102
- # it("concats") { expect("foo" + "bar").to eq "foobar" }
103
- # end
104
- # end
105
- #
106
- # # Output to the console
107
- # # Success: expected to eq "foobar".
108
- #
109
- # @param const [Module, String] A module to include in block context.
110
- # @param block [Proc] The block to define the specs.
111
- #
112
- # @api public
113
- def self.describe(const, &block)
114
- Dsl.describe(const, &block)
115
- end
116
-
117
- # Defines a concrete test case.
118
- #
119
- # The test is performed by the block supplied to &block.
120
- #
121
- # @example The integer after 41
122
- # require "r_spec"
123
- #
124
- # RSpec.it { expect(41.next).to be 42 }
125
- #
126
- # # Output to the console
127
- # # Success: expected to be 42.
128
- #
129
- # It is usually used inside a {Dsl.describe} or {Dsl.context} section.
130
- #
131
- # @param name [String, nil] The name of the spec.
132
- # @param block [Proc] An expectation to evaluate.
133
- #
134
- # @raise (see RSpec::ExpectationTarget::Base#result)
135
- # @return (see RSpec::ExpectationTarget::Base#result)
136
- #
137
- # @api public
138
- def self.it(name = nil, &block)
139
- Dsl.it(name, &block)
140
- end
141
-
142
- # Defines a pending test case.
143
- #
144
- # `&block` is never evaluated. It can be used to describe behaviour that is
145
- # not yet implemented.
146
- #
147
- # @example
148
- # require "r_spec"
149
- #
150
- # RSpec.pending "is implemented but waiting" do
151
- # expect something to be finished
152
- # end
153
- #
154
- # RSpec.pending "is not yet implemented and waiting"
155
- #
156
- # # Output to the console
157
- # # Warning: is implemented but waiting.
158
- # # Warning: is not yet implemented and waiting.
159
- #
160
- # It is usually used inside a {Dsl.describe} or {Dsl.context} section.
161
- #
162
- # @param message [String] The reason why the example is pending.
163
- #
164
- # @return [nil] Write a message to STDOUT.
165
- #
166
- # @api public
167
- def self.pending(message)
168
- Dsl.pending(message)
169
- end
170
6
  end
7
+
8
+ require "r_spec/clone"
metadata CHANGED
@@ -1,71 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: r_spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyril Kato
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-24 00:00:00.000000000 Z
11
+ date: 2022-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: aw
14
+ name: r_spec-clone
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 0.1.12
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: 0.1.12
27
- - !ruby/object:Gem::Dependency
28
- name: expresenter
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 1.3.0
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 1.3.0
41
- - !ruby/object:Gem::Dependency
42
- name: matchi-rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 1.1.2
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 1.1.2
55
- - !ruby/object:Gem::Dependency
56
- name: test_tube
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
17
+ - - ">="
60
18
  - !ruby/object:Gem::Version
61
- version: 1.1.0
19
+ version: '0'
62
20
  type: :runtime
63
21
  prerelease: false
64
22
  version_requirements: !ruby/object:Gem::Requirement
65
23
  requirements:
66
- - - "~>"
24
+ - - ">="
67
25
  - !ruby/object:Gem::Version
68
- version: 1.1.0
26
+ version: '0'
69
27
  - !ruby/object:Gem::Dependency
70
28
  name: bundler
71
29
  requirement: !ruby/object:Gem::Requirement
@@ -201,29 +159,13 @@ files:
201
159
  - LICENSE.md
202
160
  - README.md
203
161
  - lib/r_spec.rb
204
- - lib/r_spec/console.rb
205
- - lib/r_spec/dsl.rb
206
- - lib/r_spec/error.rb
207
- - lib/r_spec/error/pending_expectation.rb
208
- - lib/r_spec/error/reserved_method.rb
209
- - lib/r_spec/error/undefined_described_class.rb
210
- - lib/r_spec/error/undefined_subject.rb
211
- - lib/r_spec/expectation_helper.rb
212
- - lib/r_spec/expectation_helper/it.rb
213
- - lib/r_spec/expectation_helper/its.rb
214
- - lib/r_spec/expectation_helper/shared.rb
215
- - lib/r_spec/expectation_target.rb
216
- - lib/r_spec/expectation_target/base.rb
217
- - lib/r_spec/expectation_target/block.rb
218
- - lib/r_spec/expectation_target/value.rb
219
162
  homepage: https://r-spec.dev/
220
163
  licenses:
221
164
  - MIT
222
165
  metadata:
223
166
  bug_tracker_uri: https://github.com/cyril/r_spec.rb/issues
224
- documentation_uri: https://rubydoc.info/gems/r_spec
225
167
  source_code_uri: https://github.com/cyril/r_spec.rb
226
- wiki_uri: https://github.com/cyril/r_spec.rb/wiki
168
+ rubygems_mfa_required: 'true'
227
169
  post_install_message:
228
170
  rdoc_options: []
229
171
  require_paths:
@@ -239,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
239
181
  - !ruby/object:Gem::Version
240
182
  version: '0'
241
183
  requirements: []
242
- rubygems_version: 3.1.6
184
+ rubygems_version: 3.1.2
243
185
  signing_key:
244
186
  specification_version: 4
245
187
  summary: A minimalist RSpec clone
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RSpec
4
- # Send log messages to the console.
5
- #
6
- # @api private
7
- module Console
8
- # @param report [::Expresenter::Pass] Passed expectation result presenter.
9
- #
10
- # @see https://github.com/fixrb/expresenter
11
- #
12
- # @return [nil] Add a colored message to `$stdout`.
13
- def self.passed_spec(report)
14
- puts report.colored_string
15
- end
16
-
17
- # @param report [::Expresenter::Fail] Failed expectation result presenter.
18
- #
19
- # @see https://github.com/fixrb/expresenter
20
- #
21
- # @raise [SystemExit] Terminate execution immediately with colored message.
22
- def self.failed_spec(report)
23
- abort report.colored_string
24
- end
25
-
26
- # The Ruby source filename and line number containing this method or nil if
27
- # this method was not defined in Ruby (i.e. native).
28
- #
29
- # @param filename [String, nil] The Ruby source filename.
30
- # @param line [Integer, nil] The Ruby source line number.
31
- #
32
- # @return [String] The Ruby source filename and line number associated with
33
- # the evaluated spec.
34
- def self.source(filename, line)
35
- puts [filename, line].compact.join(":")
36
- end
37
- end
38
- end