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)

Parameters:



1836
1837
1838
1839
1840
1841
# File 'lib/udb/condition.rb', line 1836

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)

This method returns an undefined value.

Parameters:



1856
1857
1858
1859
1860
1861
1862
1863
1864
# File 'lib/udb/condition.rb', line 1856

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_versionsArray<ConditionalExtensionVersion>

Returns:



1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
# File 'lib/udb/condition.rb', line 1876

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

#listArray<ConditionalExtensionRequirement>



1867
1868
1869
1870
1871
1872
1873
# File 'lib/udb/condition.rb', line 1867

def list
  return @list unless @list.nil?

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

#make_cond_ext_req(yaml) ⇒ ConditionalExtensionRequirement

Parameters:

  • yaml (Hash{String => T.untyped})

Returns:



1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
# File 'lib/udb/condition.rb', line 1844

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