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