ioc 1.0.0 → 2.1.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/lib/ioc.rb +0 -1
- data/lib/ioc/container.rb +7 -6
- data/lib/ioc/resolver_factory.rb +2 -2
- data/lib/ioc/resolvers/abstract_resolver.rb +2 -3
- data/lib/ioc/resolvers/class_resolver.rb +3 -3
- data/lib/ioc/resolvers/instance_resolver.rb +2 -2
- data/lib/ioc/version.rb +1 -1
- data/spec/ioc_spec.rb +16 -65
- metadata +2 -3
- data/lib/ioc/resolvers/factory_resolver.rb +0 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 16e4bbc94810cfff1a0cce335a242993c9993767
|
|
4
|
+
data.tar.gz: 0c9e66471ee6b827adccbdcf927bfc042ea13cab
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7d8691f028e9efbf5d19eaa37189c10f40a57af2eb2eda2ae8e5d814212bd9ce4d6f1d5991b21e10bf6b8db477da1a266f70cab9b2f4bfa202b8409807392295
|
|
7
|
+
data.tar.gz: 489021e8551b4d98f2705f377780c5f30949384a88f8409a9e71c53937b26ea7ea30e03cd17ed3ee94d25a5af7ba29471bdeea2ff719657483daca7d397dbf31
|
data/lib/ioc.rb
CHANGED
data/lib/ioc/container.rb
CHANGED
|
@@ -14,19 +14,20 @@ module IOC
|
|
|
14
14
|
|
|
15
15
|
def register(name, object, options={})
|
|
16
16
|
raise(DuplicateRegistration, "Service '#{name}' has already been registered") if @resolvers.key?(name)
|
|
17
|
-
@resolvers[name] = ResolverFactory.new_instance(
|
|
17
|
+
@resolvers[name] = ResolverFactory.new_instance(object, self, options)
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def resolve(name)
|
|
21
|
-
|
|
21
|
+
raise(UnknownService, "Service '#{name}' has not been registered") unless @resolvers.key?(name)
|
|
22
|
+
@cache[name] ||= @resolvers[name].resolve
|
|
22
23
|
end
|
|
23
24
|
|
|
24
|
-
def
|
|
25
|
-
|
|
25
|
+
def resolve_anonymous(klass)
|
|
26
|
+
ClassResolver.new(klass, self).resolve
|
|
26
27
|
end
|
|
27
28
|
|
|
28
|
-
def
|
|
29
|
-
|
|
29
|
+
def [](key)
|
|
30
|
+
resolve(key)
|
|
30
31
|
end
|
|
31
32
|
end
|
|
32
33
|
end
|
data/lib/ioc/resolver_factory.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
module IOC
|
|
2
2
|
class ResolverFactory
|
|
3
|
-
def self.new_instance(
|
|
3
|
+
def self.new_instance(object, container, options={})
|
|
4
4
|
type = options.fetch(:as, :class)
|
|
5
|
-
IOC.const_get("#{type.capitalize}Resolver").new(
|
|
5
|
+
IOC.const_get("#{type.capitalize}Resolver").new(object, container)
|
|
6
6
|
end
|
|
7
7
|
end
|
|
8
8
|
end
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
module IOC
|
|
2
2
|
class AbstractResolver
|
|
3
|
-
def initialize(
|
|
4
|
-
@name = name
|
|
3
|
+
def initialize(object, container)
|
|
5
4
|
@object = object
|
|
6
5
|
@container = container
|
|
7
6
|
end
|
|
8
7
|
|
|
9
|
-
def resolve
|
|
8
|
+
def resolve
|
|
10
9
|
raise(NotImplementedError)
|
|
11
10
|
end
|
|
12
11
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module IOC
|
|
2
2
|
class ClassResolver < AbstractResolver
|
|
3
|
-
def resolve
|
|
4
|
-
|
|
3
|
+
def resolve
|
|
4
|
+
instance
|
|
5
5
|
end
|
|
6
6
|
|
|
7
7
|
private
|
|
@@ -17,7 +17,7 @@ module IOC
|
|
|
17
17
|
def dependencies
|
|
18
18
|
klass.instance_method(:initialize).parameters.map(&:last)
|
|
19
19
|
rescue NoMethodError => e
|
|
20
|
-
raise(ResolverError, "Service '#{
|
|
20
|
+
raise(ResolverError, "Service '#{klass}' missing initialize method ")
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def resolved_dependencies
|
data/lib/ioc/version.rb
CHANGED
data/spec/ioc_spec.rb
CHANGED
|
@@ -76,71 +76,6 @@ describe IOC::Container do
|
|
|
76
76
|
end
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
-
context 'when service is registered as a factory' do
|
|
80
|
-
context 'when class has no dependencies' do
|
|
81
|
-
it 'resolves to instance' do
|
|
82
|
-
container = new_container
|
|
83
|
-
myclass = new_class
|
|
84
|
-
container.register(:myclass, myclass, :as => :factory)
|
|
85
|
-
container.resolve(:myclass).must_be_instance_of(myclass)
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
it 'does not cache resolved instance' do
|
|
89
|
-
container = new_container
|
|
90
|
-
myclass = new_class
|
|
91
|
-
container.register(:myclass, myclass, :as => :factory)
|
|
92
|
-
inst = container.resolve(:myclass)
|
|
93
|
-
container.resolve(:myclass).wont_equal(inst)
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
context 'when class has dependencies' do
|
|
98
|
-
it 'resolves to instance' do
|
|
99
|
-
container = new_container
|
|
100
|
-
engine_class = new_class
|
|
101
|
-
car_class = new_class_with_dependency
|
|
102
|
-
container.register(:engine, engine_class)
|
|
103
|
-
container.register(:car, car_class, :as => :factory)
|
|
104
|
-
|
|
105
|
-
container.resolve(:car).must_be_instance_of(car_class)
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
it 'does not cache resolved instance' do
|
|
109
|
-
container = new_container
|
|
110
|
-
engine_class = new_class
|
|
111
|
-
car_class = new_class_with_dependency
|
|
112
|
-
container.register(:engine, engine_class)
|
|
113
|
-
container.register(:car, car_class, :as => :factory)
|
|
114
|
-
|
|
115
|
-
car = container.resolve(:car)
|
|
116
|
-
container.resolve(:car).wont_equal(car)
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
it 'injects dependencies into instance' do
|
|
120
|
-
container = new_container
|
|
121
|
-
engine_class = new_class
|
|
122
|
-
car_class = new_class_with_dependency
|
|
123
|
-
container.register(:engine, engine_class)
|
|
124
|
-
container.register(:car, car_class, :as => :factory)
|
|
125
|
-
|
|
126
|
-
car = container.resolve(:car)
|
|
127
|
-
car.engine.must_be_instance_of(engine_class)
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
it 'caches dependencies' do
|
|
131
|
-
container = new_container
|
|
132
|
-
engine_class = new_class
|
|
133
|
-
car_class = new_class_with_dependency
|
|
134
|
-
container.register(:engine, engine_class)
|
|
135
|
-
container.register(:car, car_class, :as => :factory)
|
|
136
|
-
|
|
137
|
-
car = container.resolve(:car)
|
|
138
|
-
engine = car.engine
|
|
139
|
-
container.resolve(:engine).must_equal(engine)
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
end
|
|
143
|
-
|
|
144
79
|
context 'when service not found' do
|
|
145
80
|
it 'raises error' do
|
|
146
81
|
container = new_container
|
|
@@ -183,6 +118,22 @@ describe IOC::Container do
|
|
|
183
118
|
container[:myclass].must_be_instance_of(myclass)
|
|
184
119
|
end
|
|
185
120
|
|
|
121
|
+
it 'can resolve anonymous class' do
|
|
122
|
+
container = new_container
|
|
123
|
+
myobj = stub
|
|
124
|
+
anon_class = Class.new do
|
|
125
|
+
attr_reader :myobj
|
|
126
|
+
def initialize(myobj)
|
|
127
|
+
@myobj = myobj
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
container.register(:myobj, myobj, :as => :instance)
|
|
132
|
+
inst = container.resolve_anonymous(anon_class)
|
|
133
|
+
inst.must_be_instance_of(anon_class)
|
|
134
|
+
inst.myobj.must_equal(myobj)
|
|
135
|
+
end
|
|
136
|
+
|
|
186
137
|
def new_container(*args)
|
|
187
138
|
IOC::Container.new(*args)
|
|
188
139
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ioc
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0
|
|
4
|
+
version: 2.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Erik Lott
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2014-02-
|
|
11
|
+
date: 2014-02-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -72,7 +72,6 @@ files:
|
|
|
72
72
|
- lib/ioc/resolver_factory.rb
|
|
73
73
|
- lib/ioc/resolvers/abstract_resolver.rb
|
|
74
74
|
- lib/ioc/resolvers/class_resolver.rb
|
|
75
|
-
- lib/ioc/resolvers/factory_resolver.rb
|
|
76
75
|
- lib/ioc/resolvers/instance_resolver.rb
|
|
77
76
|
- lib/ioc/version.rb
|
|
78
77
|
- spec/ioc_spec.rb
|