Module: Niconico::Deferrable::ClassMethods

Defined in:
lib/niconico/deferrable.rb

Instance Method Summary collapse

Instance Method Details

#deferrable(*keys) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
# File 'lib/niconico/deferrable.rb', line 4

def deferrable(*keys)
  keys.each do |key|
    binding.eval(<<-EOM, __FILE__, __LINE__.succ)
      define_method(:#{key}) do
        get() if @#{key}.nil? && !fetched?
        @#{key}
      end
    EOM
  end
  self.deferred_methods.push *keys
end

#deferred_methodsObject



16
17
18
# File 'lib/niconico/deferrable.rb', line 16

def deferred_methods
  @deferred_methods ||= []
end

#lazy(key, &block) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/niconico/deferrable.rb', line 20

def lazy(key, &block)
  define_method(key) do
    case
    when fetched?
      self.instance_eval &block
    when @preload[key]
      @preload[key]
    else
      get()
      self.instance_eval &block
    end
  end
  self.lazy_methods.push key
end

#lazy_methodsObject



35
36
37
# File 'lib/niconico/deferrable.rb', line 35

def lazy_methods
  @lazy_methods ||= []
end