rspec_in_context 1.0.1.2 → 1.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 +4 -4
- data/.github/workflows/test_and_publish.yml +10 -50
- data/.github/workflows/test_only.yml +5 -47
- data/.rubocop.yml +4 -0
- data/CHANGELOG.md +7 -2
- data/README.md +48 -0
- data/lib/rspec_in_context.rb +5 -2
- data/lib/rspec_in_context/in_context.rb +21 -8
- data/lib/rspec_in_context/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1483e9b55b3cabffad15491bec3e5c3f006b421c4fa62099cce8effc4bf428b3
|
4
|
+
data.tar.gz: 92e35ec980fa84397bb5b33f39e6302825c8ae60aaa581cc009befa507f9b98e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f2b2c8e5a4f5b65692b73cb81558a4aaaed3797da5b3aded5b3dc1ff8e943d3968f68df69007d9d15864ca1d14b934f7c51a57fc2a48d6a2757ab63c494ba4f
|
7
|
+
data.tar.gz: 6fd7be08a125054917af01ba365d34a2dcae63895f4aba95731e001dbd7fd757d4d617049e6f9d36ca576d817d35c543f76ae8fb10dc0172ff94bd2289e06217
|
@@ -6,7 +6,10 @@ on:
|
|
6
6
|
- main
|
7
7
|
|
8
8
|
jobs:
|
9
|
-
|
9
|
+
tests:
|
10
|
+
strategy:
|
11
|
+
matrix:
|
12
|
+
ruby: [2.5, 2.6, 2.7, 3.0]
|
10
13
|
runs-on: ubuntu-latest
|
11
14
|
|
12
15
|
steps:
|
@@ -14,52 +17,7 @@ jobs:
|
|
14
17
|
- name: Set up Ruby
|
15
18
|
uses: ruby/setup-ruby@v1
|
16
19
|
with:
|
17
|
-
ruby-version:
|
18
|
-
- name: Install dependencies
|
19
|
-
run: bundle install
|
20
|
-
- name: Run linter
|
21
|
-
run: bundle exec rubocop
|
22
|
-
- name: Run tests
|
23
|
-
run: bundle exec rspec
|
24
|
-
test-2_6:
|
25
|
-
runs-on: ubuntu-latest
|
26
|
-
|
27
|
-
steps:
|
28
|
-
- uses: actions/checkout@v2
|
29
|
-
- name: Set up Ruby
|
30
|
-
uses: ruby/setup-ruby@v1
|
31
|
-
with:
|
32
|
-
ruby-version: 2.6
|
33
|
-
- name: Install dependencies
|
34
|
-
run: bundle install
|
35
|
-
- name: Run linter
|
36
|
-
run: bundle exec rubocop
|
37
|
-
- name: Run tests
|
38
|
-
run: bundle exec rspec
|
39
|
-
test-2_7:
|
40
|
-
runs-on: ubuntu-latest
|
41
|
-
|
42
|
-
steps:
|
43
|
-
- uses: actions/checkout@v2
|
44
|
-
- name: Set up Ruby
|
45
|
-
uses: ruby/setup-ruby@v1
|
46
|
-
with:
|
47
|
-
ruby-version: 2.7
|
48
|
-
- name: Install dependencies
|
49
|
-
run: bundle install
|
50
|
-
- name: Run linter
|
51
|
-
run: bundle exec rubocop
|
52
|
-
- name: Run tests
|
53
|
-
run: bundle exec rspec
|
54
|
-
test-3_0:
|
55
|
-
runs-on: ubuntu-latest
|
56
|
-
|
57
|
-
steps:
|
58
|
-
- uses: actions/checkout@v2
|
59
|
-
- name: Set up Ruby
|
60
|
-
uses: ruby/setup-ruby@v1
|
61
|
-
with:
|
62
|
-
ruby-version: 3.0
|
20
|
+
ruby-version: ${{ matrix.ruby }}
|
63
21
|
- name: Install dependencies
|
64
22
|
run: bundle install
|
65
23
|
- name: Run linter
|
@@ -67,7 +25,7 @@ jobs:
|
|
67
25
|
- name: Run tests
|
68
26
|
run: bundle exec rspec
|
69
27
|
release:
|
70
|
-
needs: [
|
28
|
+
needs: [tests]
|
71
29
|
runs-on: ubuntu-latest
|
72
30
|
|
73
31
|
steps:
|
@@ -84,5 +42,7 @@ jobs:
|
|
84
42
|
run: "mkdir -p ~/.gem && echo -e \"---\\r\\n:rubygems_api_key: $RUBYGEM_KEY\" > ~/.gem/credentials && chmod 0600 ~/.gem/credentials"
|
85
43
|
- name: Setup username/email
|
86
44
|
run: "git config --global user.email zaratan@hey.com && git config --global user.name \"Denis <Zaratan> Pasin\""
|
87
|
-
- name:
|
88
|
-
run:
|
45
|
+
- name: Fetch tags from remote
|
46
|
+
run: "git fetch -t"
|
47
|
+
- name: Publish if version change
|
48
|
+
run: 'git diff `git tag | tail -1` lib/rspec_in_context/version.rb | grep -E "^\+.*VERSION" && rake release || echo "No release for now"'
|
@@ -6,7 +6,10 @@ on:
|
|
6
6
|
- main
|
7
7
|
|
8
8
|
jobs:
|
9
|
-
|
9
|
+
tests:
|
10
|
+
strategy:
|
11
|
+
matrix:
|
12
|
+
ruby: [2.5, 2.6, 2.7, 3.0]
|
10
13
|
runs-on: ubuntu-latest
|
11
14
|
|
12
15
|
steps:
|
@@ -14,52 +17,7 @@ jobs:
|
|
14
17
|
- name: Set up Ruby
|
15
18
|
uses: ruby/setup-ruby@v1
|
16
19
|
with:
|
17
|
-
ruby-version:
|
18
|
-
- name: Install dependencies
|
19
|
-
run: bundle install
|
20
|
-
- name: Run linter
|
21
|
-
run: bundle exec rubocop
|
22
|
-
- name: Run tests
|
23
|
-
run: bundle exec rspec
|
24
|
-
test-2_6:
|
25
|
-
runs-on: ubuntu-latest
|
26
|
-
|
27
|
-
steps:
|
28
|
-
- uses: actions/checkout@v2
|
29
|
-
- name: Set up Ruby
|
30
|
-
uses: ruby/setup-ruby@v1
|
31
|
-
with:
|
32
|
-
ruby-version: 2.6
|
33
|
-
- name: Install dependencies
|
34
|
-
run: bundle install
|
35
|
-
- name: Run linter
|
36
|
-
run: bundle exec rubocop
|
37
|
-
- name: Run tests
|
38
|
-
run: bundle exec rspec
|
39
|
-
test-2_7:
|
40
|
-
runs-on: ubuntu-latest
|
41
|
-
|
42
|
-
steps:
|
43
|
-
- uses: actions/checkout@v2
|
44
|
-
- name: Set up Ruby
|
45
|
-
uses: ruby/setup-ruby@v1
|
46
|
-
with:
|
47
|
-
ruby-version: 2.7
|
48
|
-
- name: Install dependencies
|
49
|
-
run: bundle install
|
50
|
-
- name: Run linter
|
51
|
-
run: bundle exec rubocop
|
52
|
-
- name: Run tests
|
53
|
-
run: bundle exec rspec
|
54
|
-
test-3_0:
|
55
|
-
runs-on: ubuntu-latest
|
56
|
-
|
57
|
-
steps:
|
58
|
-
- uses: actions/checkout@v2
|
59
|
-
- name: Set up Ruby
|
60
|
-
uses: ruby/setup-ruby@v1
|
61
|
-
with:
|
62
|
-
ruby-version: 3.0
|
20
|
+
ruby-version: ${{ matrix.ruby }}
|
63
21
|
- name: Install dependencies
|
64
22
|
run: bundle install
|
65
23
|
- name: Run linter
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -6,10 +6,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [1.1.0] - 2020-12-27
|
10
|
+
### Added
|
11
|
+
- **BREAKING** Option to silence in_context block. They used to always wrap themself into a context block with their name. This is not the case anymore. All in_context are silent unless explicitely declared as not.
|
12
|
+
|
9
13
|
## [1.0.1.2] - 2020-12-26
|
10
14
|
### Added
|
11
15
|
- Changelog
|
12
16
|
- Support ruby 3.0
|
13
17
|
|
14
|
-
[Unreleased]: https://github.com/zaratan/
|
15
|
-
[1.
|
18
|
+
[Unreleased]: https://github.com/zaratan/rspec_in_context/compare/v1.1.0...HEAD
|
19
|
+
[1.1.0]: https://github.com/zaratan/rspec_in_context/releases/tag/v1.1.0
|
20
|
+
[1.0.1.2]: https://github.com/zaratan/rspec_in_context/releases/tag/v1.0.1.2
|
data/README.md
CHANGED
@@ -219,6 +219,54 @@ in_context "namespaced context", namespace: "namespace name"
|
|
219
219
|
in_context "namespaced context", ns: "namespace name"
|
220
220
|
```
|
221
221
|
|
222
|
+
#### Making `in_context` adverstise itself
|
223
|
+
|
224
|
+
The fact that a `in_context` block is used inside the test is silent and invisible by default.
|
225
|
+
|
226
|
+
But, there's some case where it helps to make the `in_context` to wrap its execution in a `context` block.
|
227
|
+
For example:
|
228
|
+
```ruby
|
229
|
+
define_context "with my_var defined" do
|
230
|
+
before do
|
231
|
+
described_class.set_my_var(true)
|
232
|
+
end
|
233
|
+
|
234
|
+
it "works"
|
235
|
+
end
|
236
|
+
|
237
|
+
define_context "without my_var defined" do
|
238
|
+
it "doesn't work"
|
239
|
+
end
|
240
|
+
|
241
|
+
RSpec.describe MyNiceClass do
|
242
|
+
in_context "with my_var defined"
|
243
|
+
in_context "without my_var defined"
|
244
|
+
end
|
245
|
+
```
|
246
|
+
Using a `rspec -f doc` will only print "MyNiceClass works" and "MyNiceClass doesn't work" which is not really a good documentation.
|
247
|
+
|
248
|
+
So, you can define a context specifying it not to be `silent` or to `print_context`.
|
249
|
+
For example :
|
250
|
+
```ruby
|
251
|
+
define_context "with my_var defined", silent: false do
|
252
|
+
before do
|
253
|
+
described_class.set_my_var(true)
|
254
|
+
end
|
255
|
+
|
256
|
+
it "works"
|
257
|
+
end
|
258
|
+
|
259
|
+
define_context "without my_var defined", print_context: true do
|
260
|
+
it "doesn't work"
|
261
|
+
end
|
262
|
+
|
263
|
+
RSpec.describe MyNiceClass do
|
264
|
+
in_context "with my_var defined"
|
265
|
+
in_context "without my_var defined"
|
266
|
+
end
|
267
|
+
```
|
268
|
+
Will print "MyNiceClass with my_var defined works" and "MyNiceClass without my_var defined doesn't work". Which is valid and readable documentation.
|
269
|
+
|
222
270
|
## Development
|
223
271
|
|
224
272
|
|
data/lib/rspec_in_context.rb
CHANGED
@@ -21,9 +21,12 @@ module RSpec
|
|
21
21
|
# @param name [String, Symbol] Name of the defined context
|
22
22
|
# @param namespace [String, Symbol] Namespace where to store your context
|
23
23
|
# @param ns Alias of namespace
|
24
|
+
# @param silent [Boolean] Does the in_context should wrap itself into a context block with its name
|
25
|
+
# @param print_context [Boolean] Reverse alias of silent
|
24
26
|
# @param block [Proc] code that will be injected later
|
25
|
-
def self.define_context(name, namespace: nil, ns: nil, &block)
|
27
|
+
def self.define_context(name, namespace: nil, ns: nil, silent: true, print_context: nil, &block)
|
26
28
|
namespace ||= ns
|
27
|
-
|
29
|
+
silent = print_context.nil? ? silent : !print_context
|
30
|
+
RspecInContext::InContext.outside_define_context(name, namespace, silent, &block)
|
28
31
|
end
|
29
32
|
end
|
@@ -6,7 +6,12 @@ module RspecInContext
|
|
6
6
|
class NoContextFound < StandardError; end
|
7
7
|
|
8
8
|
# Context struct
|
9
|
-
|
9
|
+
# @attr [Proc] block what will be executed in the test context
|
10
|
+
# @attr [Class] owner current rspec context class. This will be used to know where a define_context has been defined
|
11
|
+
# @attr [String | Symbol] name represent the name by which the context can be find.
|
12
|
+
# @attr [String | Symbol] namespace namespace for context names to avoid collisions
|
13
|
+
# @attr [Boolean] silent does the in_context should wrap itself into a context with its name upon execution
|
14
|
+
Context = Struct.new(:block, :owner, :name, :namespace, :silent)
|
10
15
|
|
11
16
|
# Main module containing almost every methods
|
12
17
|
module InContext
|
@@ -29,10 +34,10 @@ module RspecInContext
|
|
29
34
|
# @api private
|
30
35
|
#
|
31
36
|
# @note Will warn if a context is overriden
|
32
|
-
def add_context(context_name, owner = nil, namespace = nil, &block)
|
37
|
+
def add_context(context_name, owner = nil, namespace = nil, silent = true, &block) # rubocop:disable Style/OptionalBooleanParameter
|
33
38
|
namespace ||= GLOBAL_CONTEXT
|
34
39
|
warn("Overriding an existing context: #{context_name}@#{namespace}") if contexts[namespace][context_name]
|
35
|
-
contexts[namespace][context_name] = Context.new(block, owner, context_name, namespace)
|
40
|
+
contexts[namespace][context_name] = Context.new(block, owner, context_name, namespace, silent)
|
36
41
|
end
|
37
42
|
|
38
43
|
# Find a context.
|
@@ -63,8 +68,8 @@ module RspecInContext
|
|
63
68
|
|
64
69
|
# @api private
|
65
70
|
# Define a context from outside a RSpec.describe block
|
66
|
-
def outside_define_context(context_name, namespace, &block)
|
67
|
-
InContext.add_context(context_name, nil, namespace, &block)
|
71
|
+
def outside_define_context(context_name, namespace, silent, &block)
|
72
|
+
InContext.add_context(context_name, nil, namespace, silent, &block)
|
68
73
|
end
|
69
74
|
end
|
70
75
|
|
@@ -80,8 +85,13 @@ module RspecInContext
|
|
80
85
|
def in_context(context_name, *args, namespace: nil, ns: nil, &block)
|
81
86
|
namespace ||= ns
|
82
87
|
Thread.current[:test_block] = block
|
88
|
+
context_to_exec = InContext.find_context(context_name, namespace)
|
89
|
+
if context_to_exec.silent
|
90
|
+
return instance_exec(*args, &context_to_exec.block)
|
91
|
+
end
|
92
|
+
|
83
93
|
context(context_name.to_s) do
|
84
|
-
instance_exec(*args, &
|
94
|
+
instance_exec(*args, &context_to_exec.block)
|
85
95
|
end
|
86
96
|
end
|
87
97
|
|
@@ -102,12 +112,15 @@ module RspecInContext
|
|
102
112
|
# It helps reducing colisions when you define "global" contexts
|
103
113
|
# @param ns [String, Symbol] Alias of namespace
|
104
114
|
# @param block [Proc] Contain the code that will be injected with #in_context later
|
115
|
+
# @param silent [Boolean] Does the in_context should wrap itself into a context block with its name
|
116
|
+
# @param print_context [Boolean] Reverse alias of silent
|
105
117
|
#
|
106
118
|
# @note contexts are scoped to the block they are defined in.
|
107
|
-
def define_context(context_name, namespace: nil, ns: nil, &block)
|
119
|
+
def define_context(context_name, namespace: nil, ns: nil, silent: true, print_context: nil, &block)
|
108
120
|
namespace ||= ns
|
121
|
+
silent = print_context.nil? ? silent : !print_context
|
109
122
|
instance_exec do
|
110
|
-
InContext.add_context(context_name, hooks.instance_variable_get(:@owner), namespace, &block)
|
123
|
+
InContext.add_context(context_name, hooks.instance_variable_get(:@owner), namespace, silent, &block)
|
111
124
|
end
|
112
125
|
end
|
113
126
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec_in_context
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis <Zaratan> Pasin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-12-
|
11
|
+
date: 2020-12-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|