Class: Steep::Subtyping::Result::Any

Inherits:
Base show all
Defined in:
lib/steep/subtyping/result.rb

Instance Attribute Summary collapse

Attributes inherited from Base

#relation

Instance Method Summary collapse

Methods inherited from Base

#else, #failure?, #then

Constructor Details

#initialize(relation) ⇒ Any

Returns a new instance of Any.



129
130
131
132
133
# File 'lib/steep/subtyping/result.rb', line 129

def initialize(relation)
  super relation
  @branches = []
  @success = false
end

Instance Attribute Details

#branchesObject (readonly)

Returns the value of attribute branches.



127
128
129
# File 'lib/steep/subtyping/result.rb', line 127

def branches
  @branches
end

Instance Method Details

#add(*relations, &block) ⇒ Object

Returns ‘false` if no future `#add` changes the result.



136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/steep/subtyping/result.rb', line 136

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

#failure_path(path = []) ⇒ Object



155
156
157
158
159
160
161
162
163
164
# File 'lib/steep/subtyping/result.rb', line 155

def failure_path(path = [])
  if failure?
    path.unshift(self)
    if r = branches.find(&:failure?)
      r.failure_path(path)
    else
      path
    end
  end
end

#success?Boolean

Returns:

  • (Boolean)


151
152
153
# File 'lib/steep/subtyping/result.rb', line 151

def success?
  @success ||= branches.any?(&:success?)
end