Created
April 29, 2014 15:24
-
-
Save jmolivas/11403587 to your computer and use it in GitHub Desktop.
Adding customizable configuration to Vagrantfile
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "yaml" | |
parameter_file = "./parameters.yml" | |
parameters = Array.new(0) | |
if File.exists?(parameter_file) | |
parameters = YAML::load_file(parameter_file) | |
end | |
# Apply configuration values if available | |
config.vm.network "private_network", ip: (parameters.include?'network_ip') ? parameters['network_ip'] : "192.168.9.10" | |
config.vm.synced_folder "./www", "/var/www", id: "webroot", type: (parameters.include?'synced_folder_type') ? parameters['synced_folder_type'] : "nfs" | |
virtualbox.customize ["modifyvm", :id, "--memory", (parameters.include?'memory') ? parameters['memory'] : "512"] |
NIce refactor sr aplicando en 3, 2 ,1
Esto es lo que haría yo:
require 'yaml'
file_name = 'parameters.yml'
params = {}
params = YAML.load_file(file_name)
config.vm.network "private_network", ip: params.fetch('network_ip', "192.168.9.10")
config.vm.synced_folder "./www", "/var/www", id: "webroot", type: params.fetch('synced_folder_type', "nfs")
virtualbox.customize ["modifyvm", :id, "--memory", params.fetch('memory', "512")]
Explicación:
- No necesito que params se por default un Array, sino que podría se un Hash
- La clase Hash, tiene un método muy bonito que se llama
fetch
fetch
funciona así, le puedo pasar hasta dos argumentos:- el primer argumento es la llave del Hash que puede apuntar a un valor
- el segundo argumento, funciona como fallback, si la llave no existe o apunta a
nil
, entonces proporciona un default value. Exemplo:params.fetch('network_ip', "192.168.9.10")
, significa del hash params, trae el valor de la llavenetwork_ip
, si no hay nada, entonces que sea192.168.9.10
.
Usando fetch
me ahorro todos esos ternary checks ;)
Nice!, con fetch
ya no importa si load_file
regreso una cadena o un hash. :) Yo agregaria el File.exists check al codigo de @antillas21 y listo (IMHO).
Muchas gracias señores si exacto agrego el File.exists por que el repo se distribuye con un parameters.yml.dist y el usuario tiene que hacer un $cp parameters.yml.dist parameters.yml para hacer override la config
Al final ha quedó así:
require "yaml"
params_file = "parameters.yml"
params = {}
if File.exists?(params_file)
params = YAML::load_file(params_file)
end
config.vm.network "private_network", ip: params.fetch('network_ip', "192.168.9.10")
config.vm.synced_folder "./www", "/var/www", id: "webroot", type: params.fetch('synced_folder_type', "nfs")
virtualbox.customize ["modifyvm", :id, "--memory", params.fetch('memory', "512")]
En un ejercicio extra, puedes reducir esto así:
require "yaml"
params_file = "parameters.yml"
params = File.exists?(params_file) ? YAML::load_file(params_file) : {}
config.vm.network "private_network", ip: params.fetch('network_ip', "192.168.9.10")
config.vm.synced_folder "./www", "/var/www", id: "webroot", type: params.fetch('synced_folder_type', "nfs")
virtualbox.customize ["modifyvm", :id, "--memory", params.fetch('memory', "512")]
De nuevo, la explicación:
- no hay por qué checar si params_file está definido, porque tú controlas el flow y lo acabas de declarar :P
- no hay por qué inicializar
params = { }
antes de hacer algo con él. - cuando declaras params, puedes darle un fallback value con
||
, traduciéndose como params es lo que resulte de abrir via YAML este archivo, o un Hash vacío
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Estillo PHP? xD