dumpling 0.3.2 → 0.4.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/README.md +45 -0
- data/lib/dumpling.rb +2 -0
- data/lib/dumpling/registry.rb +1 -3
- data/lib/dumpling/test_container.rb +26 -0
- data/lib/dumpling/test_registry.rb +44 -0
- data/lib/dumpling/version.rb +2 -2
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0348b9022e9d1fac207f2198cf5ab4f1d1edce7
|
4
|
+
data.tar.gz: c645b20102b98c8cff8e6ceccda5181675dab954
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aebe20a92526105a5c569852fb5004713c85acdb2e833f86ec783dd7c1eda6acd886d0e1533d928f70d1beb87848f685fb73f01c4dd2f259f0a3678c36002b85
|
7
|
+
data.tar.gz: 0d2f1dea0ac5fd3db845d4ff4887aafda5515c798888411fa3b5af2ed35230230ad481c12bb3d47378885aa739c24df6c9cbc6d82f9f3588af527dc948553f2b
|
data/README.md
CHANGED
@@ -189,6 +189,51 @@ end
|
|
189
189
|
duplicate.get(:game) # => BOOM! raise Dumpling::Errors::Container::Missing
|
190
190
|
```
|
191
191
|
|
192
|
+
### Using Dumpling in tests
|
193
|
+
|
194
|
+
In order to mock services you can incorporate `Dumpling::TestContainer` in your test environment.
|
195
|
+
It has two additional methods, namely `#mock` and `#clear_mocks`
|
196
|
+
|
197
|
+
For instance, you have configured the following services:
|
198
|
+
|
199
|
+
```ruby
|
200
|
+
container = app_env == :test ? Dumpling::TestContainer.new : Dumpling::Container.new
|
201
|
+
container.configure do
|
202
|
+
set :logger do |s|
|
203
|
+
s.instance Logger.new(STDOUT)
|
204
|
+
end
|
205
|
+
|
206
|
+
set :worker do |s|
|
207
|
+
s.instance Worker.new
|
208
|
+
s.dependency :logger
|
209
|
+
end
|
210
|
+
end
|
211
|
+
```
|
212
|
+
|
213
|
+
Add the following snippet into `spec_helper.rb`
|
214
|
+
|
215
|
+
```ruby
|
216
|
+
config.before :example do
|
217
|
+
container.clear_mocks
|
218
|
+
end
|
219
|
+
```
|
220
|
+
|
221
|
+
An example of how to use `#mock`
|
222
|
+
|
223
|
+
```ruby
|
224
|
+
describe Worker do
|
225
|
+
let(:test_logger) { double(:test_logger) }
|
226
|
+
|
227
|
+
subject { container[:worker].logger }
|
228
|
+
|
229
|
+
before do
|
230
|
+
container.mock(:logger, test_logger)
|
231
|
+
end
|
232
|
+
|
233
|
+
it { is_expected.to eq test_logger }
|
234
|
+
end
|
235
|
+
```
|
236
|
+
|
192
237
|
## Development
|
193
238
|
|
194
239
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/dumpling.rb
CHANGED
data/lib/dumpling/registry.rb
CHANGED
@@ -0,0 +1,26 @@
|
|
1
|
+
module Dumpling
|
2
|
+
class TestContainer < Container
|
3
|
+
def initialize
|
4
|
+
super
|
5
|
+
@original_services = Registry.new
|
6
|
+
init_test_registry
|
7
|
+
end
|
8
|
+
|
9
|
+
def mock(id, service)
|
10
|
+
spec = create_specification { |s| s.instance service }
|
11
|
+
@services.mock(id, spec)
|
12
|
+
service
|
13
|
+
end
|
14
|
+
|
15
|
+
def clear_mocks
|
16
|
+
init_test_registry
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def init_test_registry
|
23
|
+
@services = TestRegistry.new(@original_services)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Dumpling
|
2
|
+
class TestRegistry < Registry
|
3
|
+
def initialize(child_registry = Registry.new)
|
4
|
+
@child_registry = child_registry
|
5
|
+
@all_keys = child_registry.keys.dup
|
6
|
+
super()
|
7
|
+
end
|
8
|
+
|
9
|
+
def mock(id, value)
|
10
|
+
@keys << id
|
11
|
+
@all_keys << id
|
12
|
+
@data[id] = value
|
13
|
+
end
|
14
|
+
|
15
|
+
def set(id, value)
|
16
|
+
@all_keys << id
|
17
|
+
@child_registry.set(id, value)
|
18
|
+
end
|
19
|
+
|
20
|
+
def get(id)
|
21
|
+
has?(id, include_child: false) ? super : @child_registry.get(id)
|
22
|
+
end
|
23
|
+
|
24
|
+
def has?(id, include_child: true)
|
25
|
+
keys(include_child: include_child).include?(id)
|
26
|
+
end
|
27
|
+
|
28
|
+
def keys(include_child: true)
|
29
|
+
include_child ? @all_keys : @keys
|
30
|
+
end
|
31
|
+
|
32
|
+
def initialize_dup(original)
|
33
|
+
super.tap do
|
34
|
+
@child_registry = original.child_registry.dup
|
35
|
+
@all_keys = original.all_keys.dup
|
36
|
+
@keys = original.keys(include_child: false).dup
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
protected
|
41
|
+
|
42
|
+
attr_reader :child_registry, :all_keys
|
43
|
+
end
|
44
|
+
end
|
data/lib/dumpling/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dumpling
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anton Kuzmenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,6 +108,8 @@ files:
|
|
108
108
|
- lib/dumpling/registry.rb
|
109
109
|
- lib/dumpling/service_builder.rb
|
110
110
|
- lib/dumpling/service_specification.rb
|
111
|
+
- lib/dumpling/test_container.rb
|
112
|
+
- lib/dumpling/test_registry.rb
|
111
113
|
- lib/dumpling/version.rb
|
112
114
|
homepage: https://github.com/antonkuzmenko/dumpling
|
113
115
|
licenses:
|