class Steep::Subtyping::Result::Any
def add(*relations, &block)
def add(*relations, &block) relations.each do |relation| if failure? result = yield(relation) branches << result else # Already succeeded. branches << Skip.new(relation) end end # No need to test more branches if already succeeded. failure? end
def failure_path(path = [])
def failure_path(path = []) if failure? path.unshift(self) if r = branches.find(&:failure?) r.failure_path(path) else path end end end
def initialize(relation)
def initialize(relation) super relation @branches = [] @success = false end
def success?
def success? @success ||= branches.any?(&:success?) end