Bonjour,
Voila je rencontre un petit problème avec mon code.
Je suis présentement en apprentissage avec ruby Sinatra. Un peu moins complexe que Rails (à mon avis)
Pour l'instant je n'ai pas grand chose de fais mais j'ai un petit problème d'affichage.
Fichier 1 : /main.rb
require 'rubygems'
require 'sinatra'
configure {
set :bind, '62.4.16.140'
set :port, 8080
}
Dir["#{File.dirname(__FILE__)}/lib/*.rb"].each do |file|
require file
end
get '/' do
erb :home
end
get '/admin' do
erb :admin
end
post '/admin' do
login = params[:login]
password = params[:pwd]
if login == "admin" && password == "admin"
putsDir("/home").each do |fichier|
"Dossiers : #{fichier}"
end
else
erb :home
end
end
Fichier 2 : /lib/functions.rb
def putsDir(directory)
contenu = Dir.entries(directory)
return contenu
end
Lorsque j'arrive bien à mettre admin/admin comme credentials, il ne listera pas les dossiers avec la boucle each, mais il listera les répertoires/fichiers à partir de la fonction "putsDir"
### Ce que je veux
Dossiers : .
Dossiers : ..
Dossiers : file.txt
Dossiers : niolith
Dossiers : test
### Ce que j'obtiens
Je ne sais pas d'où il print à l'écran avec cette structure :
...file.txtniolithtest
Bonjour,
Je ne sais pas si tu as réussi à résoudre le problème avant que je réponde (un peu tard, certes), mais il me semble que Sinatra rend ce qui a été retourné par le bloc, dans ce cas là, c'est celui-là :
post '/admin' do
login = params[:login]
password = params[:pwd]
if login == "admin" && password == "admin"
putsDir("/home").each do |fichier|
"Dossiers : #{fichier}"
end
else
erb :home
end
end
Or, un #each
renvoie l'objet non muté. Ce que tu cherchais à faire (donc muter les valeurs du tableau) se fait en utilisant #map
ou #collect
(ce sont des synonymes, mais prévilégie #map
).