24
Nov/090
Nov/090
Simplification des appels à erlang depuis ruby
Dans les articles précédents, les appels au processus erlang
via la ligne de commande étaient écrits ainsi :
system "erl -pa #{EBIN_DIR} #{ROOT}/deps/*/ebin -boot start_sasl -s reloader -s inets -s xxx -mnesia dir 'db'"
On améliore l’écriture de cette commande afin de la rendre plus lisible et maintenable. Pour cela, on crée une fonction wrapper
comme ci dessous :
def erl(args, options) dirs = "-pa #{options[:dirs].join(' ')}" if options[:dirs] run = "-s init stop" if options[:init] noshell = "-noshell -noinput" if options[:noshell] func = "-s #{options[:func][0]} #{options[:func][1]}" if options[:func] mods = options[:mods].map { |e| "-s #{e}" }.join(' ') if options[:mods] boot = "-boot #{options[:boot]}" if options[:boot] puts "erl #{dirs} #{boot} #{noshell} #{mods} #{args} #{func} #{run}" system "erl #{dirs} #{boot} #{noshell} #{mods} #{args} #{func} #{run}" end
La commande peut être ré-écrite ainsi :
erl "-mnesia dir 'db'", :boot => "start_sasl", :mods => ["reloader", "inets", "xxx"], :dirs => [EBIN_DIR, "#{ROOT}/deps/*/ebin"]
Ce qui, me semble, est plus compréhensible que précédemment. On peut remarquer que le cas de la base mnesia
n’a pas encore été pris en compte.