Module: Collaborator

Defined in:
lib/collaborator.rb

Instance Method Summary collapse

Instance Method Details

#dependency(name, default_dep) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/collaborator.rb', line 13

def dependency(name, default_dep)

	define_method(name) do
		cached = instance_variable_get("@#{name}")
		return cached if cached
		self.send "reset_#{name}"
	end

	define_method("#{name}=") do |injected|
		self.prepare_collaborator(name, injected) if self.respond_to?(:prepare_collaborator)
		instance_variable_set("@#{name}", injected)
	end

	define_method("reset_#{name}") do
		evaluated = self.class.evaluate_dependency(default_dep)
		self.prepare_collaborator(name, evaluated) if self.respond_to?(:prepare_collaborator)
		instance_variable_set("@#{name}", evaluated)
		evaluated
	end
	
end

#evaluate_dependency(dependency) ⇒ Object

a dependecy might be a class, an instance or a lambda evaluate the lambda if necessary



5
6
7
8
9
10
11
# File 'lib/collaborator.rb', line 5

def evaluate_dependency(dependency)
	if dependency.is_a?(Proc)
		return dependency.call
	else
		dependency
	end
end