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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f385ef8e4373fe02d5a641294ad7cbc0393843db
4
- data.tar.gz: e800048ab2616729db0086867caf77ea32ab5be3
3
+ metadata.gz: e0348b9022e9d1fac207f2198cf5ab4f1d1edce7
4
+ data.tar.gz: c645b20102b98c8cff8e6ceccda5181675dab954
5
5
  SHA512:
6
- metadata.gz: b5a86fc3c310dd05bb3c9c4f498126f7b43b293d8296c6a288128923e530ea32a57dc765a8e89ec973f2486af64201f95e755cd196f5cdcc1534ac4e1d1dfc5b
7
- data.tar.gz: cea6309abeae32d6d34f133c652071de233b7a1db0ba7270cb36355df96acbf6bde7e1f0d70b14ae650eeefb2c4d609ed45ed4144da01ef50fcdff4cacb3153e
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
@@ -11,6 +11,8 @@ module Dumpling
11
11
  require 'dumpling/dependencies_validator'
12
12
  require 'dumpling/registry'
13
13
  require 'dumpling/container'
14
+ require 'dumpling/test_registry'
15
+ require 'dumpling/test_container'
14
16
 
15
17
  @container = Container.new
16
18
 
@@ -8,10 +8,8 @@ module Dumpling
8
8
  end
9
9
 
10
10
  def set(id, value)
11
- @data[id] = value
12
11
  @keys << id
13
-
14
- value
12
+ @data[id] = value
15
13
  end
16
14
 
17
15
  def get(id)
@@ -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
@@ -1,8 +1,8 @@
1
1
  module Dumpling
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 3
5
- TINY = 2
4
+ MINOR = 4
5
+ TINY = 0
6
6
  PRE = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.').freeze
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.3.2
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-13 00:00:00.000000000 Z
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: