dry-container 0.7.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +8 -5
- data/CHANGELOG.md +10 -2
- data/README.md +2 -2
- data/lib/dry/container/mixin.rb +23 -2
- data/lib/dry/container/version.rb +1 -1
- data/spec/spec_helper.rb +2 -0
- data/spec/support/shared_examples/container.rb +65 -4
- metadata +17 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 89386cb5792215d73c4b754921c1f5df7111f7d76a87f4fe7ad2777fd8c71abf
|
4
|
+
data.tar.gz: 24008af254d6531e665d49292f20c7ae7b483d67f97838b5c460df1d203f9987
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 89350f42cdabd64616241d100c760c385f53bc0a9ba3baf662b575b34beaed06ca33d4fce40f8497a72505b0fda28ee9cc9874dbed3ee91df02363517d0a8f13
|
7
|
+
data.tar.gz: af233252c5c04f68650c89ed65079028bc4a7a8636134c132379c60af13d1b2719fd77784931204864b3ce9e43b49bdc905034f84e59d90f7d885afc69638919
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -8,11 +8,14 @@ script:
|
|
8
8
|
after_success:
|
9
9
|
- '[ -d coverage ] && bundle exec codeclimate-test-reporter'
|
10
10
|
rvm:
|
11
|
-
- 2.
|
12
|
-
- 2.
|
13
|
-
- 2.
|
14
|
-
- 2.
|
15
|
-
-
|
11
|
+
- 2.4.6
|
12
|
+
- 2.5.5
|
13
|
+
- 2.6.3
|
14
|
+
- jruby-9.2.7.0
|
15
|
+
- truffleruby
|
16
|
+
matrix:
|
17
|
+
allow_failures:
|
18
|
+
- rvm: truffleruby
|
16
19
|
env:
|
17
20
|
global:
|
18
21
|
- JRUBY_OPTS='--dev -J-Xmx1024M'
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## v0.7.1 - 2019-06-07
|
2
|
+
|
3
|
+
## Fixed
|
4
|
+
|
5
|
+
* Added `Mixin#dup` and `Mixin#clone`, now copies don't share underlying containers (flash-gordon)
|
6
|
+
|
7
|
+
[Compare v0.7.0...0.7.1](https://github.com/dry-rb/dry-container/compare/v0.7.0...v0.7.1)
|
8
|
+
|
1
9
|
## v0.7.0 - 2019-02-05
|
2
10
|
|
3
11
|
## Changed
|
@@ -40,9 +48,9 @@
|
|
40
48
|
|
41
49
|
* Handling container items was generalized in [#34](https://github.com/dry-rb/dry-container/pull/34) ([GabrielMalakias](https://github.com/GabrielMalakias))
|
42
50
|
|
43
|
-
[Compare v0.6.0...
|
51
|
+
[Compare v0.6.0...0.7.0](https://github.com/dry-rb/dry-container/compare/v0.6.0...v0.7.0)
|
44
52
|
|
45
|
-
## v0.6.0 -
|
53
|
+
## v0.6.0 - 2016-12-09
|
46
54
|
|
47
55
|
## Added
|
48
56
|
|
data/README.md
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
[gitter]: https://gitter.im/dry-rb/chat
|
2
1
|
[gem]: https://rubygems.org/gems/dry-container
|
3
2
|
[travis]: https://travis-ci.org/dry-rb/dry-container
|
4
3
|
[maintainability]: https://codeclimate.com/github/dry-rb/dry-container/maintainability
|
5
4
|
[test_coverage]: https://codeclimate.com/github/dry-rb/dry-container/test_coverage
|
6
5
|
[inch]: http://inch-ci.org/github/dry-rb/dry-container
|
6
|
+
[chat]: https://dry-rb.zulipchat.com
|
7
7
|
|
8
|
-
# dry-container [![Join the
|
8
|
+
# dry-container [![Join the chat at https://dry-rb.zulipchat.com](https://img.shields.io/badge/dry--rb-join%20chat-%23346b7a.svg)][chat]
|
9
9
|
|
10
10
|
[![Gem Version](https://img.shields.io/gem/v/dry-container.svg)][gem]
|
11
11
|
[![Build Status](https://img.shields.io/travis/dry-rb/dry-container.svg)][travis]
|
data/lib/dry/container/mixin.rb
CHANGED
@@ -211,12 +211,17 @@ module Dry
|
|
211
211
|
end
|
212
212
|
|
213
213
|
decorator = with
|
214
|
+
memoize = original.is_a?(Item::Memoizable)
|
214
215
|
|
215
216
|
if decorator.is_a?(Class)
|
216
|
-
|
217
|
+
decorated = -> { decorator.new(original.call) }
|
218
|
+
elsif decorator.respond_to?(:call)
|
219
|
+
decorated = -> { decorator.call(original.call) }
|
217
220
|
else
|
218
|
-
|
221
|
+
raise Error, "Decorator needs to be a Class or responds to the `call` method"
|
219
222
|
end
|
223
|
+
|
224
|
+
register(key, memoize: memoize, &decorated)
|
220
225
|
end
|
221
226
|
|
222
227
|
# Evaluate block and register items in namespace
|
@@ -265,6 +270,22 @@ module Dry
|
|
265
270
|
def _container
|
266
271
|
@_container
|
267
272
|
end
|
273
|
+
|
274
|
+
# @api public
|
275
|
+
def dup
|
276
|
+
copy = super
|
277
|
+
copy.instance_variable_set(:@_container, _container.dup)
|
278
|
+
copy
|
279
|
+
end
|
280
|
+
|
281
|
+
# @api public
|
282
|
+
def clone
|
283
|
+
copy = super
|
284
|
+
unless copy.frozen?
|
285
|
+
copy.instance_variable_set(:@_container, _container.dup)
|
286
|
+
end
|
287
|
+
copy
|
288
|
+
end
|
268
289
|
end
|
269
290
|
end
|
270
291
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -387,16 +387,41 @@ RSpec.shared_examples 'a container' do
|
|
387
387
|
require 'delegate'
|
388
388
|
|
389
389
|
let(:key) { :key }
|
390
|
+
let(:decorated_class_spy) { spy(:decorated_class_spy) }
|
391
|
+
let(:decorated_class) { Class.new }
|
390
392
|
|
391
393
|
context 'for callable item' do
|
392
394
|
before do
|
393
|
-
|
395
|
+
allow(decorated_class_spy).to receive(:new) { decorated_class.new }
|
396
|
+
container.register(key, memoize: memoize) { decorated_class_spy.new }
|
394
397
|
container.decorate(key, with: SimpleDelegator)
|
395
398
|
end
|
396
399
|
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
+
context 'memoize false' do
|
401
|
+
let(:memoize) { false }
|
402
|
+
|
403
|
+
it 'does not call the block until the key is resolved' do
|
404
|
+
expect(decorated_class_spy).not_to have_received(:new)
|
405
|
+
container.resolve(key)
|
406
|
+
expect(decorated_class_spy).to have_received(:new)
|
407
|
+
end
|
408
|
+
|
409
|
+
specify do
|
410
|
+
expect(container[key]).to be_instance_of(SimpleDelegator)
|
411
|
+
expect(container[key].__getobj__).to be_instance_of(decorated_class)
|
412
|
+
expect(container[key]).not_to be(container[key])
|
413
|
+
expect(container[key].__getobj__).not_to be(container[key].__getobj__)
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
417
|
+
context 'memoize true' do
|
418
|
+
let(:memoize) { true }
|
419
|
+
|
420
|
+
specify do
|
421
|
+
expect(container[key]).to be_instance_of(SimpleDelegator)
|
422
|
+
expect(container[key].__getobj__).to be_instance_of(decorated_class)
|
423
|
+
expect(container[key]).to be(container[key])
|
424
|
+
end
|
400
425
|
end
|
401
426
|
end
|
402
427
|
|
@@ -411,6 +436,23 @@ RSpec.shared_examples 'a container' do
|
|
411
436
|
expect(container.resolve(key).__getobj__.call).to eql("value")
|
412
437
|
end
|
413
438
|
end
|
439
|
+
|
440
|
+
context 'with an instance as a decorator' do
|
441
|
+
let(:decorator) do
|
442
|
+
double.tap do |decorator|
|
443
|
+
allow(decorator).to receive(:call) { |input| "decorated #{input}" }
|
444
|
+
end
|
445
|
+
end
|
446
|
+
|
447
|
+
before do
|
448
|
+
container.register(key) { "value" }
|
449
|
+
container.decorate(key, with: decorator)
|
450
|
+
end
|
451
|
+
|
452
|
+
it 'expected to pass original value to decorator#call method' do
|
453
|
+
expect(container.resolve(key)).to eq("decorated value")
|
454
|
+
end
|
455
|
+
end
|
414
456
|
end
|
415
457
|
|
416
458
|
describe 'namespace' do
|
@@ -574,4 +616,23 @@ RSpec.shared_examples 'a container' do
|
|
574
616
|
expect(container.freeze).to be(container)
|
575
617
|
end
|
576
618
|
end
|
619
|
+
|
620
|
+
describe '.dup' do
|
621
|
+
it "returns a copy that doesn't share registered keys with the parent" do
|
622
|
+
container.dup.register(:foo, 'bar')
|
623
|
+
expect(container.key?(:foo)).to be false
|
624
|
+
end
|
625
|
+
end
|
626
|
+
|
627
|
+
describe '.clone' do
|
628
|
+
it "returns a copy that doesn't share registered keys with the parent" do
|
629
|
+
container.clone.register(:foo, 'bar')
|
630
|
+
expect(container.key?(:foo)).to be false
|
631
|
+
end
|
632
|
+
|
633
|
+
it 're-uses frozen container' do
|
634
|
+
expect(container.freeze.clone).to be_frozen
|
635
|
+
expect(container.clone._container).to be(container._container)
|
636
|
+
end
|
637
|
+
end
|
577
638
|
end
|
metadata
CHANGED
@@ -1,30 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-container
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Holland
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
+
name: concurrent-ruby
|
14
15
|
requirement: !ruby/object:Gem::Requirement
|
15
16
|
requirements:
|
16
17
|
- - "~>"
|
17
18
|
- !ruby/object:Gem::Version
|
18
19
|
version: '1.0'
|
19
|
-
name: concurrent-ruby
|
20
|
-
prerelease: false
|
21
20
|
type: :runtime
|
21
|
+
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
+
name: dry-configurable
|
28
29
|
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
31
|
- - "~>"
|
@@ -33,9 +34,8 @@ dependencies:
|
|
33
34
|
- - ">="
|
34
35
|
- !ruby/object:Gem::Version
|
35
36
|
version: 0.1.3
|
36
|
-
name: dry-configurable
|
37
|
-
prerelease: false
|
38
37
|
type: :runtime
|
38
|
+
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
41
|
- - "~>"
|
@@ -45,48 +45,48 @@ dependencies:
|
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 0.1.3
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
|
+
name: bundler
|
48
49
|
requirement: !ruby/object:Gem::Requirement
|
49
50
|
requirements:
|
50
51
|
- - ">="
|
51
52
|
- !ruby/object:Gem::Version
|
52
53
|
version: '0'
|
53
|
-
name: bundler
|
54
|
-
prerelease: false
|
55
54
|
type: :development
|
55
|
+
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - ">="
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '0'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
|
+
name: rake
|
62
63
|
requirement: !ruby/object:Gem::Requirement
|
63
64
|
requirements:
|
64
65
|
- - ">="
|
65
66
|
- !ruby/object:Gem::Version
|
66
67
|
version: '0'
|
67
|
-
name: rake
|
68
|
-
prerelease: false
|
69
68
|
type: :development
|
69
|
+
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - ">="
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '0'
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
|
+
name: rspec
|
76
77
|
requirement: !ruby/object:Gem::Requirement
|
77
78
|
requirements:
|
78
79
|
- - ">="
|
79
80
|
- !ruby/object:Gem::Version
|
80
81
|
version: '0'
|
81
|
-
name: rspec
|
82
|
-
prerelease: false
|
83
82
|
type: :development
|
83
|
+
prerelease: false
|
84
84
|
version_requirements: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
86
|
- - ">="
|
87
87
|
- !ruby/object:Gem::Version
|
88
88
|
version: '0'
|
89
|
-
description:
|
89
|
+
description:
|
90
90
|
email:
|
91
91
|
- andyholland1991@aol.com
|
92
92
|
executables: []
|
@@ -129,7 +129,7 @@ homepage: https://github.com/dry-rb/dry-container
|
|
129
129
|
licenses:
|
130
130
|
- MIT
|
131
131
|
metadata: {}
|
132
|
-
post_install_message:
|
132
|
+
post_install_message:
|
133
133
|
rdoc_options: []
|
134
134
|
require_paths:
|
135
135
|
- lib
|
@@ -144,9 +144,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '0'
|
146
146
|
requirements: []
|
147
|
-
|
148
|
-
|
149
|
-
signing_key:
|
147
|
+
rubygems_version: 3.0.3
|
148
|
+
signing_key:
|
150
149
|
specification_version: 4
|
151
150
|
summary: A simple container intended for use as an IoC container
|
152
151
|
test_files:
|