Class: Udb::ExtensionRequirementList

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/udb/condition.rb

Overview

a conditional list of extension requirements

Defined Under Namespace

Classes: ParseState

Instance Method Summary collapse

Constructor Details

#initialize(yaml, cfg_arch) ⇒ ExtensionRequirementList

Returns a new instance of ExtensionRequirementList.



2157
2158
2159
2160
2161
2162
# File 'lib/udb/condition.rb', line 2157

def initialize(yaml, cfg_arch)
  @yaml = yaml
  @cfg_arch = cfg_arch
  @list = T.let(nil, T.nilable(T::Array[ConditionalExtensionRequirement]))
  @implied_extension_versions = T.let(nil, T.nilable(T::Array[ConditionalExtensionVersion]))
end

Instance Method Details

#do_list(yaml, l) ⇒ Object



2177
2178
2179
2180
2181
2182
2183
2184
2185
# File 'lib/udb/condition.rb', line 2177

def do_list(yaml, l)
  if yaml.key?("name")
    l << make_cond_ext_req(yaml)
  elsif yaml.key?("allOf")
    yaml.fetch("allOf").each { |item| do_list(item, l) }
  else
    raise "unexpected key #{yaml.keys}"
  end
end

#implied_extension_versionsObject



2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
# File 'lib/udb/condition.rb', line 2197

def implied_extension_versions
  return @implied_extension_versions unless @implied_extension_versions.nil?

  @implied_extension_versions = []
  list.each do |cond_ext_req|
    ext_req = cond_ext_req.ext_req
    if (ext_req.requirement_specs.size == 1) && (ext_req.requirement_specs.fetch(0).op == "=")
      ext_ver = ext_req.satisfying_versions.fetch(0)
      @implied_extension_versions << ConditionalExtensionVersion.new(ext_ver:, cond: cond_ext_req.cond)
    end
  end
  @implied_extension_versions
end

#listObject



2188
2189
2190
2191
2192
2193
2194
# File 'lib/udb/condition.rb', line 2188

def list
  return @list unless @list.nil?

  @list = []
  do_list(@yaml, @list)
  @list
end

#make_cond_ext_req(yaml) ⇒ Object



2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
# File 'lib/udb/condition.rb', line 2165

def make_cond_ext_req(yaml)
  ext_req = ExtensionRequirement.create_from_yaml(yaml, @cfg_arch)
  cond =
    if yaml.key?("when")
      Condition.new(yaml.fetch("when"), @cfg_arch)
    else
      AlwaysTrueCondition.new(@cfg_arch)
    end
  ConditionalExtensionRequirement.new(ext_req:, cond:)
end