Aziende e sviluppatori che fondano il proprio business dentro e fuori dall'Italia ben conoscono l'importanza che ha la localizzazione di un prodotto in un'altra lingua. Rails mi ha particolarmente sorpreso in questo senso. Rispetto ad altri framework, come ad esempio Symfony, non integra nativamente (al momento siamo alla release 1.2.6) il supporto alla localizzazione ovvero allo sviluppo di un'applicazione multilingua. Questo non significa che non si possa fare, tutt'altro! Solo è necessario un po' di "sbattimento" in più. Si è deciso che il nostro prodotto dovrà  essere disponibile in diverse localizzazioni. Così la giornata di oggi è stata dedicata all'approfondimento del tema Ruby e i18n. Sul wiki di Rails è disponibile la pagina InternationalizationComparison che offre una panoramica delle principali soluzioni disponibili. (more…)

Continua a leggere Ruby Diary #29: Rails e supporto all’internazionalizzazione (i18n)

Categoria: Ruby

Tags: , ,

Oggi ho scoperto, anzi, mi è stata segnalato, un metodo di Rails che può tornare utile in diverse occasioni. Si chiama Object#with_options e non mi resta che lasciarvi nelle sapienti mani, anzi pagine, del blog di Jamis Buck con due gustosi articoli: Named, explicit routes e Object#with_options. (more…)

Continua a leggere Ruby Diary #28: Routing in ordine con with_options in Rails

Categoria: Ruby

Non avrei potuto dare un titolo migliore (o forse sì?) rispetto all'originale inglese: Why doesn't Logger behave the way the Ruby library docs say it should under rails?. Oggi ho avuto l'ennesima confema di quanto sia pericoloso un uso non corretto e coerente di una delle funzionalità  più caratteristiche di Ruby: la possibilità  di ridefinire runtime un metodo o una intera classe. àˆ incredibile, intenzionalmente o meno si possono distruggere intere librerie quasi come il comportamento di Rails nei confronti di Ruby Logger. Rails, come forse saprete, tiene traccia di ogni attività  in un file per ogni environment, salvato sotto la cartella log. Per risolvere il problematico problema problemoso descritto qualche giorno fa i log sono diventati i miei migliori amici per qualche ora. A dire il vero, non è che li ho trovati così utili. Nessuna indicazione del livello del log. Nessuna indicazione dell'ora o del thread. Mah, certo che 'sta libreria Logger lascia il tempo che trova!... mi sono detto.Poi vado a leggere la documentazione di Logger ed analizzo il suo sorgente. Caspita, ma il log contiene eccome questi dati, ma perché io non li vedo?!? (more…)

Continua a leggere Ruby Diary #28: Perchà© la libreria Ruby Logger non si comporta come documentato sotto Rails?

Categoria: Ruby

Esiste una funzione in Ruby chiamata Hash#merge che permette di fondere il contenuto dell'hash h2 in h1 restituendo il risultato. Hash#merge! esegue la stessa azione sovascrivendo h1 con il risultato. h1 = { "a" => 100, "b" => 200 } h2 = { "b" => 254, "c" => 300 } h1.merge(h2) #=> {"a"=>100, "b"=>254, "c"=>300} h1 #=> {"a"=>100, "b"=>200} Questo metodo funziona a meraviglia con gli Hash monodimensionali, il comportamento cambia con quelli multidimensionali. Osserviamo questo esempio. h = {:a => {:b => :c}}.merge({:a => {:l => :x}}) puts h #=> {:a=> {:l => :x}} (more…)

Continua a leggere Ruby Diary #27: Versione ricorsiva di Hash#merge

Categoria: Ruby

Tags: , ,

Non ho aspettato più di qualche ora ad introdurre >respond_to() nell'applicazione Rails. Nel mio caso utilizzo un unico metodo per mostrare un'anteprima di una immagine. Se la richiesta è HTML mostro la cornice che impagina la thumbnail, in alternativa se la richiesta è di tipo immagine (png) restituisco l'immagine stessa. Per ogni altra richiesta restituisco 404. A grandi linee, il codice assomiglia a questo: def show # validate URI begin @uri = URI.parse('http://' + params[:uri]) rescue raise_404(); return end # more code here and get image_path respond_to do |type| # html request type.html { render } # default template # image requests type.png { send_file(image_path, :disposition => 'inline') } # all type.all { raise_404(); return } end end (more…)

Continua a leggere Ruby Diary #26: Dove salvare le immagini in Rails

Categoria: Ruby

