Je suis en train de suivre this example, mais quand je ne peux pas trouver un moyen de boucle à travers le hachage comme il le fait:Looping par Ruby hachages
...
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
...
Je reçois l'erreur suivante:
/path/file.rb:XX:in `block (2 levels) in <top (required)>': undefined method `each' for nil:NilClass (NoMethodError)
Pour une raison quelconque, le |a, (b,c)|
ne fonctionne pas, les parenthèses sont ignorées.
On dirait que platform
contient (comme prévu) 'myös', mais le iterator package
est égal à « { "package"=> "package", "versions"=> [ "1.0", "2.0"," 3,0 "]} ' et versions
est vide.
J'attends ce qui suit:
platform = "MyOS"
package = "package"
versions = ["1.0", "2.0", "3.0"]
Je suis en mesure d'accéder au nom du package en boucle à travers les versions de la plate-forme.
Ceci est proche de ce dont j'ai besoin, mais je dois pouvoir accéder au nom du paquet sur chaque version de la liste. En boucle de cette façon, je ne peux avoir accès au nom du paquet qu'à la première itération, et je ne pense pas qu'il soit approprié de stocker cette valeur sur une variable externe. – Navarro
Je voulais reproduire ce que vous fournissez en tant que sortie nécessaire. Si c'est quelque chose de différent, veuillez mettre à jour la question et je vais changer ma réponse. – Ursus
Dans mon exemple, vous avez des versions dans 'platform ['versions']' – Ursus