capistrano / capistrano/sshkit
Issue: SSHKit::Backend::Netssh binding change in run method breaks lookup in 'normal' block scope
- 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