dry-container 0.7.0 → 0.7.1
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/.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 [][chat]
|
9
9
|
|
10
10
|
[][gem]
|
11
11
|
[][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:
|