Module: RSpec::ContextLet::ClassMethods

Defined in:
lib/rspec/context-let.rb

Defined Under Namespace

Classes: UnevaluatedValue

Instance Method Summary collapse

Instance Method Details

#clet(name, &block) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/rspec/context-let.rb', line 8

def clet(name, &block)
  raise "#clet called without a block" if block.nil?
  name = name.to_sym
  
  RSpec::Core::MemoizedHelpers.module_for(self).send(:define_method, name, &block)
  
  @__context_memo ||= {}
  @__context_memo[name] = [UnevaluatedValue, block]
  
  define_method(name) do
    klass = self.class

    until klass.nil?
      cm = klass.instance_variable_get(:@__context_memo)
      if cm.is_a?(Hash) and cm.has_key?(name)
        if cm[name].is_a?(Array) and cm[name][0] == UnevaluatedValue
          cm[name] = super(&nil)
          return cm[name]
        else
          return cm[name]
        end
      else
        rklass = klass.name.reverse.split("::", 2)[1]
        klass = rklass.nil? ? nil : eval(rklass.reverse)
      end
    end
  end
end