module Prelude::Preloadable

Attributes

prelude_preloader[W]

Public Instance Methods

define_prelude(name, &blk) click to toggle source

Define how to preload a given method

# File lib/prelude/preloadable.rb, line 26
def define_prelude(name, &blk)
  prelude_methods[name] = Prelude::Method.new(&blk)

  define_method(name) do |*args|
    key = [name, args]
    return preloaded_values[key] if preloaded_values.key?(key)

    unless @prelude_preloader
      @prelude_preloader = Preloader.new(self.class, [self])
    end

    @prelude_preloader.fetch(name, *args)
    preloaded_values[key]
  end
end
preloaded_values() click to toggle source
# File lib/prelude/preloadable.rb, line 10
def preloaded_values
  @preloaded_values ||= {}
end
prelude_methods() click to toggle source

Mapping of field name to block for resolving a given preloader

# File lib/prelude/preloadable.rb, line 21
def prelude_methods
  @prelude_methods ||= {}
end
set_preloaded_value_for(name, args, result) click to toggle source
# File lib/prelude/preloadable.rb, line 14
def set_preloaded_value_for(name, args, result)
  key = [name, args]
  preloaded_values[key] = result
end