dumpling 0.3.2 → 0.4.0

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
  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: