module IOPromise::DataLoader::ClassMethods

Public Instance Methods

attr_async(attr_name, build_func = nil) click to toggle source
# File lib/iopromise/data_loader.rb, line 6
def attr_async(attr_name, build_func = nil)
  self.attr_async_names << attr_name

  if build_func.nil?
    self.class_eval("def async_#{attr_name};@#{attr_name};end")
  else
    self.define_method("async_#{attr_name}") do
      @attr_async_memo ||= {}
      @attr_async_memo[attr_name] ||= self.instance_exec(&build_func)
    end
  end

  self.class_eval("def #{attr_name};async_#{attr_name}.sync;end")
end
attr_async_names() click to toggle source
# File lib/iopromise/data_loader.rb, line 21
def attr_async_names
  @attr_async_names ||= []
end