| Class | RR::DoubleDefinitions::DoubleInjections::NewInstanceOf |
| In: |
lib/rr/double_definitions/double_injections/new_instance_of.rb
|
| Parent: | Object |
# File lib/rr/double_definitions/double_injections/new_instance_of.rb, line 30
30: def add_method_chain_definition(subject_instance, double_definition_create)
31: implementation_strategy = double_definition_create.implementation_strategy
32: if implementation_strategy.method_name
33: stub(subject_instance).method_missing(
34: implementation_strategy.method_name,
35: *implementation_strategy.args,
36: &implementation_strategy.handler
37: )
38: end
39: end
# File lib/rr/double_definitions/double_injections/new_instance_of.rb, line 23
23: def add_stubbed_methods(subject_instance, stubbed_methods)
24: stubbed_methods.each do |name, value|
25: value_proc = value.is_a?(Proc) ? value : lambda {value}
26: stub(subject_instance, name).returns(&value_proc)
27: end
28: end
# File lib/rr/double_definitions/double_injections/new_instance_of.rb, line 7
7: def call(subject, stubbed_methods={})
8: double_definition_create = DoubleDefinitionCreate.new.stub
9: stub.proxy(subject).allocate do |instance|
10: add_stubbed_methods(instance, stubbed_methods)
11: add_method_chain_definition(instance, double_definition_create)
12: yield(instance) if block_given?
13: instance
14: end
15: stub(subject).new do |*args|
16: instance = subject.allocate
17: initialize_subject_instance(instance, args)
18: end
19: DoubleDefinitionCreateBlankSlate.new(double_definition_create)
20: end
# File lib/rr/double_definitions/double_injections/new_instance_of.rb, line 41
41: def initialize_subject_instance(subject_instance, args)
42: if args.last.is_a?(ProcFromBlock)
43: subject_instance.__send__(:initialize, *args[0..(args.length-2)], &args.last)
44: else
45: subject_instance.__send__(:initialize, *args)
46: end
47: subject_instance
48: end