Sha256: c4b91c281847b6ec589f51f5cd8d4a9358f8c0179a3e5cad033c1b314e3c8195
Contents?: true
Size: 1.08 KB
Versions: 2
Compression:
Stored size: 1.08 KB
Contents
module GraphQL::Batch class Loader def self.for(*group_args) Executor.current.loaders[group_args] ||= new(*group_args) end def promises_by_key @promises_by_key ||= {} end def keys promises_by_key.keys end def load(key) promises_by_key[key] ||= Promise.new end def load_many(keys) Promise.all(keys.map { |key| load(key) }) end def fulfill(key, value) promises_by_key[key].fulfill(value) end def fulfilled?(key) promises_by_key[key].fulfilled? end # batch load keys and fulfill promises def perform(keys) raise NotImplementedError end def resolve perform(keys) check_for_broken_promises rescue => err promises_by_key.each do |key, promise| promise.reject(err) end end private def check_for_broken_promises promises_by_key.each do |key, promise| if promise.pending? promise.reject(BrokenPromiseError.new("#{self.class} didn't fulfill promise for key #{key.inspect}")) end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
graphql-batch-0.2.3 | lib/graphql/batch/loader.rb |
graphql-batch-0.2.2 | lib/graphql/batch/loader.rb |