Ich versuche this example zu folgen, aber wenn ich nicht einen Weg, um eine Schleife durch den Hash finden kann, wie er tut:durch Rubin Looping-Hashes
...
platforms = {
'MyOS' => {
'package' => 'package',
'versions' => ['1.0', '2.0','3.0']
}
}
...
platforms.each do |platform, (package, versions)|
versions.each do |version|
context "On #{platform} #{version}" do
before do
Fauxhai.mock(platform: platform, version: version)
end
let(:chef_run) { ChefSpec::ChefRunner.new.converge('cookbook::recipe') }
it "Installs the package" do
chef_run.should install_package package
end
end
end
...
bekomme ich folgende Fehlermeldung:
/path/file.rb:XX:in `block (2 levels) in <top (required)>': undefined method `each' for nil:NilClass (NoMethodError)
Aus irgendeinem Grund funktioniert die |a, (b,c)|
nicht, die runden Klammern werden ignoriert.
scheint wie platform
enthält (wie erwartet) 'MYOS' jedoch der Iterator package
gleich ‚{ "Paket"=> "Paket", "Varianten"=> [ "1,0", "2,0"," 3.0 "]} ' und versions
ist leer.
Ich erwarte folgendes:
platform = "MyOS"
package = "package"
versions = ["1.0", "2.0", "3.0"]
Also ich bin in der Lage den Paketnamen zuzugreifen, während durch die Versionen der Plattform Looping.
Dies ist nah an dem, was ich brauche, aber ich muss in der Lage sein, auf den Paketnamen für jede Version in der Liste zuzugreifen. Auf diese Weise kann ich nur auf den Paketnamen in der ersten Iteration zugreifen, und ich denke nicht, dass es angemessen ist, diesen Wert auf einer externen Variablen zu speichern. – Navarro
Ich wollte reproduzieren, was Sie als Ausgabe zur Verfügung stellen. Wenn es etwas anderes ist, bitte aktualisieren Sie die Frage und ich werde meine Antwort ändern. – Ursus
In meinem Beispiel haben Sie Versionen in 'platform ['versions']' – Ursus