minitest-substitute 0.1.0 → 0.2.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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +6 -0
- data/README.md +24 -11
- data/lib/minitest/substitute/spec.rb +9 -8
- data/lib/minitest/substitute/substitutor.rb +40 -0
- data/lib/minitest/substitute/version.rb +1 -1
- data/lib/minitest/substitute/with.rb +3 -16
- data/lib/minitest/substitute.rb +1 -0
- data.tar.gz.sig +0 -0
- metadata +8 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 288e4fc7e4e20c4b649237471762f8723ce333f2886d4244048033ea281c4ab2
|
4
|
+
data.tar.gz: ee23d391142761ea6be22ecb306944313e612fc697c4849ab4f70c7a6ce8e844
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d2abd17135f9a750c2e7efb89e1fbc4d2b1ce30a7767e60ad368715059de575435e36856128e5e911c495cfc407169ef68baf9176721ee11eb28f55197fb13f
|
7
|
+
data.tar.gz: ba8d78a68880474bd1051887ad5435e0efdda86aa78c643ddad004bdf606e725ee688385da114abdc4dfb110ad5eb42e5c1a7de146de380e49372296ae6ec9de
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -41,13 +41,6 @@ require 'minitest/substitute'
|
|
41
41
|
|
42
42
|
## Usage
|
43
43
|
|
44
|
-
This lightweight gem implements features on a "as needed" basis, as of now:
|
45
|
-
|
46
|
-
* substitution of instance variables
|
47
|
-
* substitution of global variables
|
48
|
-
|
49
|
-
Please [create an issue describing your use case](https://github.com/svoop/minitest-substitute/issues) in case you need more features such as the substitution of class variables or substitution via accessor methods.
|
50
|
-
|
51
44
|
### Block
|
52
45
|
|
53
46
|
To substitute the value of an instance variable for the duration of a block:
|
@@ -59,11 +52,29 @@ class Config
|
|
59
52
|
end
|
60
53
|
end
|
61
54
|
|
62
|
-
Config.
|
63
|
-
|
64
|
-
|
55
|
+
config = Config.new
|
56
|
+
|
57
|
+
config.instance_variable_get('@version') # => 1
|
58
|
+
with '@version', 2, on: config do
|
59
|
+
config.instance_variable_get('@version') # => 2
|
60
|
+
end
|
61
|
+
config.instance_variable_get('@version') # => 1
|
62
|
+
```
|
63
|
+
|
64
|
+
:warning: The target `on` is set explicitly in this case. If you omit this argument, `self` will be used as target by default.
|
65
|
+
|
66
|
+
Class variables can be substituted as well:
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
class Config
|
70
|
+
@@counter = 0
|
71
|
+
end
|
72
|
+
|
73
|
+
Config.class_variable_get('@@counter') # => 0
|
74
|
+
with '@@counter', 42, on: Config do
|
75
|
+
Config.class_variable_get('@@counter') # => 42
|
65
76
|
end
|
66
|
-
Config.
|
77
|
+
Config.class_variable_get('@@counter') # => 0
|
67
78
|
```
|
68
79
|
|
69
80
|
Same goes for global variables:
|
@@ -128,6 +139,8 @@ with '@version', on: Config do
|
|
128
139
|
end
|
129
140
|
```
|
130
141
|
|
142
|
+
:warning: The target `on` is set explicitly in this case. If you omit this argument, `:subject` will be used as target by default which refers to the subject defined by the `subject {}` helper.
|
143
|
+
|
131
144
|
It's safe to use multiple `with` statements within one `describe` block.
|
132
145
|
|
133
146
|
(The spec integration is borrowed from [minitest-around](https://rubygems.org/gems/minitest-around) for elegance and compatibility.)
|
@@ -3,23 +3,23 @@
|
|
3
3
|
require 'minitest/spec'
|
4
4
|
|
5
5
|
Minitest::Spec::DSL.class_eval do
|
6
|
-
class Substitutor
|
7
|
-
include Minitest::Substitute::With
|
8
|
-
end
|
9
6
|
|
10
7
|
# Substitute the variable value for the duration of the current description
|
11
8
|
#
|
12
9
|
# @param variable [String] instance or global variable name
|
13
10
|
# @param substitute [Object] temporary substitution value
|
14
|
-
# @param on [Object, nil] substitute in the context of this object
|
11
|
+
# @param on [Object, Symbol, nil] substitute in the context of this object
|
12
|
+
# or in the context of the declared subject if +:subject+ is set
|
15
13
|
# @yield temporary substitution value (takes precedence over +substitute+ param)
|
16
|
-
def with(variable, substitute=nil, on:
|
14
|
+
def with(variable, substitute=nil, on: :subject)
|
15
|
+
substitute = yield if block_given?
|
16
|
+
substitutor = Minitest::Substitute::Substitutor.new(variable, substitute, on: on)
|
17
17
|
before do
|
18
|
-
|
19
|
-
|
18
|
+
substitutor.on = subject if on == :subject && respond_to?(:subject)
|
19
|
+
substitutor.commit
|
20
20
|
end
|
21
21
|
after do
|
22
|
-
|
22
|
+
substitutor.rollback
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -44,4 +44,5 @@ Minitest::Spec::DSL.class_eval do
|
|
44
44
|
end
|
45
45
|
end) #.then &:include
|
46
46
|
end
|
47
|
+
|
47
48
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Minitest
|
4
|
+
module Substitute
|
5
|
+
class Substitutor
|
6
|
+
|
7
|
+
EVAL_METHODS = [:instance_eval, :instance_eval, :class_eval].freeze
|
8
|
+
|
9
|
+
attr_writer :on
|
10
|
+
|
11
|
+
def initialize(variable, substitute, on:)
|
12
|
+
@variable, @substitute, @on = variable, substitute, on
|
13
|
+
end
|
14
|
+
|
15
|
+
def commit
|
16
|
+
@original = get
|
17
|
+
set @substitute
|
18
|
+
end
|
19
|
+
|
20
|
+
def rollback
|
21
|
+
set @original
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def eval_method
|
27
|
+
EVAL_METHODS[@variable.count('@')]
|
28
|
+
end
|
29
|
+
|
30
|
+
def get
|
31
|
+
@on.send(eval_method, @variable.to_s)
|
32
|
+
end
|
33
|
+
|
34
|
+
def set(value)
|
35
|
+
@on.send(eval_method, "#{@variable} = value")
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -3,10 +3,6 @@
|
|
3
3
|
module Minitest
|
4
4
|
module Substitute
|
5
5
|
module With
|
6
|
-
@original = {}
|
7
|
-
class << self
|
8
|
-
attr_accessor :original
|
9
|
-
end
|
10
6
|
|
11
7
|
# Substitute the variable value for the duration of the given block
|
12
8
|
#
|
@@ -16,22 +12,13 @@ module Minitest
|
|
16
12
|
# @yield block during which the substitution is made
|
17
13
|
# @return [Object] return value of the yielded block
|
18
14
|
def with(variable, substitute, on: self)
|
19
|
-
|
15
|
+
substitutor = Minitest::Substitute::Substitutor.new(variable, substitute, on: on)
|
16
|
+
substitutor.commit
|
20
17
|
yield.tap do
|
21
|
-
|
18
|
+
substitutor.rollback
|
22
19
|
end
|
23
20
|
end
|
24
21
|
|
25
|
-
private
|
26
|
-
|
27
|
-
def commit_substitution(variable, substitute, on:)
|
28
|
-
Minitest::Substitute::With.original[variable.hash] = on.instance_eval variable.to_s
|
29
|
-
on.instance_eval "#{variable} = substitute"
|
30
|
-
end
|
31
|
-
|
32
|
-
def rollback_substitution(variable, on:)
|
33
|
-
on.instance_eval "#{variable} = Minitest::Substitute::With.original.delete(variable.hash)"
|
34
|
-
end
|
35
22
|
end
|
36
23
|
end
|
37
24
|
end
|
data/lib/minitest/substitute.rb
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minitest-substitute
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sven Schwyn
|
@@ -29,7 +29,7 @@ cert_chain:
|
|
29
29
|
kAyiRqgxF4dJviwtqI7mZIomWL63+kXLgjOjMe1SHxfIPo/0ji6+r1p4KYa7o41v
|
30
30
|
fwIwU1MKlFBdsjkd
|
31
31
|
-----END CERTIFICATE-----
|
32
|
-
date: 2023-08-
|
32
|
+
date: 2023-08-25 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: minitest
|
@@ -157,7 +157,11 @@ dependencies:
|
|
157
157
|
- - ">="
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: '0'
|
160
|
-
description:
|
160
|
+
description: |
|
161
|
+
Simple Minitest helper to replace values such as an instance variable of an
|
162
|
+
object or an environment variable for the duration of a block or a group of
|
163
|
+
tests. This comes in very handy when you have to derive from default
|
164
|
+
configuration in order to test some aspects of your code.
|
161
165
|
email:
|
162
166
|
- ruby@bitcetera.com
|
163
167
|
executables: []
|
@@ -172,6 +176,7 @@ files:
|
|
172
176
|
- README.md
|
173
177
|
- lib/minitest/substitute.rb
|
174
178
|
- lib/minitest/substitute/spec.rb
|
179
|
+
- lib/minitest/substitute/substitutor.rb
|
175
180
|
- lib/minitest/substitute/version.rb
|
176
181
|
- lib/minitest/substitute/with.rb
|
177
182
|
homepage: https://github.com/svoop/minitest-substitute
|
metadata.gz.sig
CHANGED
Binary file
|