conject 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -4,3 +4,4 @@ tags
4
4
  *.swo
5
5
  pkg
6
6
  /README.html
7
+ Gemfile.lock
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- conject (0.0.2)
4
+ conject (0.0.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -0,0 +1,57 @@
1
+
2
+ class Mammal
3
+ construct_with :fur
4
+ end
5
+
6
+ class Cat < Mammal
7
+ end
8
+
9
+
10
+ Things Cat will inherit from Mammal:
11
+
12
+ .new
13
+ .actual_new
14
+
15
+ .object_definition
16
+
17
+ .object_context_prep (indirectly)
18
+
19
+ #initialize(component_map) (will be overridden)
20
+ #actual_initialize (will get stomped)
21
+
22
+ Calling Cat.new
23
+
24
+
25
+ Rationale: Why does Conject re-implement .new for classes that use construct_with ?
26
+
27
+ To get in front of normal object construction. I wanted to get instances built up
28
+ before the normal, user-defined #initialize gets called.
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+ 4 initialize cases for subclasses
37
+ subclass has defined its own #initialize and calls super
38
+ subclass has defined its own #initialize and DOES NOT CALL super
39
+ X
40
+ superclass defined its own #initialize and it has been wrapped by Conject to accept component map
41
+ superclass defined its own #initialize, but it HAS NOT BEEN WRAPPED YET
42
+ superclass DOES NOT DEFINE its own #initialize, and it has been wrapped by Conject
43
+ superclass DOES NOT DEFINE its own #initialize, but it HAS NOT BEEN WRAPPED YET
44
+
45
+ These circumstances affect when/if set_comonents gets called in the superclass
46
+
47
+
48
+ class A
49
+ construct_with :b
50
+ end
51
+
52
+ class Aa < A
53
+ construct_with :b, :c
54
+ end
55
+
56
+ - if A gets instantiated first, A#actual_initialize is created and A#initialize is rewritten
57
+ - Instantiating Aa invokes actual_initialize with the component_map which invokes Conjected A#initialize ... which invokes :actual_initialize which has been re-aliased by the subclass and NO LONGER REFERS TO THE ORIGINAL CONSTRUCTOR
@@ -4,93 +4,136 @@ class Class
4
4
  def construct_with(*syms)
5
5
  klass = self
6
6
 
7
+ #
8
+ # Create the .object_definition accessor for this class.
9
+ #
10
+ # The ObjectDefinition stores information # on the dependencies required to
11
+ # build new instances.
12
+ #
7
13
  object_def = Conject::ObjectDefinition.new(:owner => klass, :component_names => syms)
8
14
  klass.meta_def :object_definition do
9
- object_def
15
+ @object_definition
16
+ end
17
+
18
+ # TODO: actually, just use meta_eval here to set the ivar and move on.
19
+ klass.meta_def :set_object_definition do |od| #XXX
20
+ @object_definition = od
10
21
  end
22
+ klass.set_object_definition(object_def) # XXX
23
+ klass.meta_eval do private :set_object_definition end # XXX
11
24
 
12
25
 
26
+ #
27
+ # Define internal accessor methods for instances of klass
28
+ #
29
+
30
+ # The internal hash of dependencies, keyed by name:
13
31
  klass.class_def_private :components do
14
32
  @_components ||= {}
15
33
  end
34
+ # Have the components been set for this instance yet?
35
+ klass.class_def_private :components_set? do
36
+ !@_components.nil?
37
+ end
16
38
 
39
+ # Define an internal reader method per dependency:
17
40
  syms.each do |object_name|
18
41
  class_def_private object_name do
19
42
  components[object_name]
20
43
  end
21
44
  end
22
45
 
46
+ # Define the internal setter method that installs dependencies
47
+ # in an instance of klass.
48
+ # #set_components respects the rules set forth in the ObjectDefinition
49
+ # for this class, and will raise a detailed exception if the rules
50
+ # are violated.
23
51
  klass.class_def_private :set_components do |component_map|
24
- required = object_def.component_names
52
+ return if components_set? # do not repeat. In inheritance town, a superclass must currently rely on all
53
+ # of its deps to be declared and set by subclass functionality.
54
+
55
+ obj_def = self.class.object_definition
56
+ required = obj_def.component_names
25
57
  provided = component_map.keys
26
58
  if required.to_set != provided.to_set
59
+ # Explain the diff between what was required and what was actually provided:
27
60
  raise Conject::CompositionError.new(
28
- :object_definition => object_def,
61
+ :object_definition => obj_def,
29
62
  :required => required,
30
63
  :provided => provided)
31
64
  end
32
65
 
66
+ # set all the components
33
67
  components.clear.merge! component_map
34
-
35
68
  end
36
69
 
37
- # Tidbits of state that our dynamically-defined functions herein
38
- # will close over.
39
- object_context_prep = {
40
- :initialize_has_been_wrapped => false, # keep track of when a class's :initialize method has been wrapped
41
- }
42
-
43
- # Alias :new such that we can wrap and invoke it later
44
- klass.meta_eval do
45
- alias_method :actual_new, :new
70
+ # .object_context_prep is used internally by klass to maintain some state regarding
71
+ # its internal restructuring.
72
+ klass.meta_def :object_context_prep do
73
+ @object_context_prep ||= {
74
+ :initialize_has_been_wrapped => false
75
+ }
46
76
  end
77
+ klass.meta_eval do private :object_context_prep end
78
+
79
+ unless klass.methods.include?(:actual_new) # only do this once per family tree (subclasses will inherit the Conjected .new)
80
+ # Alias :new such that we can wrap and invoke it later
81
+ klass.meta_eval do
82
+ alias_method :actual_new, :new
83
+ end
47
84
 
48
- # Override default :new behavior for this class.
49
- #
50
- # The .new method is rewritten to accept a single argument:
51
- # component_map: a Hash containing all required objects to construct a new instance.
52
- # Keys are expected to be symbols.
53
- #
54
- # If user defines their own #initialize method, all components sent into .new
55
- # will be installed BEFORE the user-defined #initialize, and it may accept arguments thusly:
56
- # * zero args. Nothing will be passed to #initialize
57
- # * single arg. The component_map will be passed.
58
- # * var args (eg, def initialize(*args)). args[0] will be the component map. NO OTHER ARGS WILL BE PASSED. See Footnote a)
59
- #
60
- klass.meta_def :new do |component_map|
61
-
62
- # We only want to do the following one time, but we've waited until now
63
- # in order to make sure our metaprogramming didn't get ahead of the user's
64
- # own definition of initialize:
65
- unless object_context_prep[:initialize_has_been_wrapped]
66
- # Define a new wrapper'd version of initialize that accepts and uses a component map
67
- alias_method :actual_initialize, :initialize
68
- class_def :initialize do |component_map|
69
- # Apply the given components
70
- set_components component_map
71
-
72
- # Invoke the normal initialize method.
73
- # User-defined initialize method may accept 0 args, or it may accept a single arg
74
- # which will be the component map.
75
- arg_count = method(:actual_initialize).arity
76
- case arg_count
77
- when 0
78
- actual_initialize
79
- when 1, -1 # See Footnote a) at the bottom of this file
80
-
81
- actual_initialize component_map
82
-
83
- else
84
- # We're not equipped to handle this
85
- raise "User-defined initialize method defined with #{arg_count} parameters; must either be 0, other wise 1 or -1 (varargs) to receive the component map."
85
+ # Override default :new behavior for this class.
86
+ #
87
+ # The .new method is rewritten to accept a single argument:
88
+ # component_map: a Hash containing all required objects to construct a new instance.
89
+ # Keys are expected to be symbols.
90
+ #
91
+ # If user defines their own #initialize method, all components sent into .new
92
+ # will be installed BEFORE the user-defined #initialize, and it may accept arguments thusly:
93
+ # * zero args. Nothing will be passed to #initialize
94
+ # * single arg. The component_map will be passed.
95
+ # * var args (eg, def initialize(*args)). args[0] will be the component map. NO OTHER ARGS WILL BE PASSED. See Footnote a)
96
+ #
97
+ klass.meta_def :new do |component_map|
98
+
99
+ # We only want to do the following one time, but we've waited until now
100
+ # in order to make sure our metaprogramming didn't get ahead of the user's
101
+ # own definition of initialize:
102
+ unless object_context_prep[:initialize_has_been_wrapped]
103
+ # Define a new wrapper'd version of initialize that accepts and uses a component map
104
+ init_alias = "original_#{self.name}_initialize".to_sym
105
+ alias_method init_alias, :initialize
106
+ class_def :initialize do |component_map|
107
+ if self.class.has_object_definition?
108
+ # Apply the given components
109
+ set_components component_map
110
+ else
111
+ raise "#{self.class} has an ancestor that uses construct_with, but has not declared any component dependencies. Will not be able to instantiate!"
112
+ end
113
+
114
+ # Invoke the normal initialize method.
115
+ # User-defined initialize method may accept 0 args, or it may accept a single arg
116
+ # which will be the component map.
117
+ arg_count = method(init_alias).arity
118
+ case arg_count
119
+ when 0
120
+ self.send init_alias
121
+
122
+ when 1, -1 # See Footnote a) at the bottom of this file
123
+ self.send init_alias, component_map
124
+
125
+ else
126
+ # We're not equipped to handle this
127
+ raise "User-defined initialize method defined with #{arg_count} parameters; must either be 0, other wise 1 or -1 (varargs) to receive the component map."
128
+ end
86
129
  end
130
+ # Make a note that the initialize wrapper has been applied
131
+ object_context_prep[:initialize_has_been_wrapped] = true
87
132
  end
88
- # Make a note that the initialize wrapper has been applied
89
- object_context_prep[:initialize_has_been_wrapped] = true
90
- end
91
133
 
92
- # Instantiate an instance
93
- actual_new component_map
134
+ # Instantiate an instance
135
+ actual_new component_map
136
+ end
94
137
  end
95
138
  end
96
139
 
@@ -1,3 +1,3 @@
1
1
  module Conject
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -1,7 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
2
 
3
3
  describe "basic object composition" do
4
- subject { Conject.default_object_context }
4
+ subject { Conject.create_object_context(nil) }
5
5
 
6
6
  before do
7
7
  append_test_load_path "basic_composition"
@@ -2,7 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
2
 
3
3
 
4
4
  describe "simple object creation" do
5
- subject { Conject.default_object_context }
5
+ subject { Conject.create_object_context(nil) }
6
6
 
7
7
  before do
8
8
  append_test_load_path "simple_stuff"
@@ -0,0 +1,253 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe "basic inheritance" do
4
+ subject { new_object_context }
5
+
6
+ before do
7
+ append_test_load_path "inheritance"
8
+ require 'vehicle'
9
+ require 'wheel'
10
+ require 'body'
11
+ require 'car'
12
+ require 'malibu'
13
+ require 'emblem'
14
+ end
15
+
16
+ context "simple subclasses of a class that uses construct_with" do
17
+ it "gets built with its superclass's dependencies" do
18
+ # Check the base type object:
19
+ vehicle = subject[:vehicle]
20
+ vehicle.should be
21
+ vehicle.hit_body.should == "body!"
22
+ vehicle.hit_wheel.should == "wheel!"
23
+
24
+ # grab the subtype object:
25
+ car = subject[:car]
26
+ car.should be
27
+ car.hit_body.should == "body!"
28
+ car.hit_wheel.should == "wheel!"
29
+ end
30
+ end
31
+
32
+ context "class three levels deep in inheritance, adding a dep" do
33
+ it "works" do
34
+ malibu = subject[:malibu]
35
+ malibu.hit_body.should == "body!"
36
+ malibu.hit_wheel.should == "wheel!"
37
+ malibu.hit_emblem.should == "chevy!"
38
+ end
39
+ end
40
+
41
+ context "[initializers]" do
42
+ context "superclass has 0-arg #initialize" do
43
+ class Mammal
44
+ construct_with :fur
45
+ attr_reader :temp
46
+ def initialize
47
+ @temp = 98.6
48
+ end
49
+ end
50
+
51
+ class Fur; end
52
+ class Tree; end
53
+
54
+ it "invokes super #initialize" do
55
+ m = subject[:mammal]
56
+ m.temp.should == 98.6
57
+ end
58
+
59
+ context "subclass has default #initialize" do
60
+ class Cat < Mammal
61
+ construct_with :fur
62
+ end
63
+
64
+ it "invokes superclass #initialize" do
65
+ subject[:cat].temp.should == 98.6
66
+ end
67
+ end
68
+
69
+ context "subclass has 1-arg #initialize that invokes #super" do
70
+ class Ape < Mammal
71
+ construct_with :fur,:tree
72
+ attr_accessor :got_map
73
+ def initialize(map)
74
+ @got_map = map
75
+ super
76
+ end
77
+ end
78
+
79
+ let(:chauncy) { subject[:ape] }
80
+
81
+ it "invokes subclass custom #initialize with component map" do
82
+ fur = subject[:fur]
83
+ tree = subject[:tree]
84
+ chauncy.got_map.should == { fur: fur, tree: tree }
85
+ end
86
+
87
+ it "invokes superclass #initialize" do
88
+ chauncy.temp.should == 98.6
89
+ end
90
+ end
91
+
92
+ context "subclass has 0-arg #initialize that invokes #super" do
93
+ class Dog < Mammal
94
+ construct_with :fur
95
+ attr_accessor :legs
96
+ def initialize
97
+ @legs = 4
98
+ super :whoa_there # superclass has a Conjected #initialize which requires the component map arg, though it's not used. Ugh.
99
+ end
100
+ end
101
+
102
+ let(:indy) { subject[:dog] }
103
+
104
+ it "invokes subclass #initialize" do
105
+ indy.legs.should == 4
106
+ end
107
+
108
+ it "invokes superclass #initialize" do
109
+ indy.temp.should == 98.6
110
+ end
111
+ end
112
+
113
+ context "subclass has a no-arg #initialize that does NOT invoke #super" do
114
+ class Shrew < Mammal
115
+ construct_with :fur
116
+ def initialize
117
+ end
118
+ end
119
+
120
+ it "does not invoke superclass #initiailize" do
121
+ subject[:shrew].temp.should be_nil
122
+ end
123
+ end
124
+
125
+ context "subclass has a 1-arg #initialize that does NOT invoke #super" do
126
+ class Shrew < Mammal
127
+ construct_with :fur
128
+ def initialize(map)
129
+ end
130
+ end
131
+
132
+ it "does not invoke superclass #initiailize" do
133
+ subject[:shrew].temp.should be_nil
134
+ end
135
+ end
136
+ end
137
+
138
+
139
+
140
+
141
+
142
+
143
+ context "superclass has 1-arg #initialize" do
144
+ class Reptile
145
+ construct_with :scales
146
+ attr_reader :super_map
147
+ def initialize(map)
148
+ @super_map = map
149
+ end
150
+ end
151
+
152
+ class Scales; end
153
+ class Rock; end
154
+ class Shell; end
155
+
156
+ it "invokes super #initialize with component map" do
157
+ subject[:reptile].super_map.should == { scales: subject[:scales] }
158
+ end
159
+
160
+ context "subclass has default #initialize" do
161
+ class Snake < Reptile
162
+ construct_with :scales
163
+ end
164
+
165
+ it "invokes superclass #initialize" do
166
+ subject[:reptile].super_map.should == { scales: subject[:scales] }
167
+ end
168
+ end
169
+
170
+ context "subclass has 1-arg #initialize that invokes #super" do
171
+ class Lizard < Reptile
172
+ construct_with :scales,:rock
173
+ attr_accessor :got_map
174
+ def initialize(map)
175
+ @got_map = map
176
+ super
177
+ end
178
+ end
179
+
180
+ let(:harry) { subject[:lizard] }
181
+
182
+ it "invokes subclass custom #initialize with component map" do
183
+ scales = subject[:scales]
184
+ rock = subject[:rock]
185
+ harry.got_map.should == { scales: scales, rock: rock }
186
+ end
187
+
188
+ it "invokes superclass #initialize with component_map" do
189
+ scales = subject[:scales]
190
+ rock = subject[:rock]
191
+ harry.super_map.should == { scales: scales, rock: rock }
192
+ end
193
+ end
194
+
195
+ #
196
+ # This case--where a subclass has a user-defined #initialize, which does
197
+ # not accept an argument (will not be passed the component map at construct time)
198
+ # invokes super with some bs argument because we CANNOT SUPPLY super with its
199
+ # needs. User SHOULD accept the component_map as an argument to #initialize
200
+ # and let the map float to super class.
201
+ #
202
+ context "subclass has 0-arg #initialize that invokes #super" do
203
+ class Turtle < Reptile
204
+ construct_with :scales, :shell
205
+ attr_accessor :tail
206
+ def initialize
207
+ @tail = true
208
+ super :theres_ur_problem # stoopid
209
+ end
210
+ end
211
+
212
+ let(:franklin) { subject[:turtle] }
213
+
214
+ it "invokes subclass #initialize" do
215
+ franklin.tail.should == true
216
+ end
217
+
218
+ it "invokes superclass #initialize with... fuh..." do
219
+ franklin.super_map.should == :theres_ur_problem
220
+ end
221
+ end
222
+
223
+ context "subclass has a no-arg #initialize that does NOT invoke #super" do
224
+ class Aligator < Reptile
225
+ construct_with :scales
226
+ def initialize
227
+ end
228
+ end
229
+
230
+ it "does not invoke superclass #initiailize" do
231
+ subject[:aligator].super_map.should be_nil
232
+ end
233
+ end
234
+
235
+ context "subclass has a 1-arg #initialize that does NOT invoke #super" do
236
+ class Croc < Reptile
237
+ construct_with :scales
238
+ attr_reader :my_map
239
+ def initialize(map)
240
+ @my_map = map
241
+ end
242
+ end
243
+
244
+ it "does not invoke superclass #initiailize" do
245
+ subject[:croc].super_map.should be_nil
246
+ subject[:croc].my_map.should == { scales: subject[:scales] }
247
+ end
248
+
249
+ end
250
+ end
251
+
252
+ end
253
+ end
@@ -1,7 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
2
 
3
3
  describe "object referencing its own context" do
4
- subject { Conject.default_object_context }
4
+ subject { Conject.create_object_context(nil) }
5
5
 
6
6
  before do
7
7
  append_test_load_path "basic_composition"
@@ -2,9 +2,9 @@
2
2
  require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
3
3
 
4
4
  describe "nested contexts" do
5
- subject { Conject.default_object_context }
5
+ subject { Conject.create_object_context(nil) }
6
6
 
7
- let(:root_context) { Conject.default_object_context }
7
+ let(:root_context) { subject }
8
8
 
9
9
  before do
10
10
  append_test_load_path "basic_composition"
data/spec/spec_helper.rb CHANGED
@@ -20,5 +20,6 @@ end
20
20
 
21
21
  RSpec.configure do |config|
22
22
  config.include LoadPathHelpers
23
+ config.include ConjectHelpers
23
24
  end
24
25
 
@@ -0,0 +1,5 @@
1
+ module ConjectHelpers
2
+ def new_object_context
3
+ Conject.create_object_context(nil)
4
+ end
5
+ end
@@ -0,0 +1,4 @@
1
+ class SpecialGuest < Guest
2
+ def initialize
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ class VerySpecialGuest < SpecialGuest
2
+ def initialize
3
+ end
4
+ end
@@ -0,0 +1,5 @@
1
+ class Body
2
+ def hit
3
+ "body!"
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ class Car < Vehicle
2
+ construct_with :body, :wheel
3
+ end
@@ -0,0 +1,5 @@
1
+ class Emblem
2
+ def hit
3
+ "chevy!"
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class Malibu < Car
2
+ construct_with :body, :wheel, :emblem
3
+
4
+ def hit_emblem
5
+ emblem.hit
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ class Vehicle
2
+ construct_with :body, :wheel
3
+
4
+ def hit_body
5
+ body.hit
6
+ end
7
+
8
+ def hit_wheel
9
+ wheel.hit
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ class Wheel
2
+ def hit
3
+ "wheel!"
4
+ end
5
+ end
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.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-28 00:00:00.000000000 Z
12
+ date: 2012-03-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &2152364960 !ruby/object:Gem::Requirement
16
+ requirement: &2152782340 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2152364960
24
+ version_requirements: *2152782340
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &2152364540 !ruby/object:Gem::Requirement
27
+ requirement: &2152781820 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2152364540
35
+ version_requirements: *2152781820
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: simplecov
38
- requirement: &2152364060 !ruby/object:Gem::Requirement
38
+ requirement: &2152781320 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2152364060
46
+ version_requirements: *2152781320
47
47
  description: Enable Guice-like dependency injection and contextual object interactions.
48
48
  email:
49
49
  - david.crosby@atomicobject.com
@@ -60,6 +60,7 @@ files:
60
60
  - Rakefile
61
61
  - TODO
62
62
  - conject.gemspec
63
+ - doc/inheritance_woes.txt
63
64
  - lib/conject.rb
64
65
  - lib/conject/borrowed_active_support_inflector.rb
65
66
  - lib/conject/class_ext_construct_with.rb
@@ -77,6 +78,7 @@ files:
77
78
  - spec/acceptance/regression/README
78
79
  - spec/acceptance/regression/basic_composition_spec.rb
79
80
  - spec/acceptance/regression/basic_object_creation_spec.rb
81
+ - spec/acceptance/regression/inherited_dependencies_spec.rb
80
82
  - spec/acceptance/regression/inject_object_context_spec.rb
81
83
  - spec/acceptance/regression/nested_contexts_spec.rb
82
84
  - spec/conject/borrowed_active_support_inflector_spec.rb
@@ -91,6 +93,7 @@ files:
91
93
  - spec/conject/utilities_spec.rb
92
94
  - spec/spec_helper.rb
93
95
  - spec/support/SPEC_HELPERS_GO_HERE
96
+ - spec/support/conject_helpers.rb
94
97
  - spec/support/load_path_helpers.rb
95
98
  - spec/test_data/basic_composition/fence.rb
96
99
  - spec/test_data/basic_composition/front_desk.rb
@@ -99,8 +102,16 @@ files:
99
102
  - spec/test_data/basic_composition/lobby.rb
100
103
  - spec/test_data/basic_composition/master_of_puppets.rb
101
104
  - spec/test_data/basic_composition/nails.rb
105
+ - spec/test_data/basic_composition/special_guest.rb
102
106
  - spec/test_data/basic_composition/tv.rb
107
+ - spec/test_data/basic_composition/very_special_guest.rb
103
108
  - spec/test_data/basic_composition/wood.rb
109
+ - spec/test_data/inheritance/body.rb
110
+ - spec/test_data/inheritance/car.rb
111
+ - spec/test_data/inheritance/emblem.rb
112
+ - spec/test_data/inheritance/malibu.rb
113
+ - spec/test_data/inheritance/vehicle.rb
114
+ - spec/test_data/inheritance/wheel.rb
104
115
  - spec/test_data/simple_stuff/some_random_class.rb
105
116
  - spike/arity_funny_business_in_different_ruby_versions.rb
106
117
  - spike/depends_on_spike.rb
@@ -133,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
144
  version: '0'
134
145
  requirements: []
135
146
  rubyforge_project:
136
- rubygems_version: 1.8.10
147
+ rubygems_version: 1.8.15
137
148
  signing_key:
138
149
  specification_version: 3
139
150
  summary: Enable Guice-like dependency injection and contextual object interactions.
@@ -142,6 +153,7 @@ test_files:
142
153
  - spec/acceptance/regression/README
143
154
  - spec/acceptance/regression/basic_composition_spec.rb
144
155
  - spec/acceptance/regression/basic_object_creation_spec.rb
156
+ - spec/acceptance/regression/inherited_dependencies_spec.rb
145
157
  - spec/acceptance/regression/inject_object_context_spec.rb
146
158
  - spec/acceptance/regression/nested_contexts_spec.rb
147
159
  - spec/conject/borrowed_active_support_inflector_spec.rb
@@ -156,6 +168,7 @@ test_files:
156
168
  - spec/conject/utilities_spec.rb
157
169
  - spec/spec_helper.rb
158
170
  - spec/support/SPEC_HELPERS_GO_HERE
171
+ - spec/support/conject_helpers.rb
159
172
  - spec/support/load_path_helpers.rb
160
173
  - spec/test_data/basic_composition/fence.rb
161
174
  - spec/test_data/basic_composition/front_desk.rb
@@ -164,6 +177,14 @@ test_files:
164
177
  - spec/test_data/basic_composition/lobby.rb
165
178
  - spec/test_data/basic_composition/master_of_puppets.rb
166
179
  - spec/test_data/basic_composition/nails.rb
180
+ - spec/test_data/basic_composition/special_guest.rb
167
181
  - spec/test_data/basic_composition/tv.rb
182
+ - spec/test_data/basic_composition/very_special_guest.rb
168
183
  - spec/test_data/basic_composition/wood.rb
184
+ - spec/test_data/inheritance/body.rb
185
+ - spec/test_data/inheritance/car.rb
186
+ - spec/test_data/inheritance/emblem.rb
187
+ - spec/test_data/inheritance/malibu.rb
188
+ - spec/test_data/inheritance/vehicle.rb
189
+ - spec/test_data/inheritance/wheel.rb
169
190
  - spec/test_data/simple_stuff/some_random_class.rb