capistrano / capistrano/sshkit

Issue: SSHKit::Backend::Netssh binding change in run method breaks lookup in 'normal' block scope

Aperta
#149 10 commenti 0 reazioni 0 assegnatari Vedi su GitHub
discuss!
Lingua principale
Ruby
Stelle
1.2k
Fork
257
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

Hi,

in `SSHKit::Backend::Netssh#run` instance_exec is used to change the binding of the given block. With this binding change it is difficult to encapsulate an action in a service object for instance you have a cap-task:

``` ruby
desc 'Setup nginx configuration'
task :setup do
Nginx.new(self).setup
end
```

``` ruby
class Nginx < SimpleDelegator
...
def upload_files
on roles nginx_roles do |host|
set :host_server_name, host.properties.fetch(:host_server_name)
template 'assets.host.site', tmp_config_file
end
end

def tmp_config_file
'remote_file_name'
end
...
end
```

This does not work because the block is executed in the context of the `SSHKit::Backend::Netssh` object context and does not know the method tmp_config_file.

Why do I want to do such things? Testing! Rake and Cap tasks are difficult to test.
When I encapsulate the actions I can test the a little.

regards
dieter

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia da SSHKit::Backend::Netssh#run e analizza come instance_exec modifica il binding del blocco. Riproduci l’esempio di cap-task con Nginx#upload_files e tmp_config_file, quindi determina il comportamento previsto dello scope e aggiungi una coverage per la ricerca dei metodi negli oggetti servizio. Il lavoro è completato quando l’azione incapsulata riesce a risolvere tmp_config_file e il comportamento esistente del blocco rimane invariato.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
ruby
Ambito
devops
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.