conject 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -2,4 +2,8 @@ class Object
2
2
  def object_context
3
3
  @_conject_object_context || Thread.current[:_overriding_conject_object_context] || Conject.default_object_context
4
4
  end
5
+
6
+ def contextual_name
7
+ @_conject_contextual_name
8
+ end
5
9
  end
@@ -1,3 +1,3 @@
1
1
  module Conject
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
@@ -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
+
@@ -13,6 +13,8 @@ describe "object_context:" do
13
13
 
14
14
  after do
15
15
  restore_load_path
16
+ 42.instance_variable_set(:@_conject_object_context, nil)
17
+ 42.instance_variable_set(:@_conject_contextual_name, nil)
16
18
  end
17
19
 
18
20
  describe "NEW AND IMPROVED" do
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.5
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-21 00:00:00.000000000 Z
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: -2394895087523991076
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: -2394895087523991076
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