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