conject 0.1.5 → 0.1.6
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.
- data/CHANGELOG +3 -0
- data/lib/conject/object_context.rb +2 -0
- data/lib/conject/object_ext_object_context.rb +4 -0
- data/lib/conject/version.rb +1 -1
- data/spec/acceptance/regression/contextual_name_spec.rb +73 -0
- data/spec/acceptance/regression/inject_object_context_spec.rb +2 -0
- data/spec/acceptance/{dev → regression}/is_spec.rb +0 -0
- metadata +8 -6
data/CHANGELOG
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
Conject v0.1.6
|
2
|
+
* Object#contextual_name provides the string name of an object as it is keyed in its context
|
3
|
+
|
1
4
|
Conject v0.1.5
|
2
5
|
* Using __send__ instead of send. This avoids collisions with actual methods on target objects named "send"
|
3
6
|
* Added a more descriptive error handler when a constructor call fails in ObjectFactory
|
@@ -12,6 +12,7 @@ module Conject
|
|
12
12
|
def put(name, object)
|
13
13
|
raise "This ObjectContext already has an instance or configuration for '#{name.to_s}'" if directly_has?(name)
|
14
14
|
Conject.install_object_context(object, self)
|
15
|
+
object.instance_variable_set(:@_conject_contextual_name, name.to_s)
|
15
16
|
@cache[name.to_sym] = object
|
16
17
|
end
|
17
18
|
|
@@ -29,6 +30,7 @@ module Conject
|
|
29
30
|
return parent_context.get(name)
|
30
31
|
else
|
31
32
|
object = object_factory.construct_new(name,self)
|
33
|
+
object.instance_variable_set(:@_conject_contextual_name, name.to_s)
|
32
34
|
@cache[name] = object unless no_cache?(name)
|
33
35
|
return object
|
34
36
|
end
|
data/lib/conject/version.rb
CHANGED
@@ -0,0 +1,73 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
|
2
|
+
|
3
|
+
describe "Object#contextual_name" do
|
4
|
+
|
5
|
+
subject { new_object_context }
|
6
|
+
|
7
|
+
before do
|
8
|
+
append_test_load_path "basic_composition"
|
9
|
+
require 'fence'
|
10
|
+
require 'wood'
|
11
|
+
require 'nails'
|
12
|
+
|
13
|
+
append_test_load_path "namespace"
|
14
|
+
require 'chart/model'
|
15
|
+
require 'chart/presenter'
|
16
|
+
require 'chart/view'
|
17
|
+
end
|
18
|
+
|
19
|
+
after do
|
20
|
+
restore_load_path
|
21
|
+
42.instance_variable_set(:@_conject_object_context, nil)
|
22
|
+
42.instance_variable_set(:@_conject_contextual_name, nil)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "reveals the name of an object as it appears in the context" do
|
26
|
+
fence = subject["fence"]
|
27
|
+
fence.contextual_name.should == "fence"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "includes the full module scope of the object in its contextual name" do
|
31
|
+
presenter = subject["chart/presenter"]
|
32
|
+
presenter.contextual_name.should == "chart/presenter"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "works correctly for objects that have been defined via aliases" do
|
36
|
+
subject.configure_objects :wooden_thing => { :is => :fence }
|
37
|
+
subject[:wooden_thing].contextual_name.should == "wooden_thing"
|
38
|
+
subject[:fence].contextual_name.should == "wooden_thing"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "works correctly for objects that have been defined via custom constructor lambdas" do
|
42
|
+
subject.configure_objects :the_answer => { :construct => lambda do 42 end }
|
43
|
+
subject[:the_answer].contextual_name.should == "the_answer"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "works for non-cached objects" do
|
47
|
+
subject.configure_objects :fence => { :cache => false }
|
48
|
+
fence1 = subject[:fence]
|
49
|
+
fence2 = subject[:fence]
|
50
|
+
fence1.object_id.should_not == fence2.object_id
|
51
|
+
fence1.contextual_name.should == "fence"
|
52
|
+
fence2.contextual_name.should == "fence"
|
53
|
+
end
|
54
|
+
|
55
|
+
it "works even for objects that were injected into a context after being constructed" do
|
56
|
+
subject[:the_answer] = 42
|
57
|
+
42.contextual_name.should == "the_answer"
|
58
|
+
end
|
59
|
+
|
60
|
+
it "prefers the most recently used name, if re-added to a context multiple times with different names" do
|
61
|
+
subject[:a_number] = 42
|
62
|
+
42.contextual_name.should == "a_number"
|
63
|
+
subject[:the_answer] = 42
|
64
|
+
42.contextual_name.should == "the_answer"
|
65
|
+
end
|
66
|
+
|
67
|
+
it "returns nil for objects that have never been added to a context" do
|
68
|
+
42.contextual_name.should be_nil
|
69
|
+
Wood.contextual_name.should be_nil
|
70
|
+
Wood.new.contextual_name.should be_nil
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: conject
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -119,15 +119,16 @@ files:
|
|
119
119
|
- scratch/sample.rb
|
120
120
|
- scratch/special_construct.rb
|
121
121
|
- spec/acceptance/dev/README
|
122
|
-
- spec/acceptance/dev/is_spec.rb
|
123
122
|
- spec/acceptance/dev/provide_with_objects_spec.rb
|
124
123
|
- spec/acceptance/regression/README
|
125
124
|
- spec/acceptance/regression/basic_composition_spec.rb
|
126
125
|
- spec/acceptance/regression/basic_object_creation_spec.rb
|
126
|
+
- spec/acceptance/regression/contextual_name_spec.rb
|
127
127
|
- spec/acceptance/regression/custom_constructor_spec.rb
|
128
128
|
- spec/acceptance/regression/default_object_context_spec.rb
|
129
129
|
- spec/acceptance/regression/inherited_dependencies_spec.rb
|
130
130
|
- spec/acceptance/regression/inject_object_context_spec.rb
|
131
|
+
- spec/acceptance/regression/is_spec.rb
|
131
132
|
- spec/acceptance/regression/module_scoping_spec.rb
|
132
133
|
- spec/acceptance/regression/nested_contexts_spec.rb
|
133
134
|
- spec/acceptance/regression/non_singleton_spec.rb
|
@@ -199,7 +200,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
199
200
|
version: '0'
|
200
201
|
segments:
|
201
202
|
- 0
|
202
|
-
hash: -
|
203
|
+
hash: -2147591316143027162
|
203
204
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
204
205
|
none: false
|
205
206
|
requirements:
|
@@ -208,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
208
209
|
version: '0'
|
209
210
|
segments:
|
210
211
|
- 0
|
211
|
-
hash: -
|
212
|
+
hash: -2147591316143027162
|
212
213
|
requirements: []
|
213
214
|
rubyforge_project:
|
214
215
|
rubygems_version: 1.8.24
|
@@ -217,15 +218,16 @@ specification_version: 3
|
|
217
218
|
summary: Enable Guice-like dependency injection and contextual object interactions.
|
218
219
|
test_files:
|
219
220
|
- spec/acceptance/dev/README
|
220
|
-
- spec/acceptance/dev/is_spec.rb
|
221
221
|
- spec/acceptance/dev/provide_with_objects_spec.rb
|
222
222
|
- spec/acceptance/regression/README
|
223
223
|
- spec/acceptance/regression/basic_composition_spec.rb
|
224
224
|
- spec/acceptance/regression/basic_object_creation_spec.rb
|
225
|
+
- spec/acceptance/regression/contextual_name_spec.rb
|
225
226
|
- spec/acceptance/regression/custom_constructor_spec.rb
|
226
227
|
- spec/acceptance/regression/default_object_context_spec.rb
|
227
228
|
- spec/acceptance/regression/inherited_dependencies_spec.rb
|
228
229
|
- spec/acceptance/regression/inject_object_context_spec.rb
|
230
|
+
- spec/acceptance/regression/is_spec.rb
|
229
231
|
- spec/acceptance/regression/module_scoping_spec.rb
|
230
232
|
- spec/acceptance/regression/nested_contexts_spec.rb
|
231
233
|
- spec/acceptance/regression/non_singleton_spec.rb
|