ioc 1.0.0 → 2.1.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: 870b95c905301c1b57ce0709dace5b4d1974ce57
4
- data.tar.gz: 7c9f78022bdf6a1c3fa9cdd3773d2052a0c88a76
3
+ metadata.gz: 16e4bbc94810cfff1a0cce335a242993c9993767
4
+ data.tar.gz: 0c9e66471ee6b827adccbdcf927bfc042ea13cab
5
5
  SHA512:
6
- metadata.gz: 29d65414dc5bfd8a28b67d6302151f1cedb1f15db580daf9fc5bdd2fb034dfe6807e118418286f646619959cd08272bdf79c879c06ad5c51a143d91424f86f4b
7
- data.tar.gz: 32494aecb6e48f566b7cae7867ca137e682796af7bd5e1d9f4ea6a229c118c9295a3f5318baf91800f08e20c3bfcbb1dbcb7c243c184f6282c2b7d01ff5152ed
6
+ metadata.gz: 7d8691f028e9efbf5d19eaa37189c10f40a57af2eb2eda2ae8e5d814212bd9ce4d6f1d5991b21e10bf6b8db477da1a266f70cab9b2f4bfa202b8409807392295
7
+ data.tar.gz: 489021e8551b4d98f2705f377780c5f30949384a88f8409a9e71c53937b26ea7ea30e03cd17ed3ee94d25a5af7ba29471bdeea2ff719657483daca7d397dbf31
data/lib/ioc.rb CHANGED
@@ -6,6 +6,5 @@ require 'ioc/exceptions'
6
6
  require 'ioc/resolvers/abstract_resolver'
7
7
  require 'ioc/resolvers/instance_resolver'
8
8
  require 'ioc/resolvers/class_resolver'
9
- require 'ioc/resolvers/factory_resolver'
10
9
  require 'ioc/resolver_factory'
11
10
  require 'ioc/container'
@@ -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(name, object, self, options)
17
+ @resolvers[name] = ResolverFactory.new_instance(object, self, options)
18
18
  end
19
19
 
20
20
  def resolve(name)
21
- resolver(name).resolve(@cache)
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 [](key)
25
- resolve(key)
25
+ def resolve_anonymous(klass)
26
+ ClassResolver.new(klass, self).resolve
26
27
  end
27
28
 
28
- def resolver(name)
29
- @resolvers[name] || raise(UnknownService, "Service '#{name}' has not been registered")
29
+ def [](key)
30
+ resolve(key)
30
31
  end
31
32
  end
32
33
  end
@@ -1,8 +1,8 @@
1
1
  module IOC
2
2
  class ResolverFactory
3
- def self.new_instance(name, object, container, options={})
3
+ def self.new_instance(object, container, options={})
4
4
  type = options.fetch(:as, :class)
5
- IOC.const_get("#{type.capitalize}Resolver").new(name, object, container)
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(name, object, container)
4
- @name = name
3
+ def initialize(object, container)
5
4
  @object = object
6
5
  @container = container
7
6
  end
8
7
 
9
- def resolve(cache)
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(cache)
4
- cache[@name] ||= instance
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 '#{@name}' missing initialize method ")
20
+ raise(ResolverError, "Service '#{klass}' missing initialize method ")
21
21
  end
22
22
 
23
23
  def resolved_dependencies
@@ -1,7 +1,7 @@
1
1
  module IOC
2
2
  class InstanceResolver < AbstractResolver
3
- def resolve(cache)
4
- cache[@name] ||= instance
3
+ def resolve
4
+ instance
5
5
  end
6
6
 
7
7
  private
@@ -1,3 +1,3 @@
1
1
  module IOC
2
- VERSION = "1.0.0"
2
+ VERSION = "2.1.0"
3
3
  end
@@ -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.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-12 00:00:00.000000000 Z
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
@@ -1,7 +0,0 @@
1
- module IOC
2
- class FactoryResolver < ClassResolver
3
- def resolve(cache)
4
- instance
5
- end
6
- end
7
- end