ruby

Page 1

Get Ruby on Rails in no time

Indice Generale Indice Generale Get Ruby on Rails in no time Ruby on Rails Introduzione Installazione Ruby DevKit RubyGems Rails Mongrel SQLite MySQL PostgreSQL MongoDB Git Conclusioni Creazione di un Progetto Lo scheletro dell'applicazione La console Creare risorse tramite scaffold Convalidare i dati Il flusso dell'applicazione Modificare controller e viste Aspetto e Interfaccia I layout I Partial Immagini, JavaScript e Fogli di Stile Heroku Definizione Installazione Gemme Bundler Thin Taps Foreman Sinatra 1


Get Ruby on Rails in no time Definizione Installazione Creazione di un Progetto Haml Creare un App Step 1 Step 2 Step 3 Step 4 Step 5 Conclusioni Caricare un App FaceBook Application Introduzione Omniauth App Preparare l’App Creare un Provider Aggiungere il Provider all’APP Creare la Login Page Creare l’User Model Aggingere un po di logica alla App Consentire Providers Multiple Alcuni Tweaks Extra Conclusioni YouTube Definizione Tool Introduzione Installazione Eclipse Aptana Collegamenti Esterni Credits

Get Ruby on Rails in no time Da Google.It, motore di ricerca italiano.

2


Get Ruby on Rails in no time

Ruby on Rails Introduzione Ruby è in grado di funzionare piuttosto bene anche su Windows, e lo stesso vale per Rails. La presenza di un piccolo Web Server integrato nell'applicazione fa sì che sia anche molto semplice cominciare a lavorare con Rails senza dover installare sistemi più ingombranti come Apache. Esistono due modi per installare Rails: il primo è piuttosto simile a quello usato per l'installazione su Linux mentre il secondo è più veloce ma offre meno controllo. Si raccomanda, per usare Rails, Ruby 1.8.7 oppure Ruby 1.9.3. Su Ruby 1.8.6, e versioni precedenti, lo stesso non è supportato.

Installazione Ruby Per prima cosa occorre installare Ruby, il linguaggio con cui è stato scritto Ruby on Rails. Il progetto http://rubyonrails.org/ offre un pacchetto per l'installazione semplificata di Ruby su piattaforme Windows; si procede scaricando l'ultima versione disponibile del pacchetto da questo indirizzo http://rubyonrails.org/ (la versione di riferimento per questa guida è la 1.9.3p125) e ad eseguire il pacchetto di installazione. Durante l'installazione viene chiesto di indicare la cartella nella quale si vuole installare Ruby; lasciare il valore predefinito C:\Ruby193 e procedere all'installazione. In seguito è possibile scegliere alcuni pacchetti aggiuntivi all'installazione. Qui è molto importante selezionare l'opzione che abilita il supporto per le tastiere europee così da assicurare il corretto funzionamento della console Rails; lasciare tutte le altre opzioni invariate e procedere fino alla conclusione dell'installazione. Al termine della procedura, oltre al linguaggio Ruby si trova installato anche SCIte, un editor piccolo ma funzionale, e RubyGem, il sistema per l'installazione e la manutenzione delle librerie aggiuntive di Ruby.

3


Get Ruby on Rails in no time Terminata l'installazione si procede con l’aprire il terminale e controllare che l'installazione di Ruby sia andata a buon fine. Per lanciare il terminale è sufficiente premere i tasti Windows+R (Start>Esegui), introdurre cmd come comando da eseguire e premere invio; le istruzioni da inserire sono quelle che seguono l'indicazione del prompt C:\Users>, mentre le altre righe sono il risultato a video delle istruzioni introdotte: C:\Users> ruby -v ruby 1.8.7 (2011-06-30 patchlevel 352) [i386-mingw32]

DevKit DevKit è necessario perché Cucumber richiede la gemma JSON. Si esegue il download di DevKit-tdm-32-4.5.1-20101214-1400-sfx.exe è si estrae nella cartella C:\DevKit. Una volta estratto si va nella cartella dove è stato estratto DevKit e si esegue il comando ‘ruby dk.rb init’: C:\DevKit> ruby dk.rb init [INFO] found RubyInstaller v1.9.3 at C:/Ruby193 Initialization complete! Please review and modify the auto-generated 'config.yml' file to ensure it contains the root directories to all of the installed Rubies you want enhanced by the DevKit. Successivamente, si esegue il comando ‘ruby dk.rb install’: C:\DevKit> ruby dk.rb install [INFO] Updating convenience notice gem override for 'C:/Ruby193' [INFO] Installing 'C:/Ruby193/lib/ruby/site_ruby/devkit.rb'

RubyGems Si parte controllando che RubyGems sia presente nel sistema, poiché viene subito utilizzato per l'installazione di Rails. RubyGem è in grado di gestire automaticamente i propri aggiornamenti. Con il comando che segue, si entra nella cartella ‘C:\Users’ e si richiede l'aggiornamento all'ultima versione disponibile: C:\Users> gem update --system Updating rubygems-update Fetching: rubygems-update-1.8.19.gem (100%) Successfully installed rubygems-update-1.8.19

4


Get Ruby on Rails in no time Installing RubyGems 1.8.19 RubyGems 1.8.19 installed Successivamente, si esegue il comando ‘gem sources -a http://gemcutter.org’: C:\Users> gem sources -a http://gemcutter.org http://gemcutter.org added to sources Ora, si esegue il comando ‘gem install rspec --no-ri --no-rdoc’: C:\Users> gem install rspec --no-ri --no-rdoc Fetching: rspec-core-2.9.0.gem (100%) Fetching: diff-lcs-1.1.3.gem (100%) Fetching: rspec-expectations-2.9.0.gem (100%) Fetching: rspec-mocks-2.9.0.gem (100%) Fetching: rspec-2.9.0.gem (100%) Successfully installed rspec-core-2.9.0 Successfully installed diff-lcs-1.1.3 Successfully installed rspec-expectations-2.9.0 Successfully installed rspec-mocks-2.9.0 Successfully installed rspec-2.9.0 5 gems installed In quarta battuta, si esegue il comando ‘gem install win32console --no-ri --no-rdoc’: C:\Users> gem install win32console --no-ri --no-rdoc Fetching: win32console-1.3.0-x86-mingw32.gem (100%) Successfully installed win32console-1.3.0-x86-mingw32 1 gem installed Quindi, si esegue il comando ‘gem install watir-webdriver --no-ri --no-rdoc’: C:\Users> gem install watir-webdriver --no-ri --no-rdoc gem install watir-webdriver --no-ri --no-rdoc Fetching: rubyzip-0.9.6.1.gem (100%) Fetching: ffi-1.0.11.gem (100%) Temporarily enhancing PATH to include DevKit... [...] Successfully installed rubyzip-0.9.6.1 [...] Successfully installed gherkin-2.7.7-x86-mingw32

5


Get Ruby on Rails in no time

Ora, si esegue il comando ‘gem install cucumber --no-ri --no-rdoc’: C:\Users> gem install cucumber --no-ri --no-rdoc Temporarily enhancing PATH to include DevKit... Building native extensions. This could take a while... [...] Fetching: cucumber-1.1.4.gem (100%) [...] Successfully installed cucumber-1.1.4 Prima della fine, si esegue il comando ‘gem install selenium-webdriver stead’: C:\Users> gem install selenium-webdriver stead Installing ri documentation for selenium-webdriver-2.19.0... Installing RDoc documentation for selenium-webdriver-2.19.0... In fine, si esegue il comando ‘gem install cucumber’: C:\Users> gem install cucumber Successfully installed cucumber-1.1.4 [...] Installing ri documentation for cucumber-1.1.4... Installing RDoc documentation for cucumber-1.1.4... Terminato l'aggiornamento di RubyGem si controlla la versione attualmente in uso: C:\Users> gem -v 1.8.16 RubyGems può anche essere scaricato da Download e lanciato con il comando: C:\Users> ruby setup.rb

Rails Si è pronti ora ad installare Rails e tutte le librerie dipendenti con l’ausilio del comando ‘gem install rails’: C:\Users>gem install rails Successfully installed rake-0.8.1

6


Get Ruby on Rails in no time Successfully installed activesupport-2.1.0 Successfully installed activerecord-2.1.0 [...] Installing RDoc documentation for activeresource-2.1.0... A termine dell’installazione per controllare che l'operazione sia andata a buon fine si può richiedere la stampa a video della versione di Rails installata sul sistema con il comando ‘rails -v ’: C:\Users>rails -v Rails 3.2.2 Rails può anche essere scaricato, nel caso in cui non viene installata qualche gems, come stand-alone packages e da li lanciato con il comando ‘gem install rails-2.2.3.gem’: C:\Users> gem install rails-3.2.2.gem Successfully installed rails-3.2.2.gem 1 gem installed Installing ri documentation for rails-3.2.2.gem... Installing RDoc documentation for rails-3.2.2.gem...

Mongrel Mongrel è Web Server scritto in Ruby da Zed Shaw. Viene utilizzato per eseguire le applicazioni web Ruby e presenta un'interfaccia standard HTTP. Per installarlo basta lanciare il comando ‘gem install mongrel’: C:\Users> gem install mongrel Fetching: gem_plugin-0.2.3.gem (100%) Fetching: cgi_multipart_eof_fix-2.5.0.gem (100%) Fetching: mongrel-1.1.5-x86-mingw32.gem (100%) Successfully installed gem_plugin-0.2.3 Successfully installed cgi_multipart_eof_fix-2.5.0 Successfully installed mongrel-1.1.5-x86-mingw32 [...] Installing RDoc documentation for mongrel-1.1.5-x86-mingw32...

SQLite Si procede ora con l'installazione di SQLite, un database leggero, ottimo per lo sviluppo; per prima cosa si accede alla pagina di download del sito ufficiale, secondariamente si scorre la

7


Get Ruby on Rails in no time pagina fino a trovare il paragrafo dal titolo "Precompiled Binaries For Windows" e si scaricano i pacchetti compressi contenenti la versione più recente di SQLite (i file usati in questa guida sono sqlite-3_6_0.zip e sqlitedll-3_6_0.zip); quindi, si decomprime il contenuto dei due pacchetti compressi nella cartella ‘C:\Ruby193\bin’. Come ultima cosa installare la libreria Ruby, che permette l'utilizzo del database SQLite, con il comando ‘gem install sqlite3-ruby’: C:\Users> gem install sqlite3-ruby Successfully installed sqlite3-ruby-1.3.3 1 gem installed Installing ri documentation for sqlite3-ruby-1.3.3... Installing RDoc documentation for sqlite3-ruby-1.3.3.... Tenendo conto che ‘sqlite3-ruby gem’ ha cambiato il suo nome a poco ‘sqlite3’ anziché l'installazione di `sqlite3-ruby`, è necessario installare ‘sqlite3.’ Aggiorna le dipendenze di conseguenza con il comando ‘gem install sqlite3’: C:\Users> gem install sqlite3 Successfully installed sqlite3-1.3.5-x86-mingw32 1 gem installed Installing ri documentation for sqlite3-1.3.5-x86-mingw32... Installing RDoc documentation for sqlite3-1.3.5-x86-mingw32...

MySQL Per istallare la libreria di Ruby per il DBMS MySQL, si deve lanciare il comando d'installazione ‘gem install mysql’: C:\Users> gem install mysql Successfully installed mysql-2.8.1-x86-mingw32 1 gem installed Installing ri documentation for mysql-2.8.1-x86-mingw32... Installing RDoc documentation for mysql-2.8.1-x86-mingw32... Naturalmente non sarà possibile interagire con il DBMS fino a quando questo non sarà stato avviato, quindi prima di interfacciarsi a MySQL tramite Ruby bisognerà controllare che il relativo processo sia in esecuzione.

PostgreSQL

8


