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