class Dhall::Resolvers::ResolutionSet
Public Class Methods
new(reader, max_depth:)
click to toggle source
# File lib/dhall/resolve.rb, line 191 def initialize(reader, max_depth:) @reader = reader @max_depth = max_depth @parents = [] @set = Hash.new { |h, k| h[k] = [] } end
Public Instance Methods
child(parent_source)
click to toggle source
# File lib/dhall/resolve.rb, line 228 def child(parent_source) dup.tap do |c| c.instance_eval do @parents = @parents.dup + [parent_source] @set = Hash.new { |h, k| h[k] = [] } end end end
reader()
click to toggle source
# File lib/dhall/resolve.rb, line 216 def reader lambda do |sources| raise TimeoutException if sources.any? { |s| s.deadline.exceeded? } if @reader.arity == 2 @reader.call(sources, @parents.last&.origin || "localhost") else @reader.call(sources) end end end
register(source)
click to toggle source
# File lib/dhall/resolve.rb, line 198 def register(source) p = Promise.new if @parents.include?(source.canonical) p.reject(ImportLoopException.new(source)) elsif @parents.length + 1 > @max_depth msg = "Max import depth of #{@max_depth} exceeded" p.reject(ImportFailedException.new(msg)) else @set[source] << p end p end
resolutions()
click to toggle source
# File lib/dhall/resolve.rb, line 211 def resolutions sources, promises = @set.to_a.transpose [Array(sources), Array(promises)] end