Sha256: 9efd593bd1ee0ec047c6a9af4d273c494e1e0e44967232446f24a9ae901ac138
Contents?: true
Size: 1.49 KB
Versions: 1
Compression:
Stored size: 1.49 KB
Contents
require "batch_loader/version" require "batch_loader/executor_proxy" require "batch_loader/middleware" class BatchLoader NoBatchError = Class.new(StandardError) BatchAlreadyExistsError = Class.new(StandardError) class << self def for(item) new(item: item) end def sync!(value) case value when Array value.map! { |v| sync!(v) } when Hash value.each { |k, v| value[k] = sync!(v) } when BatchLoader sync!(value.sync) else value end end end attr_reader :item, :batch_block, :cache def initialize(item:) @item = item end def batch(cache: true, &batch_block) raise BatchAlreadyExistsError if @batch_block @cache = cache @batch_block = batch_block executor_for_block.add(item: item) self end def load(item, value) executor_for_block.load(item: item, value: value) end def sync unless executor_for_block.value_loaded?(item: item) batch_block.call(executor_for_block.list_items, self) executor_for_block.delete_items end result = executor_for_block.loaded_value(item: item) purge_cache unless cache result end private def executor_for_block @executor_for_block ||= begin raise NoBatchError.new("Please provide a batch block first") unless batch_block BatchLoader::ExecutorProxy.new(&batch_block) end end def purge_cache executor_for_block.unload_value(item: item) executor_for_block.add(item: item) end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
batch-loader-0.2.0 | lib/batch_loader.rb |