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