Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

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

1 réponse


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).