Get Ruby on Rails in no time Si da inizio ora all'installazione di PostgreSQL, un potente database relazionale opensource che si adatta facilmente ad ogni tipo di utilizzo; per prima cosa si accede alla pagina di download PostgreSQL del sito ufficiale, in fase successiva si scorre la pagina fino a trovare "PostgreSQL one-click installers" e si scaricano i pacchetti compressi contenenti la versione più recente di PostgreSQL. Come ultima cosa si installa la libreria Ruby, che permette l'utilizzo del database PostgreSQL, con il comando ‘gem install pg’: C:\Users> gem install pg Successfully installed pg-0.13.2-x86-mingw32 1 gem installed Installing ri documentation for pg-0.13.2-x86-mingw32... Installing RDoc documentation for pg-0.13.2-x86-mingw32... Naturalmente non sarà possibile interagire con il RDBMS fino a quando questo non sarà stato avviato, quindi prima di interfacciarsi a PostgreSQL tramite Ruby bisognerà controllare che il relativo processo sia in esecuzione. Occorre anche ricordare che è buona prassi creare un utente da utilizzare in seguito per la creazione dei database sui quali insisterà l'applicazione Rails. Un quickstart potrebbe essere: 1. Collegarsi con l'utente amministratore del server PostgreSQL (su Windows utilizzando l'apposita console dei comandi); 2. Creare l'utente con createuser -D -E -R -S -P railsuser ed inserendo alla richiesta la password scelta; 3. Creare il database con createdb -E UTF8 -O railsuser; 4. Verificare nel file pg_hba.conf che sia possibile collegarsi localmente al database railsdb utilizzando una verifica password di tipo md5. Ovviamente la coppia railsuser e railsdb sono a totale discrezione dello sviluppatore. Occorrerà tenerne conto alla compilazione del database.yml

MongoDB Quando prototipazione un'applicazione è comune avere bisogno di modificare il database frequentemente e MongoDB ci permette di farlo senza la necessità di generare migrazioni e mantenere lo schema DB nello strato del modello. C'è una cartella modelli nella radice dell'applicazione che viene caricato in via fascicolo in modo da avere accesso ai vostri modelli. Per utilizzarlo c’è bisogno della ‘gem mongoid’ che si può installare lanciando il comando ‘gem install mongoid’:

9


Get Ruby on Rails in no time

C:\Users> gem install mongoid Fetching: bson-1.6.1.gem (100%) Fetching: mongo-1.6.1.gem (100%) Fetching: mongoid-2.4.6.gem (100%) Successfully installed bson-1.6.1 Successfully installed mongo-1.6.1 Successfully installed mongoid-2.4.6 [...] Installing ri documentation for bson-1.6.1... Installing ri documentation for mongo-1.6.1... Installing ri documentation for mongoid-2.4.6... Per il miglioramento delle prestazioni si dovrebbe installare anche l’estensione BSON se compatibile con il sistema, tuttavia non dipende dalla ‘gem mongoid’ se non sono compatibili. Per installare l’estensione, si deve lanciare il comando ‘gem install bson_ext’: C:\Users\cattanasio>gem install bson_ext Fetching: bson_ext-1.6.1.gem (100%) Temporarily enhancing PATH to include DevKit... Building native extensions. This could take a while... Successfully installed bson_ext-1.6.1 1 gem installed Installing ri documentation for bson_ext-1.6.1... Installing RDoc documentation for bson_ext-1.6.1... Naturalmente non sarà possibile interagire con il DBMS fino a quando questo non sarà stato avviato, quindi prima di interfacciarsi a MongoDB tramite Ruby bisognerà controllare che il relativo processo sia in esecuzione.

Git GitHub ha creato una versione open source per il controllo (VCS) che ha chiamato * Git. Creato dagli stessi tizi che hanno creato Linux, Git è responsabile per GitHub di tutto ciò che riguarda e che accade in locale sul computer. Download e installare l’ultima versione di Git for Windows.

10


Get Ruby on Rails in no time Una volta installato e creato un account su https://github.com/ si devono usare le chiavi SSH per stabilire una connessione sicura tra il computer e GitHub. La loro istituzione è abbastanza facile, ma comporta una serie di fasi. Si entra nella cartella .ssh tramite il comando ‘cd’: C:\Users> cd .ssh Per generare una nuova chiave SSH, immettere il comando qui di seguito: C:\Users\.ssh> ssh-keygen -t rsa -C "ciro.attanasio@email.cz" Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/cattanasio/.ssh/id_rsa): Premi Invio /c/Users/cattanasio/.ssh/id_rsa already exists. Overwrite (y/n)? y Enter passphrase (empty for no passphrase): password Enter same passphrase again: password Your identification has been saved in /c/Users/cattanasio/.ssh/id_rsa. Your public key has been saved in /c/Users/cattanasio/.ssh/id_rsa.pub. The key fingerprint is: 6e:20:93:31:88:4f:d1:e4:24:65:c7:4e:37:19:3c:74 ciro.attanasio@email.cz Aprire GUI Git (non dalla linea di comando di Windows), che si trova nel menu di avvio di Windows.

Figura 1. Git GUI sul menu’ avvio di windows Si va sull’interfaccia di GitHub e si fa un click su “Help” -> “Show SSH Keys” -> “Copy to ClipBoard” per copiare la Keys generata:

11


Get Ruby on Rails in no time

Figura 1. Prima esecuzione dell'applicazione Git GUI Si entra sul sito web di GitHub https://github.com/ e si fa un semplice click su “Account Settings” -> “SSH Keys” -> “Add SSH key” per inserire la Key generata

Figura 2. Prima esecuzione dell'applicazione Git GUI Ora incollarlo nel campo "Key" e fare un click su “Add Key.”

12


Get Ruby on Rails in no time

Figura 3. Prima esecuzione dell'applicazione Git GUI

Conclusioni Si controllano le gemme installate dal prompt dei comandi con l’ausilio del comando ‘gem list’: C:\Users> gem list actionmailer (3.1.3, 2.2.3) actionpack (3.1.3, 2.2.3) [...] gem_plugin (0.2.3) gherkin (2.7.1 x86-mingw32) json (1.6.3) [...] mail (2.3.0) watir-webdriver (0.4.1) [...] win32console (1.3.0 x86-mingw32) Ora, la postazione Windows è pronta per lo sviluppo in Ruby on Rails.

Creazione di un Progetto

13


Get Ruby on Rails in no time

Lo scheletro dell'applicazione Installato Ruby on Rails sul sistema si ha a disposizione un nuovo comando, ‘rails’, che permette di creare lo scheletro della nuova applicazione. Inserendo a terminale ‘rails new <percorso> <nome_applicazione>’ viene creata una cartella con lo stesso nome scelto per l'applicazione e una serie di sottocartelle e file in cui inserire il codice. Poiché tutte le applicazioni Ruby on Rails sono sviluppate partendo dallo stesso scheletro, una volta presa confidenza con lo schema di file e cartelle generate automaticamente si sara’ in grado di navigare qualsiasi applicazione Rails. Digitando ‘rails new’ sul terminale appariranno i nomi delle cartelle e dei file generati da Rails che costituiscono lo scheletro dell'applicazione: C:\Users> rails new C:\Ruby193\www\bookmark_manager create create app/controllers create app/helpers create app/models create app/views/layouts [...] create doc/README_FOR_APP create log/server.log create log/production.log create log/development.log create log/test.log run bundle install Fetching source index for http://rubygems.org/ Using rake (0.9.2.2) [...] Using i18n (0.6.0) Using activemodel (3.1.3) [...] Using thor (0.14.6) Using railties (3.1.3) Using coffee-rails (3.1.1) Using jquery-rails (1.0.19) [...] Using sqlite3 (1.3.5) Using uglifier (1.2.0)

14


Get Ruby on Rails in no time

Fin da subito si ha a disposizione un'applicazione funzionante, anche se priva delle funzionalità che si aggiungeranno nel corso della guida. Spostandosi all'interno della cartella appena creata, usando il comando ‘cd’, si puo’ avviare il Web Server, incluso nel progetto, con il comando ‘rails server’. Si entra nella cartella: C:\Users> cd C:\Ruby193\www\bookmark_manager Si lancia il Web Server: C:\Ruby193\www\bookmark_manager> rails server => Booting WEBrick => Rails 3.1.3 application starting in development on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server [2011-12-20 17:21:59] INFO WEBrick 1.3.1 [2011-12-20 17:21:59] INFO ruby 1.8.7 (2011-06-30) [i386-mingw32] [2011-12-20 17:21:59] INFO WEBrick::HTTPServer#start: pid=2116 port=3000 Se si punta il browser all'indirizzo http://0.0.0.0:3000, oppure all’indirizzo http://localhost:3000, è possibile visualizzare la pagina di benvenuto della nuova applicazione in Ruby on Rails.

15


Get Ruby on Rails in no time

Figura 1. Prima esecuzione dell'applicazione Con il comando ‘rails server’ si è attivato il Web Server WEBrick, che permette di interagire con l'applicazione attraverso un browser durante tutta la fase di sviluppo. Per arrestare il server basta semplicemente tornare al terminale e premere CTRL+C, di seguito cosa compare a video: [2011-12-20 17:29:45] INFO going to shutdown ... [2011-12-20 17:29:45] INFO WEBrick::HTTPServer#start done. Exiting Terminate batch job (Y/N)? y C:\Ruby193\www\bookmark_manager>

La console A questo punto si è pronti per fare la conoscenza con la console di Ruby on Rails digitando il comando ‘rails console’: C:\Ruby193\www\bookmark_manager> rails console Loading development environment (Rails 3.2.1) irb(main):001:0> La console di Ruby on Rails permette di interagire con l’applicazione tramite riga di comando per verificare il corretto funzionamento di sezioni particolari del codice o per manipolare i dati gestiti dall'applicazione. Dalla console che si è appena avviata si provi a digitare ‘Rails::Info’ seguito da invio. Si ottiene un elenco delle caratteristiche dell'ambiente che stiamo utilizzando: irb(main):001:0> Rails::Info Ruby version 1.9.3 (i386-mingw32) RubyGems version 1.8.16 Rack version 1.4 Rails version 3.2.1 [...] Active Support version 3.2.1 Application root C:/Ruby193/www/bookmark_manager [...] Database adapter sqlite3 Database schema version 0

16


Get Ruby on Rails in no time irb(main):001:0> Come si è appena visto, tramite console si ha accesso ai comandi di Rails e, nel corso della guida, si vedra’ come utilizzare questo strumento per dialogare con l'applicazione e toccare con mano i progressi nello sviluppo. Per disattivare la console è sufficiente premere la combinazione CTRL+D. In questa fase si è creato lo scheletro dell'applicazione, avviato il server da utilizzare durante lo sviluppo e interagito con l'applicazione tramite la console di Ruby on Rails. Si sono incontrati alcuni comandi che è bene ricordare: ● rails new bookmark_manager - per la creazione di una nuova applicazione Rails; ● rails server - per avviare il server Web (si disattiva premendo CTRL+C); ● rails console per avviare la console Rails (si disattiva premendo CTRL+D); Ci si deve sempre ricordare di posizionarci nella cartella base del progetto Rails su cui si sta lavorando, prima di eseguire qualsiasi comando.

Creare risorse tramite scaffold I bookmark sono gli oggetti che si vogliono gestire con un’applicazione. Ogni bookmark è definito da un URL, un titolo e una descrizione; dovrà essere possibile creare nuovi bookmark, modificare quelli già inseriti e cancellare quelli che non ci interessano più. Tornando al terminale. Si utilizzi l'istruzione generate scaffold per creare la nuova risorsa Bookmark indicando direttamente da riga di comando gli attributi che ogni bookmark deve esporre e il relativi tipo ‘rails generate scaffold bookmark url:string title:string description:text’: C:\Ruby193\www\bookmark_manager> rails generate scaffold bookmark url:string title:string description:text invoke active_record create db/migrate/20111221125123_create_bookmarks.rb create app/models/bookmark.rb invoke test_unit create test/unit/bookmark_test.rb create test/fixtures/bookmarks.yml route resources :bookmarks invoke scaffold_controller create app/controllers/bookmarks_controller.rb invoke erb create app/views/bookmarks

17


Get Ruby on Rails in no time create create create create create invoke create invoke create invoke create invoke invoke create invoke create invoke create

app/views/bookmarks/index.html.erb app/views/bookmarks/edit.html.erb app/views/bookmarks/show.html.erb app/views/bookmarks/new.html.erb app/views/bookmarks/_form.html.erb test_unit test/functional/bookmarks_controller_test.rb helper app/helpers/bookmarks_helper.rb test_unit test/unit/helpers/bookmarks_helper_test.rb assets coffee app/assets/javascripts/bookmarks.js.coffee scss app/assets/stylesheets/bookmarks.css.scss scss app/assets/stylesheets/scaffolds.css.scss

Sempre dal terminale si digiti ‘rake db:migrate’ per preparare il database e la tabella necessaria alla gestione della risorsa: C:\Ruby193\www\bookmark_manager> rake db:migrate == CreateBookmarks: migrating ============================================= -- create_table(:bookmarks) -> 0.0156s == CreateBookmarks: migrated (0.0156s) ====================================== Se si ispeziona la tabella bookmarks appena creata, si trovano tutte le colonne che sono state richieste con l'istruzione generate scaffold. Si avvii ora il Web Server con il comando ‘rails server’ e si punti il browser all'indirizzo http:// localhost:3000/bookmarks/new per visualizzare la pagina necessaria alla creazione di un nuovo bookmark.

18


Get Ruby on Rails in no time

Figura 2. La pagina di creazione di un nuovo bookmark Questa pagina, come le altre che si vedranno fra poco, è stata generata automaticamente da Ruby on Rails seguendo le indicazioni del comando scaffold. È stato creato il form che contiene i campi url, title e description e sono stati utilizzati tipi di input HTML differenti a seconda del tipo di dato (textfield per il tipo string e textarea per il tipo text). Si valorizino i campi del form inserendo URL, titolo e descrizione per il sito http://ruby.html.it e premiamo il pulsante Create. L'applicazione salverà i dati nel database e mostrerà la pagina ‘http://localhost:3000/bookmarks/1’, contenente i dati del bookmark appena inserito. Selezionando il link Back si possono visualizzare tutti i bookmark inseriti, e per ogni bookmark i link per visualizzarlo, modificarlo e cancellarlo (Show, Edit, Destroy).

Convalidare i dati Tipicamente un'applicazione riceve informazioni tramite la compilazione di form da parte degli utenti oppure grazie alla trasmissione di dati tramite Web Service. In ogni caso è utile poter verificare che questi dati siano stati immessi in modo corretto prima di salvarli sul database, per evitare malfunzionamenti e problemi di sicurezza. Per questo si possono stabilire delle regole. Si individuino ad esempio alcune regole per controllare i dati relativi ai nostri bookmark: ● Ogni bookmark inserito deve avere un URL e un titolo ● Ogni bookmark ha un URL differente ● L'URL e il titolo di ogni bookmark non devono essere più lungi di 256 caratteri

19


Get Ruby on Rails in no time La verifica della correttezza dei dati è chiamata validazione e la validazione si svolge all'interno del modello, dove si descrive il comportamento di una risorsa e e si gestisce l'interazione con la tabella abbinata. Si individui il file che descrive il modello della risorsa Bookmark, ‘app/models/bookmarks.rb’. Secondo la convenzione delle applicazioni Rails, ogni modello ha un corrispondente file nella cartella app/models che ha lo stesso nome del modello che descrive. Si apra il file con un editor di testi e lo si modifichi come segue: class Bookmark < ActiveRecord::Base validates_presence_of :url, :title, :message => "Ogni bookmark inserito deve avere un URL e un titolo" validates_uniqueness_of :url, :message => "Due bookmark devono avere URL differenti" validates_length_of :url, :title, :maximum => 256, :message => "L'URL e il titolo di non devono essere piu' lungi di 255 caratteri" end

Le validazioni si esprimono nel formato: <tipo di validazione><attributi a cui applicare la validazione> :message => <messaggio di errore> Un record è considerato valido e salvato sul database se verifica tutte le regole specificate; se anche solo una regola non viene rispettata, il salvataggio non viene effettuato. Si salvi il file appena modificato, si avvii il Web server e si punti il browser alla pagina per la creazione di un nuovo bookmark (‘http://localhost:3000/bookmarks/new’). Ora, si provi ad inserire un bookmark con un URL già presente in archivio e titolo e descrizione a piacere. Prima si è stabilito che questo inserimento non è valido. Premendo quindi il pulsate Create l'applicazione si rifiuterà di salvare il bookmark, evidenziando in rosso il campo URL, che non ha superato la validazione e riportando il messaggio di errore che si è indicato nel modello.

20


Get Ruby on Rails in no time

Figura 3. Esempio di form non validato Il form, generato tramite scaffold, riporta l'errore di validazione riscontrato durante l'inserimento dei dati ed evidenzia automaticamente il campo interessato dall'errore. Questo capita anche quando sono presenti più errori. Se ad esempio si prova a salvare un bookmark lasciando in bianco i campi url e title, entrambi obbligatori, il sistema evidenzerà in rosso entrambe le violazioni. Come si è detto la validazione avviene a livello di modello e non sulla pagina del form. Questo perché sono sempre separati i comportamenti del sistema dallo strato di presentazione. Non importa se si sono inseriti i dati da form HTML o da Web Service o da console, i controlli vengono effettuati in ogni caso nello stesso modo. Si consideri come esempio l’inserimento di un nuovo bookmark tramite console Rails. Si fermi il Web Server (CTRL+C) e si avvii la console con il comando ‘rails console’: C:\Ruby193\www\bookmark_manager> rails console Loading development environment (Rails 3.2.1) irb(main):001:0> Ora, si crei un nuovo bookmark con URL, titolo e descrizione non compilati da console: irb(main):001:0> bookmark = Bookmark.new

21


Get Ruby on Rails in no time => #<Bookmark id: nil, url: nil, title: nil, description: nil, created_at: nil, updated_at: nil> Ci si trova nella stessa situazione del form vuoto. Si indichi URL e titolo del nuovo bookmark inserendo un URL già utilizzato: irb(main):001:0> bookmark.url = "http://ruby.html.it" => "http://ruby.html.it" irb(main):001:0> bookmark.title = "Tutto sul mondo Ruby" => "Tutto sul mondo Ruby" Si provi ora a salvare il bookmark: irb(main):001:0> bookmark.save => false Il valore false restituito indica che il salvataggio non è andato a buon fine. Sono riportati di seguito gli errori che impediscono il salvataggio: irb(main):001:0> #<ActiveRecord::Errors:0x249f0b4 @errors={"url"=>["Due bookmark devono avere URL differenti"]}, @base=#<Bookmark id: nil, url: "http://ruby.html.it", title: "Tutto sul mondo Ruby", description: nil, created_at: nil, updated_at: nil>> ‘@errors’ indica il campo che ha generato l'errore e il relativo messaggio (lo stesso che si è visto comparire in testa al form).

Il flusso dell'applicazione Il pattern MVC fornisce delle linee guida per la suddivisione del codice in tre aree di competenza: ● L'interazione con il database è di competenza del modello ● L'interazione con l'utente è di competenza delle viste ● La logica applicativa è di competenza del controller, che si occupa anche di fare da collante fra modello e viste Lo scheletro dell'applicazione Rails e i file creati dal generatore scaffold seguono queste linee guida, così da permettere una navigazione agevole del codice; i modelli sono conservati nella cartelle app/models, le viste nella cartella app/views e i controller nella cartella app/controllers. Si avvi il server dal terminale e si punti il browser all'indirizzo http://0.0.0.0:3000/bookmarks per ottenere l'elenco dei bookmark gestiti dall'applicazione. Riassumendo quello che è successo da quando si è richiesto la pagina a quando la pagine è stata visualizzata: 1. Il browser ha richiesto all'applicazione una pagina indicandone l'indirizzo

22


Get Ruby on Rails in no time 2. L'applicazione ha ricevuto la richiesta, interpreta l'indirizzo per decidere quale controller e quale action attivare 3. L'action ha estratto tutti i bookmark presenti nel database e li ha comunicati alla vista 4. la vista ha visualizzato i bookmark generando la pagina HTML 5. la pagina HTML è stata inviata al browser per la visualizzazione Ora, si provi a ripercorrere questi step tenendo conto del codice della applicazione. Capire il flusso interno dell'applicazione è utile per individuare il punto su cui intervenire per un eventuale modifica del codice, oltre che a comprendere i meccanismi interni di Rails. Una volta ricevuta una richiesta dal client, l'applicazione deve individuare il controller e la action da attivare. Per effettuare questo collegamento l'applicazione consulta le regole di routing che conosce estraendole dal file di configurazione config/routes.rb. Per avere una panoramica delle richieste attualmente riconosciute dalla applicazione Rails e delle action attivate per ognuna di queste si lanci dal terminale (dopo esserci assicurati di aver disattivato la console Rails) il comando ‘rake routes’. C:\Ruby193\www\bookmark_manager>rake routes bookmarks GET /bookmarks(.:format) {:controller=>"bookmarks", :a ction=>"index"} POST /bookmarks(.:format) {:controller=>"bookmarks", :a ction=>"create"} new_bookmark GET /bookmarks/new(.:format) {:controller=>"bookmarks", :a ction=>"new"} edit_bookmark GET /bookmarks/:id/edit(.:format) {:controller=>"bookmarks", :a ction=>"edit"} bookmark GET /bookmarks/:id(.:format) {:controller=>"bookmarks", :a ction=>"show"} PUT /bookmarks/:id(.:format) {:controller=>"bookmarks", :a ction=>"update"} DELETE /bookmarks/:id(.:format) {:controller=>"bookmarks", :a ction=>"destroy"} C:\Ruby193\www\bookmark_manager> Il risultato ottenuto a terminale indica in forma tabellare di tutte le regole di routing riconosciute dalla nostra applicazione, indicando in ordine: 1. un'abbreviazione mnemonica della regola 2. il metodo HTTP da utilizzare per la richiesta 3. il path della richiesta

23


Get Ruby on Rails in no time 4. il controller e l'action da attivare Se si apre il file ‘config/routes.rb’ con un editor di testo si nota l'istruzione ‘map.resources :bookmarks’, inserita automaticamente dal generatore scaffold, che indica la presenza della risorsa Bookmarks e istruisce l'applicazione sulla presenza delle richieste necessarie per la manipolazione della risorsa. Si apra quindi il file ‘app/controllers/bookmarks_controller.rb’ e ci si focalizzi sulla action index: def index @bookmarks = Bookmark.find(:all) respond_to do |format| format.html # index.html.erb end end La prima istruzione che si incotra è ‘@bookmarks = Bookmark.find(:all)’, che estrae tutti i bookmark salvati nel database e li rende disponibili come array nella variabile ‘@bookmarks’. Bookmark è il modello e quindi già nella prima istruzione si puo’ vedere come il controller chiami in causa il modello per accedere ai dati persistenti nel database. Dianso ora uno sguardo al codice che genera la pagina HTML. Secondo la convenzione Rails la vista abbinata ad una action ha come percorso: app/views/<nome_controller>/<nome_vista>.<formato>.<sistema_template> In questo caso ci si focalizza alla vista abbinata al controller bookmarks, action index, formato HTML con sistema di template erb (il sistema di template standard di Rails); si apra quindi con l'editor il file ‘app/views/bookmarks/index.html.erb’. Il file contiene codice HTML, intervallato da codice Ruby che, racchiuso fra i delimitatori ‘<%’ e ‘%>’, viene interpretato al momento della generazione della pagina. Una soluzione familiare a chi ha già dimestichezza con altri linguaggi lato server. Esistono due tipi di tag per l'inclusione di codice Ruby; il tag ‘<%=...%>’ viene utilizzato quando il risultato dell'esecuzione del codice Ruby deve essere stampato all'interno dell'HTML, mentre il tag ‘<%...%>’ viene usato per cicli e condizioni come il for nella pagina che si sta osservando. Nella vista è presente la variabile ‘@bookmarks’ che non è definita all'interno della vista, ma che è stata definita nel controller. La vista ha quindi utilizzato il risultato espresso dal controller (l'estrazione dei dati dal database) per popolare la pagina HTML e restituirla al browser. Questa

24


Get Ruby on Rails in no time suddivisione dei compiti è tipica del pattern MVC: il codice che ha estratto i dati dal database si trova nel controller e non nella vista. Se per applicazioni semplici come questa, l'utilizzo del pattern MVC sembra un esercizio di stile, al crescere dell'applicazione questo approccio favorisce la manutenibilità.

Modificare controller e viste Le pagine HTML generate automaticamente dal comando ‘scaffold’ permettono di interagire con la risorsa Bookmark tramite browser; si deve però ammettere che queste pagine, seppur funzionali, non sono molto pratiche da utilizzare. Si provi ora ad eseguire due interventi per rendere più piacevole la pagina di elenco dei bookmark (action index del controller bookmarks): ● I bookmark devono apparire in ordine alfabetico per titolo ● Invece di visualizzare i dati in una tabella vogliamo farli apparire in un elenco puntato Prima di intervenire sul codice si cerchi di capire dove si deve intervenire: ● perché i bookmark appaiano in ordine alfabetico bisogna intervenire sull'istruzione che estrae i dati dal database così da indicare l'ordinamento voluto. Questo tipo di istruzione è presente nel controller; ● modificare la modalità di visualizzazione dei bookmark significa invece intervenire sulla parte che si occupa di generare la pagina HTML, quindi sulla vista. Si parte modificando il file ‘app/controllers/bookmarks_controller.rb’: l'istruzione che si occupa di recuperare i dati è Bookmark.find(:all). Leggendo il frammento di codice è già possibile capirne le differenti sezioni: Bookmark - dal modello Bookmark find - trova :all - tutto A questa istruzione si deve aggiungere l'ordinamento, e lo si fa in questo modo: Bookmark - dal modello Bookmark find - trova :all - tutto :order => 'title' - ordinato per campo title (title è uno dei campi della risorsa bookmark) Si ottiene l'istruzione: Bookmark.find(:all, :order => "title")

25


Get Ruby on Rails in no time

Si sostituisce questa istruzione a quella attuale e si richiama la pagina ‘http://0.0.0.0:3000/ bookmarks’. Ora i bookmark sono mostrati in ordine alfabetico, questo perché la vista mostra i risultati che il controller ha preparato, già in ordine, nella variabile @bookmarks. Per il secondo intervento, sull'aspetto della pagina Web, si deve modificare la vista. Si apre il file ‘app/views/bookmarks/index.html.erb’ e si sosttuisce al codice esistente quello riportato qui sotto: <h1>Listing bookmarks</h1> <ul> <% for bookmark in @bookmarks %> <li> <strong><%= bookmark.title %></strong><br /> <%= bookmark.description %><br /> <small> <%= link_to 'Show', bookmark %> | <%= link_to 'Edit', edit_bookmark_path(bookmark) %> | <%= link_to 'Destroy', bookmark, :confirm => 'Are you sure?', :method => :delete %> </small> </li> <% end %> </ul> <br /> <%= link_to 'New bookmark', new_bookmark_path %> Il codice non è cambiato poi molto: dopo il titolo <h1> si incontra un ciclo for racchiuso tra ‘<%’’ e ‘%>’ (codice Ruby che non produce testo). Il ciclo che viene eseguito per ogni bookmark dell'elenco @bookmarks. Ad ogni iterazione la variabile bookmark (al singolare e senza la @) assumerà il valore di uno dei bookmark contenuti nella variabile @bookmarks. All'interno del ciclo si trovano alcuni tag <%= %>, che producono il testo da inserire nella pagina; ‘<%= bookmark.title %>’ è il titolo del bookmark, mentre ‘<%= bookmark.description %>’ ne rappresenta la descrizione. Si aggiunge un link utilizzando l'indirizzo del bookmark come URL e il titolo come testo. Ruby on Rails mette a disposizione un'istruzione particolare per la costruzione dei link, che si vede utilizzata anche nella pagina che stiamo analizzando: link_to.

26


Get Ruby on Rails in no time L'istruzione link_to prevede due tipi di link: � link assoluto verso una risorsa esterna (ad esempio una pagina di un sito internet) � link verso l'action di un controller dell'applicazione L’ esempio ricade ovviamente nel primo caso. Per tanto si utilizza la sintassi: link_to <etichetta del link>, <url> Che in questo caso diventa: <h1>Listing bookmarks</h1> <ul> <% for bookmark in @bookmarks %> <li> <strong><%= link_to bookmark.title, bookmark.url %></strong><br /> Ricaricando la pagina di elenco dei bookmark si ottiene quindi:

Figura 4. Risultato finale

Aspetto e Interfaccia I layout

27


Get Ruby on Rails in no time Le pagine di una stessa applicazione Web condividono spesso alcuni elementi grafici; anche sezioni differenti dell'applicazione tendono a mantenere un aspetto coerente. Quindi non è insolito che intere porzioni di codice HTML siano sempre uguali, come l'intestazione e il fondo della pagina. Rails mette a disposizione i layout per definire delle "cornici" condivise fra differenti viste, nelle quali inseriamo solamente il codice particolare di una singola view.

Figura 5. Risultato finale Rails abbina automaticamente ad ogni controller, per tutte la action presenti all'interno del controller, il layout presente nella cartella app/views/layouts avente lo stesso nome del controller; così per il controller BookmarksController viene abbinato il layout ‘app/views/layouts/ bookmarks.html.erb’. Ecco un esempio di come si presenta il layout: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/ xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

28


Get Ruby on Rails in no time <head> <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> <title>Bookmarks: <%= controller.action_name %></title> <%= stylesheet_link_tag 'scaffold' %> </head> <body> <p style="color: green"><%= flash[:notice] %></p> <%= yield %> </body> </html> Il comando che più ci interessa è ‘<%= yield %>’, che indica la posizione in cui andrà ad essere inserito il codice specifico di ogni vista. Se necessario è possibile scegliere le viste a cui vogliamo applicare il layout: Operazione

Descrizione

layout "standard", :only => :index

applica il layout solo alla vista della action index

layout "standard", :except => :show

applica il layout a tutte le viste tranne che a quella della action show

Il layout creato ha estensione html.erb, questo indica, come per le viste, che il layout è da utilizzare per la generazione delle pagine HTML e che il sistema di template da utilizzare è erb. Erb permette di introdurre componenti dinamiche all'interno del template, così come si farebbe in una vista. Una pratica diffusa ad esempio è di inserire per il tag title del layout il seguente codice: <title><%= @page_title %></title>

I Partial Un altro utile meccanismo per tenere in ordine il codice delle viste è rappresentato dai partial. Con i partial è possibile estrarre una porzione di codice da una vista e salvarla in un file esterno; il codice estratto nel partial può essere condiviso da differenti viste e può essere tanto codice HTML statico quanto codice dinamico erb.

29


Get Ruby on Rails in no time

Si apra il file ‘app/views/bookmarks/index.html.erb’; da questo file si tagli il codice per la visualizzazione dei singoli bookmark e incolliamolo in un nuovo file dal nome ‘app/views/ bookmarks/_single_bookmark.html.erb’; il file ‘_single_bookmark.html.erb’ è un partial (i partial si riconoscono per l'underscore come suffisso del nome del file che li contengono) e contiene solo il seguente codice: <li> <strong><%= link_to bookmark.title, bookmark.url %></strong><br /> <%= bookmark.description %><br /> Tag: <% for tag in bookmark.tag_list %> <%= link_to tag, :controller => "tags", :action => "show", :id => tag %> <% end %><br /> <small> <%= link_to 'Show', bookmark %> | <%= link_to 'Edit', edit_bookmark_path(bookmark) %> | <%= link_to 'Destroy', bookmark, :confirm => 'Are you sure?', :method => :delete %> </small> </li> Nella vista index.html.erb si sostituisce il codice che è stato estratto con l'istruzione per l'inclusione del partial: <h1>Listing bookmarks</h1> <ul> <% for bookmark in @bookmarks %> <%= render :partial => "single_bookmark", :locals => { :bookmark => bookmark } %> <% end %> </ul> <br /> <%= link_to 'New bookmark', new_bookmark_path %> Si è detto che uno stesso partial può essere utilizzato da viste differenti; modifichiamo allora la vista ‘app/views/tags/show.html.erb’ per includere il partial così come fatto per la vista appena modificata. Poiché il parziale non risiede nella stessa cartelle della vista, ‘app/views/tags’ ma nella cartella ‘app/views/bookmarks’ sarà necessario indicare il percorso completo del partial:

30


Get Ruby on Rails in no time

<h1>Listing bookmarks with tag "<%= @tag %>"</h1> <ul> <% for bookmark in @bookmarks %> <%= render :partial => "bookmarks/single_bookmark", :locals => { :bookmark => bookmark } %> <% end %> </ul> <br /> <%= link_to 'New bookmark', new_bookmark_path %> Accedendo con il browser alle pagine di elenco dei bookmark e visualizzazione dei bookmark per un determinato tag, si osserva come il partial viene utilizzato per la generazione delle differenti viste. L'utilizzo dei partial è fortemente consigliato quando si verifica una delle seguenti situazioni: ● il codice di una vista è corposo, ed è difficile individuare le differenti parti della pagina; estraendo porzioni di codice in partial esterni il codice della vista risulterà più chiaro ● differenti viste, anche di controller differenti, hanno porzioni di codice in comune; estraendo queste parti di codice in un partial esterno da includere nelle differenti viste si concentra in un solo posto codice che di fatto è ripetuto in differenti parti dell'applicazione È bene ricordare che è necessario rendere disponibile al partial tutte le variabili di cui ha bisogno per la sua corretta renderizzazione; un partial non condivide automaticamente le variabili con la vista che lo utilizza. Per rendere disponibili le variabili è necessario utilizzare il parametro :locals => come nell'esempio precedente.

Immagini, JavaScript e Fogli di Stile Le viste di norma utilizzano differenti asset per la corretta visualizzazione della pagina HTML (fogli di stile, immagini, file Javascript); Rails mette a disposizione una serie di tag specializzati per l'inclusione di questi asset nella pagina, e prepara una serie di cartelle nelle quali depositare i relativi file. Durante la creazione dello scheletro dell'applicazione Rails sono state preparate alcune cartelle dedicate ad ospitare immagini, javascript e css: ● public/images - per le immagini ● public/javascripts - per i javascript

31


Get Ruby on Rails in no time ●

public/stylesheets - per i fogli di stile

L'applicazione di prova che abbiamo creato contiene già alcuni file all'interno di queste cartelle: public/images contiene il logo di Ruby on Rails che appare nella schermata di benvenuto, public/javascripts contiene i file del framework javascript Prototype (integrato in Rails) e public/ stylesheets contiene il foglio di stile scaffold.css, generato automaticamente dal comando scaffold utilizzato per la creazione della risorsa Bookmark. Depositando immagini, javascript e fogli di stile nelle rispettive cartelle, abbiamo accesso ad alcuni comandi dedicati alla loro inclusione nelle viste. Supponiamo di aggiungere alle nostre cartelle una immagine dal nome immagine.gif, un file Javascript dal nome javascript.js e un foglio di stile dal nome stile.css, ognuno nella cartella predisposta per il diverso tipo di file. Per includere l'immagine è possibile utilizzare il comando: <%= image_tag("immagine.gif") %> che produrrà il codice HTML: <img src="immagine.gif" /> È possibile specificare alcuni attributi tipici del tag <img>, come alt, width, height: <%= image_tag("immagine.gif", size => "16x16", :alt => "Immagine") %> produce il codice HTML: <img src="imagine.gif" width="16" height="16" alt="Immagine" /> Per includere il file javascript è sufficiente inserire il comando: <%= javascript_include_tag 'javascript'%> Per includere il foglio di stile possiamo invece utilizzare il comando: <%= stylesheet_link_tag 'stile' %> Per il tag di inclusione del foglio di stile l'opzione :media permette di specificare il media al quale il foglio di stile è dedicato; inserendo il codice:

32


Get Ruby on Rails in no time

<%= stylesheet_link_tag 'stile', :media => "print" %> Si otterrà il codice HTML: <link href="stile.css" media="print" rel="stylesheet" type="text/css" /> È possibile organizzare i file in cartelle e sottocartelle, ad esempio creare una cartella images/ avatars, e specificare la sottocartella nel tag: <%= image_tag("avatars/immagine.gif") %>

Heroku Definizione Heroku si puo’ definire un cloud application platform che permette il deploy di app in modo veloce grazie all'utilizzo della gemma Heroku, inutile dire che questa attività è strettamente legata all'uso di GIT.

Installazione Per installarlo basta lanciare il comando ‘gem install heroku’: C:\Users> gem install heroku Fetching: rest-client-1.6.7.gem (100%) Fetching: launchy-2.0.5.gem (100%) Fetching: heroku-2.21.0.gem (100%) Successfully installed rest-client-1.6.7 Successfully installed launchy-2.0.5 Successfully installed heroku-2.21.0 3 gems installed Installing ri documentation for rest-client-1.6.7... Installing ri documentation for launchy-2.0.5... Installing ri documentation for heroku-2.21.0... Installing RDoc documentation for rest-client-1.6.7... Puo capitare che sulle operazioni si riceva un messaggio di errore simile a questi:

33


Get Ruby on Rails in no time ERROR: While generating documentation for rest-client-1.6.7 ... MESSAGE: error generating C:/Ruby193/lib/ruby/gems/1.9.1/doc/rest-client-1 .6.7/rdoc/README_rdoc.html: incompatible encoding regexp match (UTF-8 regexp wit h IBM437 string) (Encoding::CompatibilityError) ... RDOC args: --op C:/Ruby193/lib/ruby/gems/1.9.1/doc/rest-client-1.6.7/rdoc li b README.rdoc history.md --title rest-client-1.6.7 Documentation --quiet Agigornando rubygems il problema si risolve. Si puo fare digitando quanto segue nella riga di comando: C:\Users> gem update --system Updating rubygems-update Fetching: rubygems-update-1.8.21.gem (100%) Successfully installed rubygems-update-1.8.21 Installing RubyGems 1.8.21 RubyGems 1.8.21 installed Per installarlo nuovamente basta lanciare il comando ‘gem install heroku’: C:\Users> gem install heroku Successfully installed heroku-2.23.0 1 gem installed Installing ri documentation for heroku-2.23.0... Installing RDoc documentation for heroku-2.23.0... Se si vuole contralare che l'operazione sia andata a buon fine si puo’ chiedere una stampa a video tramite il comando ‘heroku’: C:\Users> heroku Usage: heroku COMMAND [--app APP] [command-specific-options] Primary help topics, type "heroku help TOPIC" for more details: addons # manage addon resources apps # manage apps (create, destroy) auth # authentication (login, logout) config# manage app config vars domains # manage custom domains logs # display logs for an app ps # manage processes (dynos, workers) releases # view release history of an app

34


Get Ruby on Rails in no time run # run one-off commands (console, rake) sharing # manage collaborators on an app

Gemme Bundler Permette la creazione e la distribuzione di Gems. Bundler e Ruby puro con poche dipendenze. Per installato si puo usare un tipico comando ‘gem install bundler’: C:\Users> gem install bundler Fetching: bundler-1.1.3.gem (100%) Successfully installed bundler-1.1.3 1 gem installed Installing ri documentation for bundler-1.1.3... Installing RDoc documentation for bundler-1.1.3...

Thin Thin è un Web Server Ruby che contiene tre delle migliori librerie Ruby nella storia del web: ● ● ●

Il parser Mongrel, la radice della velocità e della sicurezza; Event Machine, una libreria I / O di rete ad altissima scalabilità, prestazione e stabilità; Rack, una interfaccia minimale tra i quadri webserver e Ruby.

Questo lo rende, con tutta probabilità, il più sicuro, stabile, veloce ed estensibile Web Server di Ruby mai costruito e facile da usare attraverso la sua gemma. Tenedo conto che I’installazione dal repository git non funziona nella versione 1.9.3, si rende necessario lanciare il comando ‘gem install eventmachine --pre’: C:\Users> gem install eventmachine --pre Fetching: eventmachine-1.0.0.beta.4.1-x86-mingw32.gem (100%) Successfully installed eventmachine-1.0.0.beta.4.1-x86-mingw32 1 gem installed Installing ri documentation for eventmachine-1.0.0.beta.4.1-x86-mingw32... Installing RDoc documentation for eventmachine-1.0.0.beta.4.1-x86-mingw32... Per installare Thin basta invece lanciare il comando ‘gem install thin’:

35


Get Ruby on Rails in no time C:\Users> gem install thin Fetching: thin-1.3.1.gem (100%) Temporarily enhancing PATH to include DevKit... Building native extensions. This could take a while... Successfully installed thin-1.3.1 1 gem installed Installing ri documentation for thin-1.3.1... Installing RDoc documentation for thin-1.3.1...

Taps Il progetto Taps fornisce un veloce, facile, single-step modo per ottenere basi di dati di qualsiasi dimensione dentro e fuori Heroku. Taps consente di spingere e tirare i database dal sistema locale (o un altro ambiente di hosting) direttamente da e verso database del Heroku app, la riga di comando Heroku utilizza lo strumento Taps internamente per eseguire trasferimenti di database. Per installarlo basta lanciare il comando ‘gem install taps’: C:\Users> gem install taps Fetching: sequel-3.20.0.gem (100%) Fetching: sinatra-1.0.gem (100%) Fetching: taps-0.3.23.gem (100%) Successfully installed sequel-3.20.0 Successfully installed sinatra-1.0 Successfully installed taps-0.3.23 3 gems installed Installing ri documentation for sequel-3.20.0... Installing ri documentation for sinatra-1.0... Installing ri documentation for taps-0.3.23... Installing RDoc documentation for sequel-3.20.0... Installing RDoc documentation for sinatra-1.0... Installing RDoc documentation for taps-0.3.23...

Foreman La foreman gem è stata progettata da David Dollar (@ ddollar) del team Heroku. Foreman consente di descrivere un insieme di processi necessari per eseguire l'applicazione. È quindi possibile eseguire questi processi di sviluppo, su Heroku, o quando viene distribuito in altri server. Per installarlo basta lanciare il comando ‘gem install foreman’:

36


Get Ruby on Rails in no time

C:\Users> gem install foreman Successfully installed foreman-0.40.0 1 gem installed Installing ri documentation for foreman-0.40.0... Installing RDoc documentation for foreman-0.40.0...

Sinatra Definizione Sinatra è un web "micro-framework". Ciò significa che dà ciò che serve per rendere fruibili le applicazioni web senza un sacco di cose extra.

Installazione L’installazione di Sinatra è facile come qualsiasi altra gemma. Sinatra ha alcune dipendenze, ma niente di importante e non si dovrebero avere problemi durante l'installazione su qualsiasi piattaforma. Aprire un prompt dei comandi e digitare ’gem install serialport’: C:\Users> gem install serialport Fetching: serialport-1.0.4.gem (100%) Temporarily enhancing PATH to include DevKit... Building native extensions. This could take a while... Successfully installed serialport-1.0.4 1 gem installed Installing ri documentation for serialport-1.0.4... Installing RDoc documentation for serialport-1.0.4... Quindi digitare ‘gem install sinatra’: C:\Users> gem install sinatra Successfully installed sinatra-1.3.2 1 gem installed Installing ri documentation for sinatra-1.3.2... Installing RDoc documentation for sinatra-1.3.2... In fine ‘gem install rack ': C:\Users> gem install rack

37


Get Ruby on Rails in no time Successfully installed rack-1.4.1 1 gem installed Installing ri documentation for rack-1.4.1... Installing RDoc documentation for rack-1.4.1... Si dovrebbe avere tutta la roba installata e necessario eseguire il programma.

Creazione di un Progetto Per cominciare a creare un'applicazione Sinatra si deve creare una cartella contenente un file Ruby con il codice dell'applicazione. Dal terminale, digitare nell’ordine: C:\Users> mkdir C:\Ruby193\www\sinatra-app C:\Users> cd C:\Ruby193\www\sinatra-app C:\Ruby193\www\sinatra-app> touch website.rb Aprire il nuovo file creato 'website.rb' con un editor di testo e immettere il seguente codice: require 'sinatra' get '/' do "This is Sinatra" end Questa è un esempio di applicazione base di Sinatra. Le prime due righe contengono le librerie 'Sinatra’ per fare il lavoro pesante. La sezione successiva spiega a Sinatra come rispondere a una richiesta 'get'. In particolare, gli si dice cosa fare quando l'url principale (il percorso del '/') viene richiesto. In questo esempio, Sinatra restituisce solo la stringa "This is Sinatra". Questo è ciò che appare nel browser quando l'url principale dell'applicazione viene richiesto. Per vederlo in azione, tornare al terminale ed eseguire l'applicazione Sinatra utilizzando il seguente comando: C:\Ruby193\www\sinatra-app> ruby website.rb Si dovrebbe ottenere la risposta: == Sinatra/1.3.2 has taken the stage on 4567 for development with backup from Thin >> Thin web server (v1.3.1 codename Triple Espresso) >> Maximum connections set to 1024

38


Get Ruby on Rails in no time >> Listening on 0.0.0.0:4567, CTRL+C to stop Questo sta dicendo che il webserver (chiamato WEBrick) è avviato e sta ascoltando l'applicazione sulla porta 4567. Per visualizzare il tutto, aprire il browser e andare su "localhost: 4567". Si dovrebbe visualizzare un output dell'applicazione:

Figura 1. Prima esecuzione dell'applicazione Congratulazioni! L'applicazione Sinatra è installato e funzionante!

Haml Uno degli obiettivi Haml è quello di ridurre la quantità di duplicazioni e ripetizioni che di solito si genera nella creazione di pagine web con HTML, un esempio di questo è il tag di chiusura. A tale scopo ci si basa sulla struttura dei trattini (indentazione) nel codice: Durante la scrittura in Haml, è importante essere coerente con i trattini quanto si descrive la struttura della pagina. Il risultato è che il markup è logico e molto più facile da leggere rispetto a HTML per tutti, nel più banale dei casi. Si dia un'occhiata ad alcuni markup Haml per mostrare il codice HTML che produce. !!! %html %head %title This is the Title in a title tag within the head tag %body %h1 This is a heading within an h1 tag %p This is text in a paragraph. Notice how we do not close the tag...the indents do that!

39


Get Ruby on Rails in no time Il '!!!' all'inizio del codice dice a Haml di emettere il tag DOCTYPE. I tag HTML sono descritti con un segno '%'. Così ‘%html’ in uscita è il tag ‘<html>’, ‘%head’ crea il tag ‘<head>’, ‘%p’ crea il tag ‘<p>’ e così via. I trattini dicono a Haml quali tag si trovano all'interno di altri. Così il tag ‘<h1>’ è il tag di intestazione prodotto dal codice della riga '%h1' che è all'interno del tag ‘<body>’ creato dal markup '%body’. Il tag paragrafo contrassegnato da tag '%p' è anche all'interno del tag ‘<body>’. Dopo i trattini, possiamo vedere che il testo si trova all'interno del paragrafo. Quindi, il markup di sopra dà il seguente output HTML: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/ xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title >This is the Title within the head tag </title> </head> <body> <h1>This is a heading within the body tag </h1> <p> This is text in a paragraph. Notice how we do not close the tag...the indents do that! </p> </body> </html> Si puo vedere come i tag di chiusura corrispondono al rientro nel codice originale Haml. Aprire un prompt dei comandi e digitare ‘gem install haml ': C:\Users> gem install haml Fetching: haml-3.1.4.gem (100%) Successfully installed haml-3.1.4 1 gem installed Installing ri documentation for haml-3.1.4... Installing RDoc documentation for haml-3.1.4...

Creare un App Step 1

40


Get Ruby on Rails in no time Per cominciare a creare un'applicazione Sinatra si deve creare una cartella contenente un file Ruby con il codice dell'applicazione. Dal terminale, digitare nell’ordine: C:\Users> mkdir C:\Ruby193\www\start-page C:\Users> cd C:\Ruby193\www\start-page C:\Ruby193\www\start-page> touch app.rb Aprire il nuovo file creato 'app.rb' con un editor di testo e immettere il seguente codice: require 'sinatra' get '/' do "This is Sinatra" end Questa è un esempio di applicazione base di Sinatra. Le prime due righe contengono le librerie 'Sinatra’ per fare il lavoro pesante. La sezione successiva spiega a Sinatra come rispondere a una richiesta 'get'. In particolare, gli si dice cosa fare quando l'url principale (il percorso del '/') viene richiesto. In questo esempio, Sinatra restituisce solo la stringa "This is Sinatra". Questo è ciò che appare nel browser quando l'url principale dell'applicazione viene richiesto. Per vederlo in azione, tornare al terminale ed eseguire l'applicazione Sinatra utilizzando il seguente comando: C:\Ruby193\www\start-page> ruby app.rb Si dovrebbe ottenere la risposta: == Sinatra/1.3.2 has taken the stage on 4567 for development with backup from Thin >> Thin web server (v1.3.1 codename Triple Espresso) >> Maximum connections set to 1024 >> Listening on 0.0.0.0:4567, CTRL+C to stop Questo sta dicendo che il webserver (chiamato WEBrick) è avviato e sta ascoltando l'applicazione sulla porta 4567. Per visualizzare il tutto, aprire il browser e andare su "localhost: 4567". Si dovrebbe visualizzare un output dell'applicazione:

41


Get Ruby on Rails in no time

Figura 1. Prima esecuzione dell'applicazione Congratulazioni! L'applicazione Sinatra è installato e funzionante!

Step 2 Si inizia cercando di costruire pagine con Haml e con alcune convenzioni, di default per Sinatra, su dei file speciali. Si sta per costruire qualche pagine con Haml. Il primo passo è quello di segnalare all’applicazione che ci sarà la ‘gem Haml’. Questo si fa con l'aggiunta di ‘require Haml ‘ verso la parte superiore del codice. Cambiare il file 'app.rb' per renderlo simile al seguente: require 'sinatra' require 'Haml’ get '/' do "This is Sinatra" end L'applicazione ora è pronta per utilizzare la ‘gem Haml’ che si è installato in precedenza. Per impostazione predefinita, Sinatra cercherà i modelli di pagine web in una cartella chiamata 'views'. Si aggiunga questa cartella adesso. Aprire un terminale, passare alla cartella ‘start-page’ come si è fatto in precedenza e immettere il seguente: C:\Ruby193\www\start-page> mkdir views

42


Get Ruby on Rails in no time C:\Ruby193\www\start-page> cd views Ora si è all'interno della cartella ‘views’, creare ora una pagina 'index.haml'. C:\Ruby193\www\sinatra-app\views> touch index.haml Aprire 'index.haml' in un editor di testo e inserire il seguente: !!! %html %head %title My Sinatra Website %body %h1 Welcome %p Welcome to my website made with Sinatra and HAML Il passo successivo è quello di invitare Sinatra a utilizzare questo file per la home page. Aprire il file 'app.rb' e cambiare il codice nel ‘get '/' ‘blocco in modo che il file ora reciti: require 'sinatra' require 'haml' get '/' do haml :index end Ciò indica all'applicazione per inviare l'output del file Haml, chiamato ‘index.haml ‘(automagicamente cercato nella cartella 'views'), quando l'indirizzo radice è richiesto. Back in the terminal in esecuzione il server web, tipo 'Ctrl-C' per fermare il webserver e quindi chiamare nuovamente utilizzando il comando ruby per riavviarlo: C:\Ruby193\www\start-page\views> cd.. C:\Ruby193\www\start-page> [Ctrl-C] C:\Ruby193\www\start-page> ruby app.rb Aggiornare il browser e si dovrebbe vedere la pagina web risultante.

43


Get Ruby on Rails in no time

Figura 1. Git GUI sul menu’ avvio di windows Visualizzando il codice sorgente di questa pagina web mostra il codice HTML generato da Haml: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/ xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>My Sinatra Website</title> </head> <body> <h1>Welcome</h1> <p> Welcome to my website made with Sinatra and HAML </p> </body> </html> Ora si ha il sito web in funzione utilizzando i modelli Haml nella directory 'views'. Si puo ora trasformare la home page in qualcosa che segue una struttura tipica, con un header, footer, content area e una sidebar. Ci sarà anche da aggiungere un po 'CSS’ di base per il posizionamento e lo stile della pagina. In questo modo, si vedra come esprimere i tag ‘<div>’in chiave Haml e come portare link per inserire il file ‘CSS’. Tornare al file 'index.haml' utilizzando un editor di testo e modificarlo in maniera simile al seguente: !!! %html %head %title My Sinatra Website %body

44


Get Ruby on Rails in no time #wrapper #header %h1 My Sinatra Website %h2 A Simple Site made with Sinatra and HAML! #content %h1 The Home Page %p Welcome to my website made with Sinatra and HAML. %p This is the home page and this is some text to fill out the home page! #side_bar %h1 Side Bar %p This is the side bar of the webpage #footer %p This is the footer. Questo è uno schema tipico con header, content, side_bar and footer div. Come si puo vedere, i tag ‘<div>’ vengono creati con il segno #. L'intera pagina è avvolto in un tag ‘<div id="wrapper">’ creato da riga '# wrapper'. Per dare ad un tag HTML un id che si è appena creato basta concatenare il # alla fine, in modo da poter scrivere %body#my_ID per ottenere <body id="my_ID">. Le classi sono contrassegnate con un punto. Così %article.my_class darebbe <article class="my_class">. Salvare il file e aggiornare il browser. Si dovrebbe vedere qualcosa come questo:

45


Get Ruby on Rails in no time

Figura 1. Git GUI sul menu’ avvio di windows Sinatra usa altri nomi di directory speciali 'pubblici' ai beni memorizzare come file CSS e le immagini. Creare una cartella chiamata 'pubblico' nella cartella principale dell'applicazione. Cambiare in quella directory e di creare uno chiamato 'css' per memorizzare i file css. Termina con la creazione di un file vuoto css in quella directory. Fate questo in terminale digitando: C:\Ruby193\www\start-page> mkdir public C:\Ruby193\www\start-page> cd public C:\Ruby193\www\start-page\public> mkdir css C:\Ruby193\www\start-page\public> cd css C:\Ruby193\www\start-page\public\css> touch styles.css Aprire il file styles.css nel vostro editor e copiare e incollare il seguente: #wrapper{ width:66%; margin:auto; } #header{ background-color:#ade; } #header>h1{

46


Get Ruby on Rails in no time font-size:200%; } h2{ font-size:130%; font-family:sans-serif; } #content{ margin:12px 0; float:left; } #side_bar{ margin:12px 0; width :30%; float:right; clear:none; background-color:#ddd; } h1{ font-size:150%; } #footer{ clear:both; background-color:#ade; font-size:75%; font-family:sans-serif; color:#333; border-top:solid 1px #69a; } ol{ padding-top:20px; background-color:#ade; display:block; } li{

47


Get Ruby on Rails in no time color:white; text-align:center; display:inline; padding:5px 10px 0 10px; margin-right:2px; background-color: #69a; } a{ text-decoration:none; } Non si vuole entrare nei dettagli del ‘css’, in quanto è solo un modo rapido e sporco di rendere più evidenti elementi della pagina nel browser. Bisogno collegare il file ‘CSS’ all'interno della pagina di ‘index’. Si ha anche intenzione di aggiungere un link per il reset Yahoo ‘CSS’ per aiutare la coerenza tra i browser. Aprire la pagina ‘index.haml’ con un editor e aggiungere queste due righe alla sezione di ‘%head’. %link(rel="stylesheet" href="http://yui.yahooapis.com/2.8.0r4/build/reset/reset-min.css") %link(rel="stylesheet" href="css/styles.css") Ciò dimostra come si puo utilizzare le parentesi quadre in Haml per gli attributi aggiuntivi tag: ‘rel’ e ‘href’ in questo caso. Il file finale dovrebbe essere simile a questo: !!! %html %head %title My Sinatra Website %link(rel="stylesheet" href="http://yui.yahooapis.com/2.8.0r4/build/reset/reset-min.css") %link(rel="stylesheet" href="css/styles.css") %body #wrapper #header %h1 My Sinatra Website %h2 A Simple Site made with Sinatra and HAML! #content %h1 The Home Page

48


Get Ruby on Rails in no time %p Welcome to my website made with Sinatra and HAML. %p This is the home page and this is some text to fill out the home page! #side_bar %h1 Side Bar %p This is the side bar of the webpage #footer %p This is the footer. Aggiornare il browser, si dovrebbe vedere la home page con stile e dives posizionati.

Figura 1. Git GUI sul menu’ avvio di windows Ora si ha il modello di base per le pagine web che si possono riutilizzare per creare pagine aggiuntive.

Step 3 Ora che si ha il layout di base della pagina, si puo notare che gran parte dei contenuti nel file index.html potrebbero essere gli stessi per altre pagine del sito. In questo esempio, si terranno intestazione, piè di pagina e sidebar comune a entrambe le pagine. Si è quindi in grado, in questa fase, di utilizzare un file di layout in Sinatra per raggiungere questo obiettivo. Si torni alla pagina ‘index.haml’ e con un editor di testo, cambiare il nome del file scegliendo 'Salva con nome' per rinominare il tutto come ‘layout.haml’.

49


Get Ruby on Rails in no time

Ora, modificare il file di ‘layout.haml’ in modo da introdurre alcuni tag di template usando il tag '=' in Haml. Modificare il file di ‘layout.haml’ in questo modo: !!! %html %head %title My Sinatra Website %link(rel="stylesheet" href="http://yui.yahooapis.com/2.8.0r4/build/reset/reset-min.css") %link(rel="stylesheet" href="css/styles.css") %body #wrapper #header %h1 My Sinatra Website %h2 A Simple Site made with Sinatra and HAML! #content =yield #side_bar %h1 Side Bar %p This is the side bar of the webpage #footer %p This is the footer. La chiave qui è il comando '=yield'. Il segno ‘= indica a Haml come elaborare un codice Ruby e mettere il risultato nel browser. Qui si sta semplicemente chiamando la funzione 'yield'. di Ruby che restituirà il contenuto della pagina. Ora si può modificare la pagina ‘index.haml’ per fare in moda da eliminare tutto il codice che viene duplicato nel file di ‘layout.haml’. Modificarlo come: segue %h1 The Home Page %p Welcome to my website made with Sinatra and HAML. %p This is the home page and this is some text to fill out the home page!

50


Get Ruby on Rails in no time

Aggiornando il browser dovrebbe fornire esattamente lo stesso risultato di prima. Ma questa volta, il file di ‘layout.haml’ viene automaticamente raccolto da Sinatra e la pagina di ‘index.haml’ viene resa come un risultato della funzione 'yield'. La creazione di ulteriori pagine che utilizzano questo modello è ora semplice. Creare un nuovo file nella cartella 'views' chiamato ‘about.haml’. La directory e la struttura del file per l'applicazione dovrebbe assomigliare a questa:

Figura 1. Git GUI sul menu’ avvio di windows Immettere il codice seguente nel nuovo file: %h1 About %p This is a simple application using Sinatra and HAML. Come si può vedere, questa è una pagina molto semplice con un titolo e un pezzo di testo all'interno di un tag di paragrafo. Non si ha modo di vedere la pagina al momento. Per fare questo, si ha bisogno di modificare il file ‘app.rb’ per dire Sinatra come gestire una richiesta di '/about’ e di restituire il modello ‘about.haml’ come risultato. Questo si ha aggiungendo le seguenti righe al file ‘app.rb’:

51


Get Ruby on Rails in no time

require 'sinatra' require 'haml' get '/' do haml :index end get '/about' do haml :about end Il blocco get '/about' semplice dice Sinatra per restituire 'about' template Haml in risposta ad un HTTP GET per '/about'. Riavviare il server WEBrick premendo Ctrl-C nel terminale in cui è in esecuzione, come si è fatto prima, e chiamando ‘ruby app.rb’ sucesivamente sempre da linea di comando. Si dovrebbe vedere la pagina seguente quando si passa a 'localhost:4567/about' nel browser.

Figura 1. Git GUI sul menu’ avvio di windows L'aggiunta di più pagine sara’ sempre il più rapido e semplice. Basta ricordare che sarà necessario riavviare il server WEBrick se si modifica il file dell'applicazione.

Step 4

52


Get Ruby on Rails in no time Si ha bisogno di aggiungere qualche modo di navigare tra le pagine, quindi si dovra’ aggiungere un menu semplice nel layout. Aprire il file layout.haml e aggiungere un ‘<div>” di navigazione e dei collegamenti come questo: !!! %html %head %title My Sinatra Website %link(rel="stylesheet" href="http://yui.yahooapis.com/2.8.0r4/build/reset/reset-min.css") %link(rel="stylesheet" href="css/styles.css") %body #wrapper #header %h1 My Sinatra Website %h2 A Simple Site made with Sinatra and HAML! #nav %ol %a(href="/") %li Home %a(href="about") %li About #content =yield #side_bar %h1 Side Bar %p This is the side bar of the webpage #footer %p This is the footer. Qui si crea un ‘<div>’ con l'id del nav. Questo ‘<div>’ contiene un elenco con i tag di ancoraggio a '/' e 'about'. Si Noti come il testo collegato è rientrato sulla linea seguendo la riga nel tag di ancoraggio HTML. Aggiornare il browser, e si dovrebbe vedere un menù che unisce le due pagine:

53


Get Ruby on Rails in no time

Figura 1. Git GUI sul menu’ avvio di windows Con un semplice click sui link nel menu di navigazione si dovrebbe accedere ad ogni pagina. Si può sperimentare l'aggiunta di più pagine. Si ricordi, i passi sono i seguenti: ● ● ● ● ●

Aggiungere un nuovo file. Haml nella directory di vista ‘views’. Descrivere la vista utilizzando Haml in quel file. Aggiungere la navigazione verso la nuova pagina nella parte menu del file di layout. Modificare il file app.rb per la nuova via nello stesso modo come il '/ ' su route. Non dimenticate di riavviare il file app.rb!.

Step 5 Si associ, se non l’ho si è ancora fatto, un nuovo repository git all’applicazione. C:\Ruby193\www\start-page> git init Initialized empty Git repository in C:/Ruby193/www/start-page/.git/ Poi, si lancia il comando ‘git config core.autocrlf false’ per disattivare i messaggi del tipo ‘warning: The file will have its original line endings in your working directory. nel config git core’ C:\Ruby193\www\start-page> git config core.autocrlf false core.autocrlf=false Successivamente, aggiungere il contenuto del file all'indice: C:\Ruby193\www\start-page> git add .

54


Get Ruby on Rails in no time

In fine, registrare le modifiche al repository C:\Ruby193\www\start-page> git commit -a -m "init commit" 6 files changed, 113 insertions(+), 0 deletions(-) create mode 100644 app.rb create mode 100644 public/css/styles.css create mode 100644 views/about.haml create mode 100644 views/index.haml create mode 100644 views/layout.haml create mode 100644 views/sidebar.haml Per utilizzare Bundler con un'applicazione Sinatra, avete solo bisogno di fare due cose. Innanzitutto, creare una ‘Gemfile’ e ‘config.ru’. Dal terminale, digitare nell’ordine: C:\Ruby193\www\start-page> touch config.ru C:\Ruby193\www\start-page> touch Gemfile In ‘config.ru’ si inserisce: require './app' run Sinatra::Application In ‘Genfile’ si inserisce: source 'http://rubygems.org' gem 'sinatra' gem 'haml' Successivamente, aggiungere il contenuto del file all'indice: C:\Ruby193\www\start-page> git add . In fine, registrare le modifiche al repository C:\Ruby193\www\start-page> git commit -a -m "init commit" 2 files changed, 5 insertions(+), 0 deletions(-) create mode 100644 Gemfile create mode 100644 config.ru

55


Get Ruby on Rails in no time Per vederlo in azione, tornare al terminale ed eseguire l'applicazione Sinatra utilizzando il seguente comando: C:\Ruby193\www\start-page> bundle install Fetching gem metadata from http://rubygems.org/..... Using haml (3.1.4) Using rack (1.4.1) Using rack-protection (1.2.0) Using tilt (1.3.3) Using sinatra (1.3.2) Using bundler (1.1.3) Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed. Poi, aggiungere il contenuto del file ‘Gemfile.lock ’ all'indice: C:\Ruby193\www\start-page> git add Gemfile.lock Succesivamente, registrare le modifiche al repository del file ‘Gemfile.lock ’: C:\Ruby193\www\start-page> git commit -a -m "adding Gemfile.lock" 1 files changed, 19 insertions(+), 0 deletions(-) create mode 100644 Gemfile.lock In fine, per vederlo in azione tornare al terminale ed eseguire l'applicazione Sinatra utilizzando il seguente comando: C:\Ruby193\www\start-page> ruby app.rb Si dovrebbe ottenere la risposta: == Sinatra/1.3.2 has taken the stage on 4567 for development with backup from Thin >> Thin web server (v1.3.1 codename Triple Espresso) >> Maximum connections set to 1024 >> Listening on 0.0.0.0:4567, CTRL+C to stop Questo sta dicendo che il webserver (chiamato WEBrick) è avviato e sta ascoltando l'applicazione sulla porta 4567. Per visualizzare il tutto, aprire il browser e andare su "localhost: 4567". Si dovrebbe visualizzare un output dell'applicazione:

56


Get Ruby on Rails in no time

Figura 1. Git GUI sul menu’ avvio di windows Congratulazioni! L'applicazione Sinatra è installato e funzionante!

Conclusioni C'è sicuramente molto di più da dire sia Sinatra e Haml rispetto a quello che si è visto qui. Sinatra è una grande scelta per sito web e web-services, considerando che un quadro più marcato, come Ruby on Rails potrebbe essere eccessivo. Inoltre, si trova la semplicità e la chiarezza di Haml complementare a Sinatra in maniera splendida, per realizzare un approccio di sviluppo molto produttivo.

Caricare un App Finito di sviluppare dell’applicazione in locale bisogna creare una nuova applicazione Heroku tramite il comando ‘heroku create’: C:\Ruby193\www\bookmark_manager> heroku create --stack cedar Creating afternoon-flower-2656... done, stack is cedar http://afternoon-flower-2656.herokuapp.com/ | git@heroku.com:afternoon-flower-2656.git Git remote heroku added Il nome dell’applicazione viene assegnato automaticamente, quindi si procede con il primo upload tramite il comando ‘git push heroku master’. Prima pero’ e’ necessario caricare la chiave pubblica a Heroku. Si entra nella cartella .ssh tramite il comando ‘cd’: C:\Users> cd .ssh Per pubblicare una nuova chiave SSH, immettere il comando qui di seguito:

57


Get Ruby on Rails in no time

C:\Users\cattanasio\.ssh> heroku keys:add id_rsa.pub Uploading SSH public key id_rsa.pub Quindi si procede con il primo upload tramite il comando ‘git push heroku master’: C:\Ruby193\www\bookmark_manager> git push heroku master Enter passphrase for key '/c/Users/cattanasio/.ssh/id_rsa': prova (premere invio) Counting objects: 18, done. Delta compression using up to 2 threads. Compressing objects: 100% (15/15), done. Writing objects: 100% (18/18), 2.27 KiB, done. Total 18 (delta 1), reused 0 (delta 0) -----> Heroku receiving push -----> Ruby/Rack app detected -----> Installing dependencies using Bundler version 1.1.2 Running: bundle install --without development:test --path vendor/bundle -binstubs bin/ Fetching gem metadata from http://rubygems.org/..... Installing haml (3.1.4) Installing rack (1.4.1) Installing rack-protection (1.2.0) Installing tilt (1.3.3) Installing sinatra (1.3.2) Using bundler (1.1.2) Your bundle is complete! It was installed into ./vendor/bundle Cleaning up the bundler cache. -----> Discovering process types Procfile declares types -> (none) Default types for Ruby/Rack -> console, rake, web -----> Compiled slug size is 2.0MB -----> Launching... done, v3 http://afternoon-flower-2656.herokuapp.com deployed to Heroku To git@heroku.com:afternoon-flower-2656.git * [new branch] master -> master Quindi, si provi a visualizzare l’applicazione appena pubblicata nel browser tramite il comando ‘heroku open’, oppure si punti il browser all’indirizzo http:// bookmark_manager.heroku.com/:

58


Get Ruby on Rails in no time

C:\Ruby193\www\bookmark_manager> heroku open Creating electric-light-5449...... done, stack is bamboo-mri-1.9.2 Da questo momento in poi si possono fare tutte le modifiche che si vogliono sull’applicazione locale, si tiene traccia di tutto utilizzando ‘git‘ e quando si vuole aggiornare la versione online dopo ogni cambiamento in locale allora si faranno alcuni passi. Passo Uno: C:\Ruby193\www\bookmark_manager> git status Initialized empty Git repository in C:/Ruby193/www/start-page/.git/ Passo Due: C:\Ruby193\www\bookmark_manager> git init Initialized empty Git repository in C:/Ruby193/www/start-page/.git/ Passo Tre: C:\Ruby193\www\bookmark_manager> git add . Passo Quattro: C:\Ruby193\www\bookmark_manager> git commit -a -m "init commit" 2 files changed, 5 insertions(+), 0 deletions(-) create mode 100644 Gemfile create mode 100644 config.ru Passo Cinque: C:\Ruby193\www\bookmark_manager> git push heroku master Enter passphrase for key '/c/Users/cattanasio/.ssh/id_rsa': prova (premere invio) Counting objects: 18, done. Delta compression using up to 2 threads. Compressing objects: 100% (15/15), done. Writing objects: 100% (18/18), 2.27 KiB, done. Total 18 (delta 1), reused 0 (delta 0) -----> Heroku receiving push -----> Ruby/Rack app detected -----> Installing dependencies using Bundler version 1.1.2

59


Get Ruby on Rails in no time Running: bundle install --without development:test --path vendor/bundle -binstubs bin/ Fetching gem metadata from http://rubygems.org/..... Installing haml (3.1.4) Installing rack (1.4.1) Installing rack-protection (1.2.0) Installing tilt (1.3.3) Installing sinatra (1.3.2) Using bundler (1.1.2) Your bundle is complete! It was installed into ./vendor/bundle Cleaning up the bundler cache. -----> Discovering process types Procfile declares types -> (none) Default types for Ruby/Rack -> console, rake, web -----> Compiled slug size is 2.0MB -----> Launching... done, v3 http://afternoon-flower-2656.herokuapp.com deployed to Heroku To git@heroku.com:afternoon-flower-2656.git * [new branch] master -> master

FaceBook Application Introduzione Attraverso le Graph API di Facebook e la creazione del Open Graph Protocol è molto più semplice di prima scrivere e leggere dati da Facebook, questo ci può permettere di: ● creare un sistema di gestione utenti per la nostra applicazione evitando la procedura di registrazione e passando direttamente alla fase di login utilizzando le API di Facebook e personalizzare la navigazione utente in funzioni dei dati recuperati dal proprio profilo; ● aggiungere Like button su tutti gli oggetti della nostra applicazione; ● creare pagine Facebook-like dando la possibilità all'utente di scrivere sul wall dei propri amici, creare eventi, caricare foto e video, etc. in modo da promuovere la nostra attività in modo sociale. Per realizzare un’applicazione per facebook si ha bisogno di : ● Un account su facebook ● L’applicazione per lo sviluppo su facebook (Facebook Developer). ● Un server con Ruby on Rails (Heroku)

60


Get Ruby on Rails in no time ●

La gemma per Ruby on Rails su facebook.

Una volta soddisfatti questi requisiti si può iniziare.

Omniauth Omniauth permette di integrare facilmente con più di sessanta provider di autenticazione, tra cui Facebook, Google, Twitter e GitHub. In questo tutorial, si ha l’intenzione di spiegare come integrare con questi provider di autenticazione attraverso la realizzazione di un’aposita applicazione. La creazione di tale integrazione sembra, a volte, un compito lungo e arduo. Ma niente paura, Omniauth è qui per dare una mano. Per installarlo basta lanciare il comando: C:\Users> gem install omniauth Successfully installed omniauth-1.0.3 1 gem installed Installing ri documentation for omniauth-1.0.3... Installing RDoc documentation for omniauth-1.0.3... Bisogna anche installare la gemma oauth, facebook, twitter e github C:\Users> gem install omniauth-facebook Fetching: multipart-post-1.1.5.gem (100%) Fetching: faraday-0.7.6.gem (100%) Fetching: oauth2-0.5.2.gem (100%) Fetching: omniauth-oauth2-1.0.0.gem (100%) Fetching: omniauth-facebook-1.2.0.gem (100%) Successfully installed multipart-post-1.1.5 Successfully installed faraday-0.7.6 Successfully installed oauth2-0.5.2 Successfully installed omniauth-oauth2-1.0.0 Successfully installed omniauth-facebook-1.2.0 5 gems installed Installing ri documentation for multipart-post-1.1.5... Installing ri documentation for faraday-0.7.6... Installing ri documentation for oauth2-0.5.2... Installing ri documentation for omniauth-oauth2-1.0.0... Installing ri documentation for omniauth-facebook-1.2.0... Installing RDoc documentation for multipart-post-1.1.5... Installing RDoc documentation for faraday-0.7.6...

61


Get Ruby on Rails in no time Installing RDoc documentation for oauth2-0.5.2... Installing RDoc documentation for omniauth-oauth2-1.0.0... Installing RDoc documentation for omniauth-facebook-1.2.0... C:\Users> gem install omniauth-twitter Fetching: omniauth-twitter-0.0.9.gem (100%) Successfully installed omniauth-twitter-0.0.9 1 gem installed Installing ri documentation for omniauth-twitter-0.0.9... Installing RDoc documentation for omniauth-twitter-0.0.9... C:\Users> gem install omniauth-github Successfully installed omniauth-github-1.0.1 1 gem installed Installing ri documentation for omniauth-github-1.0.1... Installing RDoc documentation for omniauth-github-1.0.1... C:\Ruby193\www\simplest_fb_app>gem install omniauth-oauth Fetching: hashie-1.2.0.gem (100%) Fetching: omniauth-1.0.3.gem (100%) Fetching: oauth-0.4.5.gem (100%) Fetching: omniauth-oauth-1.0.1.gem (100%) Successfully installed hashie-1.2.0 Successfully installed omniauth-1.0.3 Successfully installed oauth-0.4.5 Successfully installed omniauth-oauth-1.0.1 4 gems installed Installing ri documentation for hashie-1.2.0... Installing ri documentation for omniauth-1.0.3... Installing ri documentation for oauth-0.4.5... Installing ri documentation for omniauth-oauth-1.0.1... Installing RDoc documentation for hashie-1.2.0... Installing RDoc documentation for omniauth-1.0.3... Installing RDoc documentation for oauth-0.4.5... Installing RDoc documentation for omniauth-oauth-1.0.1...

App Preparare l’App

62


Get Ruby on Rails in no time Si inizia con il creare una nuova applicazione Rails e aggiungono le gemme necessarie. C:\Users> rails new C:\Ruby193\www\omniauth-tutorial Ora apriamo il nostro Genfile e inseriamo le gemme: gem 'omniauth' gem 'omniauth-twitter' gem 'omniauth-facebook' gem 'omniauth-github' gem 'heroku' Poi, al solito, eseguire il comando bundle install per installare la gemma.

Creare un Provider Per creare un provider da utilizzare con Omniauth, è necessario registrarsi come sviluppatore sul sito del provider per cui si intende utilizzare Omniauth. Una volta che ci si è registrati, verrano fornite due stringhe (un po come un username e una password), che devono essere trasmesse a Omniauth. Se si sta usando un provider OpenID, tutto ciò che serve è l'URL OpenID. Se si desidera utilizzare l'autenticazione di Facebook, si: 1. Apre l’applicazione ‘Facebook Developer’ e cliccare su ‘Create New App’

Figura 7. Developers Facebook 2. Aggiunge il nome dell’applicazione (1) , accettare i termini del contratto e cliccare sul link ‘Optional Fields’ (2) per aprire un nuovo pannello per inserire il resto delle informazioni

63


Get Ruby on Rails in no time

Figura 7. Developers Facebook 3. Entra nella sezione ‘Optional Fields’ per inserire a. l’indirizzo di callback , ovvero l’indirizzo dove risiede la nostra applicazione, qualcosa tipo www.miosito.it/nomeapplicazione/ b. il nome che identifica l’applicazione in facebook (può coincidere con quello della tua applicazione, se non è stato già assegnato) c. Selezionare come tipo di applicazione ‘Web Site’ d. Selezionare ‘YES’ per indicare a Facebook, che la tua applicazione può essere aggiunta dagli utenti e. Quest’ultima opzione aprirà una nuova sezione da riempire

Figura 7. Developers Facebook 4. Entra nella nuova sezione per riempire solo i seguenti campi: a. Inserire il link a cui gli utenti verranno indirizzati dopo aver aggiunto la nostra applicazione ovvero : http://apps.facebook.com/nomeapplicazione

64


Get Ruby on Rails in no time b. Inserire un testo che vogliamo venga visualizzato nel profilo utente se non è specificato dalla nostra applicazione (es. ‘Ciao Mondo’) c. Inserire il link della nostra applicazione su facebook ovvero : http:// apps.facebook.com/nomeapplicazione d. lasciamo gli altri campi invariati e clicchiamo su ‘Submit’

Figura 7. Developers Facebook A questo punto la nostra applicazione è stata creata e FaceBook gli assegnato dei valori che dobbiamo segnarci, perchè dobbiamo inserirli nel nostro programmino presente sul nostro server. I valori sono la chiave dell’applicazione (API KEY) ed un numero segreto (SECRET). Per vedere questi valori andare nella lista delle ‘mie applicazioni‘

65


Get Ruby on Rails in no time

Figura 7. Developers Facebook

Aggiungere il Provider all’APP Creare un nuovo file in config/initializers chiamati omniauth.rb. Si sta andando cosi a configurare il provider di autenticazione attraverso questo file. Incollare il codice seguente nel file che è stato creato in precedenza: Rails.application.config.middleware.use OmniAuth::Builder do provider :facebook, YOUR_APP_ID, YOUR_APP_SECRET end Questo è onestamente tutta la configurazione necessario per ottenere l’obiettivo finale. Il resto è curato da Omniauth, come si sta andando a vedere nella fase successiva.

Creare la Login Page Creiamo il nostro controller sessioni. Eseguire il seguente codice nel vostro terminale per creare un nuovo controller sessioni, e il nuovo, creare, e le azioni di rottura. C:\Ruby193\www\omniauth-tutorial> rails generate controller sessions new create failure Quindi, aprire il file di config/routes.rb file e aggiungere questo: get '/login', :to => 'sessions#new', :as => :login match '/auth/:provider/callback', :to => 'sessions#create' match '/auth/failure', :to => 'sessions#failure' Facciamo una scomposizione: ● La prima riga viene utilizzato per creare un semplice modulo di login in cui l'utente vedrà un semplice link "Connect with Facebook". ● La seconda linea è quello di catturare callback del provider. Dopo che un utente autorizza la vostra applicazione, il provider reindirizza l'utente a questo URL, in modo che possiamo fare uso dei loro dati.

66


Get Ruby on Rails in no time ● L'ultimo sarà utilizzato quando c'è un problema, o se l'utente non ha autorizzato la nostra applicazione. Assicurati di eliminare i percorsi che sono stati creati automaticamente quando si esegue il comando rails generate. Essi non sono necessari per il nostro piccolo progetto. Apri il tuo app/controllers/sessions_controller.rb file e scrivere il metodo create, in questo modo: def create auth_hash = request.env['omniauth.auth'] render :text => auth_hash.inspect end Questo è usato per assicurarsi che tutto funzioni. Puntare il browser su localhost: 3000/auth/ facebook e sarete reindirizzati a Facebook in modo da poter autorizzare la vostra applicazione (abbastanza freddo eh?). Autorizza, e sarete reindirizzati al tuo app e vedere un hash con alcune informazioni. Nel frattempo sarà il tuo nome, l'ID utente di Facebook, e-mail, tra le altre cose.

Creare l’User Model Il passo successivo consiste nel creare un modello di utente così gli utenti possono iscriversi utilizzando i loro account Facebook. Nella console di Rails (rails console), creare il nuovo modello. C:\Ruby193\www\omniauth-tutorial> rails generate model User name:string email:string Per ora, il nostro modello utente avrà solo un name e una email. Con quella di mezzo, abbiamo bisogno di un modo di riconoscere l'utente la prossima volta che login Tenete a mente che non abbiamo alcun campo sul modello dei nostri utenti per questo scopo. L'idea alla base di una domanda come quella che stiamo cercando di costruire è che un utente può scegliere tra l'utilizzo di Facebook o Twitter (o qualsiasi altro provider) a firmare, quindi abbiamo bisogno di un altro modello di conservare tali informazioni. Diciamo la creazione di: C:\Ruby193\www\omniauth-tutorial> rails generate model Authorization provider:string uid:string user_id:integer

67


Get Ruby on Rails in no time Un utente avrà una o più autorizzazioni, e quando qualcuno tenta di accedere utilizzando un provider, ci limitiamo a guardare le autorizzazioni all'interno della banca dati e cercare quello che corrisponde al uid e campi provider. In questo modo, abbiamo anche consentire agli utenti di avere molti fornitori, in modo da poter successivamente effettuare il login utilizzando Facebook o Twitter, o di qualsiasi altro fornitore che hanno configurato! Aggiungere il seguente codice al vostro app/models/user.rb file: has_many :authorizations validates :name, :email, :presence => true Questo specifica che un utente può avere più autorizzazioni, e che il name e il campo email nel database sono obbligatori. Successivamente, al vostro app/models/authorization.rb file, aggiungere: belongs_to :user validates :provider, :uid, :presence => true All'interno di questo modello, che designa ogni autorizzazione è associato a un user specifico. Abbiamo inoltre possibile impostare alcune di convalida e.

Aggiungere un po di logica alla App Aggiungiamo un po' di codice per il nostro controller di sessioni in modo che un utente accede o li firma, a seconda dei casi. Apri app / controllers / sessions_controller.rb e modificare il metodo create, in questo modo: def create auth_hash = request.env['omniauth.auth'] @authorization = Authorization.find_by_provider_and_uid(auth_hash["provider"], auth_hash["uid"]) if @authorization render :text => "Welcome back #{@authorization.user.name}! You have already signed up." else user = User.new :name => auth_hash["user_info"]["name"], :email => auth_hash["user_info"] ["email"] user.authorizations.build :provider => auth_hash["provider"], :uid => auth_hash["uid"] user.save

68


Get Ruby on Rails in no time render :text => "Hi #{user.name}! You've signed up." end end Questo codice ha chiaramente bisogno di un po' di refactoring, ma ce ne occuperemo più avanti. Diciamo la prima recensione: ● Verifichiamo se esiste un' autorizzazione per il fornitore e che uid. Se ne esiste uno, accogliamo con favore il nostro utente indietro. ● Se l' autorizzazione non esiste, firmiamo l'utente up. Creiamo un nuovo utente con il nome e l' email che il fornitore (Facebook in questo caso) ci dà, e che associamo l' autorizzazione con il provider e l' uid sei dato noi. Dategli un test! Vai a localhost:3000/auth/facebook e si dovrebbe vedere "Hai firmato up". Se si aggiorna la pagina, si dovrebbe ora vedere "Welcome back".

Consentire Providers Multiple Lo scenario ideale sarebbe quello di consentire a un utente di iscriversi utilizzando un provider, e poi aggiungere un altro provider, così da poter avere più opzioni per effettuare il login con. La nostra applicazione che non consente per ora. Abbiamo bisogno di refactoring nostro codice un po '. Cambia il sessions_controlller.rb file inserendo Create come mostrato di seguito: def create auth_hash = request.env['omniauth.auth'] if session[:user_id] # Means our user is signed in. Add the authorization to the user User.find(session[:user_id]).add_provider(auth_hash) render :text => "You can now login using #{auth_hash["provider"].capitalize} too!" else # Log him in or sign him up auth = Authorization.find_or_create(auth_hash) # Create the session session[:user_id] = auth.user.id render :text => "Welcome #{auth.user.name}!" end end

69


Get Ruby on Rails in no time Rivediamo in questo modo: ● Se l'utente è già connesso, stiamo andando ad aggiungere il provider che stanno usando per loro conto. ● Se non sei loggato, stiamo andando a cercare di trovare un utente con quel provider, o crearne uno nuovo se è necessario. Affinché il codice di cui sopra inizi a lavorare, abbiamo bisogno di aggiungere alcuni metodi per il nostro utente e modelli di autorizzazione. Aprire user.rb e aggiungere il seguente metodo: def add_provider(auth_hash) # Check if the provider already exists, so we don't add it twice unless authorizations.find_by_provider_and_uid(auth_hash["provider"], auth_hash["uid"]) Authorization.create :user => self, :provider => auth_hash["provider"], :uid => auth_hash["uid"] end end Se l'utente non dispone già di questo provider associato con il proprio account, andiamo avanti e aggiungerlo - semplice. Ora, aggiungere questo metodo al file authorization.rb: def self.find_or_create(auth_hash) unless auth = find_by_provider_and_uid(auth_hash["provider"], auth_hash["uid"]) user = User.create :name => auth_hash["user_info"]["name"], :email auth_hash["user_info"]["email"] auth = create :user => user, :provider => auth_hash["provider"], :uid => auth_hash["uid"] end

=>

auth end Nel codice di cui sopra, cerchiamo di trovare una autorizzazione che corrisponde alla richiesta e in caso negativo, creiamo un nuovo utente. Se volete provare questo a livello locale, avrete bisogno di un secondo provider di autenticazione. Si potrebbe utilizzare il sistema OAuth Twitter, ma, come ho sottolineato in precedenza, si sta andando ad avere bisogno di utilizzare un approccio diverso, dal momento che Twitter non permette l'utilizzo di "localhost" come dominio del URL callback (almeno non funziona per me). Si potrebbe anche provare hosting il codice su Heroku, che è perfetto per un sito semplice come quello che stiamo creando.

Alcuni Tweaks Extra 70


Get Ruby on Rails in no time Infine, dobbiamo, naturalmente, permettono agli utenti di effettuare il logout. Aggiungi questo pezzo di codice al controllore sessioni: def destroy session[:user_id] = nil render :text => "You've logged out!" end Abbiamo anche bisogno di creare la via di esposizione applicabile (in routes.rb). get '/logout', :to => 'sessions#destroy' E 'così semplice! Se si accede a localhost: 3000/logout, la sessione deve essere eliminato, e ti verrà disconnesso. In questo modo sarà più semplice provare più account e fornitori. Dobbiamo anche aggiungere un messaggio che viene visualizzato quando gli utenti è negato l'accesso alla nostra app. Se vi ricordate, abbiamo aggiunto questo percorso verso l'inizio del tutorial. Ora, abbiamo solo bisogno di aggiungere il metodo nel controller sessioni: def failure render :text => "Sorry, but you didn't allow access to our app!" end E last but not least, creare la pagina di login, dove l'utente può fare clic sul link "Connect with Facebook". Aprire app / views / sessioni / new.html.erb e aggiungere: <%= link_to "Connect With Facebook", "/auth/facebook" %> Se andate a localhost: 3000/login vedrete un link che vi reindirizzerà alla pagina di autenticazione Facebook.

Conclusioni Spero che questo articolo vi ha fornito un breve esempio di come Omniauth funziona. È un gioiello molto potente e permette di creare siti Web che non richiedono agli utenti di iscriversi, che è sempre un plus! È possibile conoscere Omniauth su GitHub.

YouTube Definizione

71


Get Ruby on Rails in no time Omniauth permette di integrare facilmente con più di sessanta i provider di autenticazione, tra cui Facebook, Google, Twitter e GitHub. In questo tutorial, si ha intenzione di spiegare come integrare questi provider di autenticazione in una app. La creazione di tale integrazione embra a volte come un compito lungo e arduo. Ma niente paura, non Omniauth è qui per dare una mano.

Tool Introduzione Si puo scegliere tra Eclipse, o Aptana, per lo sviluppo in Ruby on Rails. Il primo supporto per Ruby su Eclipse risale al progetto RDT, che offre funzionalità essenziali per lo sviluppo in Ruby quali: ● colorazione del codice ● controllo della sintassi in tempo reale ● outline grafico del codice ● gestione semplificata dell’avvio dei test ● avvio delle applicazioni Ruby ● formattazione del codice ● debugger Ruby ● vista per la gerarchia dei tipi ● ricerca dedicata a Ruby ● refactoring ● plugin per la valutazione di espressioni regolari Il plugin RDT permette quindi di sviluppare in Ruby, ma non offre alcun supporto per lo sviluppo in Ruby on Rails. RadRails, successivamente assimilato nel progetto Aptana offre invece un’ambiente completo che comprende oltre alle funzionalità di RDT: ● console Rails integrata ● installazione e configurazione semplificata dell’interprete Ruby e del database ● completamento del codice ● assistente al codice per Ruby, CSS, JS, RHTML, erb

Installazione Eclipse 72


Get Ruby on Rails in no time Se si utilizza già la piattaforma Eclipse (ad esempio per sviluppare in Java o in Python) è possibile accedere a tutte le funzionalità di Aptana installando sull’istanza di Eclipse che si sta utilizzano un apposito plugin. Il plugin aggiungerà le funzionalità utili alla programmazione in Ruby e Rails e una nuova vista (denominata Aptana) che permette di attivare con un solo comando queste funzionalità. Installando le estensioni per Ruby e Rails di Eclipse si otterrà una piattaforma utile allo sviluppo per diversi linguaggi; i plugin per Ruby e Rails troveranno spazio fra i plugin che possono essere facilmente integrati. Si inzia con il seguire i passaggi elencati di seguito per aggiungere Aptana alla tua lista dei plugin di Eclipse. 1. Dal menu Help, si seleziona Install New Software. ... si apre la finestra di dialogo Install New Software. 2. Si incolla l'URL del sito di aggiornamento http://download.aptana.com/studio3/plugin/ install nell’aria di testo Work With e si preme Invio (o Return) 3. Nella tabella sottostante, si seleziona la casella accanto al nome del plug-in e quindi si fa un clic sul pulsante Next. 4. Si Fa un clic sul pulsante Next per andare alla license page. 5. Scegliere l'opzione per accettare i termini del contratto di licenza e fare clic sul pulsante Finish. Potrebbe essere necessario riavviare Eclipse per continuare.

Aptana Aptana è disponibile in versione stand-alone per la programmazione in Ruby e Rails. Scegliendo la versione stand alone di Aptana non è necessario avere Eclipse già installato sulla propria workstation per accedere a tutte le funzionalità dedicate allo sviluppo in Ruby e Rails. Aptana permette inoltre di installare plugin aggiunivi che permettono di accedere a funzionalità dedicate alla programmazione in PHP, iPhone, Jaxer, Python, jQuery.

Collegamenti Esterni Una breve lista di indirizzi di pagine web utilizzati per la realizzazione di questo documento: ● http://rubyonrails.org/download ● http://aptana.com/ ● http://www.eclipse.org/downloads/ ● http://ruby.html.it/guide/leggi/151/guida-ruby-on-rails-2/

73


Get Ruby on Rails in no time ● ● ● ● ● ● ● ● ● ●

http://railscasts.com/episodes/241-simple-omniauth https://github.com/intridea/omniauth/wiki/OmniAuth-1.0 http://net.tutsplus.com/tutorials/ruby/how-to-use-omniauth-to-authenticate-your-users/ http://sleekd.com/tutorials/setting-up-omniauth-authentication-with-facebook/ https://github.com/intridea/omniauth http://code.google.com/apis/youtube/js_api_reference.html http://guides.rubyonrails.org/ https://developers.facebook.com/ https://github.com/arsduo/koala http://www.heroku.com/

Credits Il documento è stato creato da Ciro Attanasio in collaborazione con Andrea Reginato e Maurizio Totti. Questo documento è rilasciato sotto Creative Commons Attribution 3.0 Unported License

74


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.