àˆ passato qualche giorno ormai e non ricordo come l'ho scoperto, ad ogni modo poco importa. Conoscete il metodo ActionController#respond_to? Lasciatemelo dire, è uno spettacolo! Sul blog Raaum trovate una breve ma significativa panoramica. Sostanzialmente, il metodo fornisce indicazione su quale risposta si aspetta il client: in questo modo potete supportare differenti risposte e template con uno stesso controller. Il blog Raaum fornisce un esempio usando una versione html o restituendo un feed, a seconda del tipo di richiesta. (more…)

Continua a leggere Ruby Diary #25: respond_to: quale tipo di risposta accetta la richiesta?

Categoria: Ruby

Questo post arriva al termine di una lunga giornata, passata a dare la caccia ad un assurdo bug che proprio non ne voleva sapere di manifestarsi quando eravamo pronti a freddarlo al volo! Sono circa le 19.45 (i post sono schedulati! :P) e sto chiudendo NetBeans, Baracca e Burattini dopo aver desolantemente scoperto che il bug era una chiamata al metodo content_type di Net::HTTPResponse che, nella versione 1.8.2 montata sul server non è ancora disponibile! Eh certo che sul mio Mac funzionava, io ho la 1.8.6... ma come è possibile che non ho controllato la versione? Eppure Simone, mi dico, non sei più un novellino. Sul Wiki interno c'è anche una pagina che riepiloga la config di ogni server aziendale. Ma proprio quella pagina mi aveva fregato, per un errore alla quale si è aggiunta una sfortunata coincidenza che non sto a descrivervi. (more…)

Continua a leggere Ruby Diary #24: Test dei requisiti allo startup dell’environment Rails

Categoria: Ruby

Tags: , ,

Chi mastica programmazione a pranzo e cena, ed anche a merenda, senz'altro avrà  già  sentito parlare dei Magic Numbers. Si tratta di una pratica di cattiva programmazione in cui si usa inserire direttamente all'interno del codice delle costanti numeriche senza fornire alcuna spiegazione. # check whether the account have more domain available raise NoMoreDomainAvailable unless User.nof_domains < 25 In questo codice è ancora abbastanza comprensibile che 25 sia il limite, ma la domanda resta: di chi o cosa? Prendete quest'altro esempio. log.status = 1 log.save!() Qua proprio si capisce poco! Cos'è 1? DEBUG o FATAL ERROR? La pratica corretta sarebbe di riscrivere, ad esempio, l'ultimo script in questo modo. # Define status list LOG_STATUS_DEBUG = 0 LOG_STATUS_INFO = 1 LOG_STATUS_ERROR = 2 log.status = LOG_STATUS_INFO log.save!() Nei nostri due esempi 1 e 25 sono magic numbers. (more…)

Continua a leggere Ruby Diary #23: Configurazioni globali in Rails, é meglio evitare Magic Numbers

Categoria: Ruby

Sono sempre più convinto che l'editor, anche se non sostituisce il programmatore, giochi un ruolo fondamentale nello sviluppo di un programma. Il tempo è denaro, risparmiare tempo quando si lavora è essenziale, ottimizzare il tempo è fondamentale. Questo post non è un nuovo trattato su quale editor per Ruby e Rails scegliere, il post indicato è più che sufficiente. In realtà  è una riflessione. Ora che sviluppo in Rails da un paio di mesi o poco più mi accorgo di quanto sia fondamentale un editor per risparmiare tempo. Ad esempio, selezionando un'action in un controller intellij vi permette di saltare alla view corrispondente e viceversa. (more…)

Continua a leggere Ruby Diary #22: L’IDE a supporto dello sviluppo

Categoria: Ruby

Questo è, numero più numero meno, il ventesimo post di Ruby Diary.Come anticipai nel mio secondo post prima di avventurarci in Rails si è resa necessaria una panoramica su Ruby. A questo punto credo possa essere il momento di cominciare ad introdurre qualche post su Rails. Il diario dovrebbe offrire una cronaca day by day della mia avventura in Ruby/Rails, ma è difficile mantenere il ritmo spiegando ogni cosa. Dunque mi piacerebbe fornirvi, per cominciare, un po' di risorse per avventurarvi in Rails. I miei post saranno più specifici, meno orientati all'aspetto generale ma a problematiche reali e specifiche di Rails. Innanzitutto è bene citare per primo il sito ufficiale del framework Rails. Contiene consigli, suggerimenti, risorse e molto altro. (more…)

Continua a leggere Ruby Diary #21: Siete pronti a provare Rails?

Categoria: Ruby

Tags: , ,