Workshop
Ruby on Rails
     Dia 2
Apresentação
Ruby on Rails
REAL

    baseado em necessidades reais

                DRY

      elimina tarefas repetitivas

                COC

    ...
Princípios
DRY: Don’t Repeat Yourself

   Cada coisa no seu sítio

   Reduzir a quantidade de código reduz erros

COC: Con...
• Desenhado para a “felicidade” do
  programador

• Felicidade + Motivação = produtividade
• Ambiente de testes incluído
•...
Controller
•Recebe os pedidos http do utilizador
•Prepara a informação que vai ser mostrada ao
utilizador.

•Responsável p...
Controller
•Filtros (filters)
•Permite executar código antes/depois das
acções

•Permite saltar as próprias execuções das a...
MODEL
•Models (bd)
         representam as tabelas das bases
de dados

•Declaração é feita de forma limpa e legível
•Não é...
MODEL
•Relacionamentos de forma pré-definida
 • has_many
 • belongs_to
 • has_and_belongs_to_many
MODEL

•Migrations permitem alterar a base de
dados

•Permitem actualizar facilmente a estrutura da
base de dados.

•Não é...
VIEW
•Gerem a apresentação visual da aplicação
•Layouts guardam o aspecto geral das páginas
•Existe separação entre dados ...
VIEW

•Helpers
 • Objectivo: Simplificar e não repetir código
 • Formulários
 • Geração de URL’s
 • Geração de Javascript (...
Ambiente de
Desenvolvimento
Várias opções

Aptana Studio

NetBeans

Eclipse

Textmate

Vim

Ruby in Steel (Visual Studio)
Bases de Dados
Não limitado a uma
   plataforma
SQLite (incluído na framework)

MySQL

PostgreSQL

Oracle

SQL Server

Outros...
Live Coding
criar uma aplicação
•mac>   cd projectos

•mac>   rails projecto_novo
 create app/views
 create app/controllers
 create app/helpers
 create ap...
Cada coisa no seu lugar
            Aplicação (MVC)

             Controladores
               Modelos
                Vis...
3 ambientes integrados
Base de Dados
1 tabela = 1 modelo

Classes ficam guardadas em app/models e
estendem ActiveRecord::Base

Nomes das tabelas n...
Excepções

self.table_name = ‘my_legacy_table’

self.primary_key = ‘my_id’

self.pluralize_table_names = false

self.table...
Active Record
         CRUD

Create: create, new

Read: find, find_by_<attr>

Update: save, update_attributes

Delete: destr...
Boas Prácticas


Não colocar muito código no controller/view.
O objectivo é models com muito código e
controllers com pouc...
Routes
Routes são regras que procuram mapear URL’s
à hash dos Params.

A hash dos params possui o controller e a
action a ...
REST
REST é uma alternativa ao SOAP e uma
maneira de adicionar uma API tipo web
service a uma aplicação.

O estado do sist...
REST
Recursos são tipicamente models e cada um
tem um controller com 7 actions: create, new,
sho, update, edit, destroy

E...
Routes REST
map.resources :articles
AJAX - Links e forms
<%=
 link_to_remote quot;Destroy (AJAX)quot;, :url => workshop_path(workshop), :confirm => quot;Are yo...
RJS

RJS é uma API em Ruby para gerar código
javascript que é enviado de volta ao browser e
executado.

É especialmente út...
RJS - Exemplos
page.insert_html :bottom ‘todo_list’, “<li>#{todo.name}</li>”
page.replace_html ‘flash_notice’, “Todo added:...
Testes
Testes Unitários e funcionais

RSPEC

  http://rspec.info/

Shoulda

  http://thoughtbot.com/projects/shoulda/

Sab...
Internacionalização
Introduzida na versão 2.2 do Ruby on Rails

Traduz datas, numeração, strings, etc

Referências:

  htt...
Conclusões
Criámos uma aplicação web para gerir workshops e inscrições

Conseguimos mapear tabelas para objectos sem traba...
Performance
Performance
Ver mais:

  http://reinventar.com/2008/09/
  performance-on-rails-barcamp-pt-08/

  http://railslab.newrelic....
Deployment
Várias opções

Apache + Passenger

Nginx + Mongrel

Lighttpd

FastCGI

Outras
Recomendação
Apache + Passenger www.modrails.com
Outras ferramentas
CAPISTRANO

Ferramenta para automatizar operações nos
servidores de produção

Documentação em: www.capify.org

Instalação:...
Exemplo deploy
Exemplo de Receitas

Receita Capistrano para deploy em Passenger:

  http://reinventar.com/2008/09/setting-up-
  git-and-p...
O Futuro
Novidades


Fusão entre Rails e MERB

Novas funcionalidades

Aposta na performance
Conferências e a
  comunidade
RUPY
RubyConf
RailsConf
Euruko
Scottland on Rails
Rails Summit Latin America
Conferencia Rails (Espanha)
Paris on Rails
Livros
The Rails Way - Obie Fernandez

Programming Ruby - Dave Thomas Chad
Fowler Andy Hunt

Ruby Pocket Reference - Micha...
Vídeos
RailsCasts

PeepCode

Pragmatic Videos

Rails Envy

E muitos mais...
Exemplos Open-Source
  Tracks - Gestão de tarefas

  Insonshi - Rede Social

  Beast - Forum

  Typo - Blog

  RadiantCMS ...
Websites

www.ruby-pt.org

www.rubyonrails.org

www.ruby-lang.org
Perguntas?
Obrigado
Emanuel Mota
www.ruby-pt.org - emanuel.mota@gmail.com

Pedro Sousa
www.thinkorange.pt - psousa@thinkorange.pt
Workshop Ruby on Rails dia 2  ruby-pt
Upcoming SlideShare
Loading in …5
×

Workshop Ruby on Rails dia 2 ruby-pt

1,668
-1

Published on

Dia 2 do workshop sobre Ruby on Rails de 2 dias.
Neste dia criou-se uma aplicação simples para gerir workshops.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,668
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
42
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Workshop Ruby on Rails dia 2 ruby-pt

  1. 1. Workshop Ruby on Rails Dia 2
  2. 2. Apresentação Ruby on Rails
  3. 3. REAL baseado em necessidades reais DRY elimina tarefas repetitivas COC adopta convenções ÁGIL aberto a mudanças no desenvolvimento
  4. 4. Princípios DRY: Don’t Repeat Yourself Cada coisa no seu sítio Reduzir a quantidade de código reduz erros COC: Convenção sobre Configuração Torna as aplicações mais fáceis de entender Menos trabalho de desenvolvimento Só precisamos de configurar situações extra- ordinárias
  5. 5. • Desenhado para a “felicidade” do programador • Felicidade + Motivação = produtividade • Ambiente de testes incluído • Flexibilidade perante as mudanças • Velocidade de desenvolvimento (agilidade) • Beleza do código
  6. 6. Controller •Recebe os pedidos http do utilizador •Prepara a informação que vai ser mostrada ao utilizador. •Responsável por : • apresentar os resultados • gerir o diálogo
  7. 7. Controller •Filtros (filters) •Permite executar código antes/depois das acções •Permite saltar as próprias execuções das acções •Muito útil para autenticação e outros... •Alguns exemplos: • before filter, after filter, around filter
  8. 8. MODEL •Models (bd) representam as tabelas das bases de dados •Declaração é feita de forma limpa e legível •Não é necessário indicar nome de tabelas ou chaves primárias/estrangeiras mas tudo pode ser personalizado!
  9. 9. MODEL •Relacionamentos de forma pré-definida • has_many • belongs_to • has_and_belongs_to_many
  10. 10. MODEL •Migrations permitem alterar a base de dados •Permitem actualizar facilmente a estrutura da base de dados. •Não é preciso saber SQL, nem mexer na BD directamente. •Podemos criar tabelas, chaves, indexes, etc.
  11. 11. VIEW •Gerem a apresentação visual da aplicação •Layouts guardam o aspecto geral das páginas •Existe separação entre dados e aspecto • ex: xml, html, json, vcard, atom, etc...
  12. 12. VIEW •Helpers • Objectivo: Simplificar e não repetir código • Formulários • Geração de URL’s • Geração de Javascript (Prototype + Script.aculo.us) • Formatos de texto / números / datas ...
  13. 13. Ambiente de Desenvolvimento
  14. 14. Várias opções Aptana Studio NetBeans Eclipse Textmate Vim Ruby in Steel (Visual Studio)
  15. 15. Bases de Dados
  16. 16. Não limitado a uma plataforma SQLite (incluído na framework) MySQL PostgreSQL Oracle SQL Server Outros...
  17. 17. Live Coding
  18. 18. criar uma aplicação
  19. 19. •mac> cd projectos •mac> rails projecto_novo create app/views create app/controllers create app/helpers create app/models ::: create log/development.log create log/test.log
  20. 20. Cada coisa no seu lugar Aplicação (MVC) Controladores Modelos Vistas Público dispatchers Imagens CSS Javascript
  21. 21. 3 ambientes integrados
  22. 22. Base de Dados 1 tabela = 1 modelo Classes ficam guardadas em app/models e estendem ActiveRecord::Base Nomes das tabelas no plural e nomes das classes no singular As colunas são mapeadas como atributos do modelo As tabelas têm uma chave primaria ( id )
  23. 23. Excepções self.table_name = ‘my_legacy_table’ self.primary_key = ‘my_id’ self.pluralize_table_names = false self.table_name_prefix = ‘my_app’
  24. 24. Active Record CRUD Create: create, new Read: find, find_by_<attr> Update: save, update_attributes Delete: destroy
  25. 25. Boas Prácticas Não colocar muito código no controller/view. O objectivo é models com muito código e controllers com pouco.
  26. 26. Routes Routes são regras que procuram mapear URL’s à hash dos Params. A hash dos params possui o controller e a action a invocar. Routes são definidas no fich config/routes.rb e são aplicados pela ordem que aparecem. Se não houver comparação possível, devolve erro 404.
  27. 27. REST REST é uma alternativa ao SOAP e uma maneira de adicionar uma API tipo web service a uma aplicação. O estado do sistema está dividido em recursos que são alcançados via hyperlinks. Todos os recursos têm um interface uniforme e operações bem definidas. REST foi desenhado para suportar escalabilidade e flexibilidade.
  28. 28. REST Recursos são tipicamente models e cada um tem um controller com 7 actions: create, new, sho, update, edit, destroy Existem 4 tipos de operações: Create, Read, Update e Delete (CRUD) As 4 operações correspondem aos verbos HTTP: GET, POST, PUT, DELETE Podemos gerar as rotas usando map.resources :nomedomodeloplural
  29. 29. Routes REST map.resources :articles
  30. 30. AJAX - Links e forms <%= link_to_remote quot;Destroy (AJAX)quot;, :url => workshop_path(workshop), :confirm => quot;Are you sure?quot;, :method => :delete %> <%= link_to_function quot;Create new?quot;, quot;$('newuser').toggle().highlight();quot; %> <%= link_to_function quot;Create new?quot; do |page| page['new_user'].show page['select_user'].hide page['new_user'].highlight end %> <% form_remote_tag :url => {:action => 'update'} do %> <%= hidden_field_tag quot;prompt[id]quot;, @prompt.id %> <%= render :partial => 'form', :locals => {:mode => 'edit'} %> <%= submit_tag quot;Editquot; %> <% end %>
  31. 31. RJS RJS é uma API em Ruby para gerar código javascript que é enviado de volta ao browser e executado. É especialmente útil para actualizar várias partes da página.
  32. 32. RJS - Exemplos page.insert_html :bottom ‘todo_list’, “<li>#{todo.name}</li>” page.replace_html ‘flash_notice’, “Todo added: #{todo_name}” page.replace ‘flash_notice’, :partial => ‘flash’, :object => todo page[:flash_notice].remove|show|hide|toggle # page[:flash_notice] <=> $(‘flash_notice’) page.alert “The form contains the following errors: #{errors.join(“, “)}” page << “alert(‘Hello there’)” # Append raw JavaScript to be executed page.visual_effect :pulsate, ‘flash_notice’ page.delay(3) do page.visual_effect :fade, ‘flash_notice’ end
  33. 33. Testes Testes Unitários e funcionais RSPEC http://rspec.info/ Shoulda http://thoughtbot.com/projects/shoulda/ Saber mais: http://blog.jayfields.com/
  34. 34. Internacionalização Introduzida na versão 2.2 do Ruby on Rails Traduz datas, numeração, strings, etc Referências: http://rails-i18n.org/ http://github.com/svenfuchs/rails-i18n/ tree/master/rails%2Flocale
  35. 35. Conclusões Criámos uma aplicação web para gerir workshops e inscrições Conseguimos mapear tabelas para objectos sem trabalho manual e aborrecido. Não precisámos recompilar ou reiniciar a aplicação após cada mudança no código. Não precisámos configurar dezenas de arquivos XML. Só foi preciso inserir o nome/password da base de dados. Não precisámos de javascript para escrever AJAX. Usámos Ruby nas três camadas da aplicação. Ganhamos uma API de borla. :) Temos uma estrutura de testes unitários e funcionais.
  36. 36. Performance
  37. 37. Performance Ver mais: http://reinventar.com/2008/09/ performance-on-rails-barcamp-pt-08/ http://railslab.newrelic.com/ Ferramentas de profiling www.fiveruns.com
  38. 38. Deployment
  39. 39. Várias opções Apache + Passenger Nginx + Mongrel Lighttpd FastCGI Outras
  40. 40. Recomendação Apache + Passenger www.modrails.com
  41. 41. Outras ferramentas
  42. 42. CAPISTRANO Ferramenta para automatizar operações nos servidores de produção Documentação em: www.capify.org Instalação: gem install capistrano Ver tarefas: cap -T
  43. 43. Exemplo deploy
  44. 44. Exemplo de Receitas Receita Capistrano para deploy em Passenger: http://reinventar.com/2008/09/setting-up- git-and-passenger-with-capistrano/
  45. 45. O Futuro
  46. 46. Novidades Fusão entre Rails e MERB Novas funcionalidades Aposta na performance
  47. 47. Conferências e a comunidade
  48. 48. RUPY RubyConf RailsConf Euruko Scottland on Rails Rails Summit Latin America Conferencia Rails (Espanha) Paris on Rails
  49. 49. Livros The Rails Way - Obie Fernandez Programming Ruby - Dave Thomas Chad Fowler Andy Hunt Ruby Pocket Reference - Michael Fitzgerald
  50. 50. Vídeos RailsCasts PeepCode Pragmatic Videos Rails Envy E muitos mais...
  51. 51. Exemplos Open-Source Tracks - Gestão de tarefas Insonshi - Rede Social Beast - Forum Typo - Blog RadiantCMS - Gestor de Conteúdo
  52. 52. Websites www.ruby-pt.org www.rubyonrails.org www.ruby-lang.org
  53. 53. Perguntas?
  54. 54. Obrigado Emanuel Mota www.ruby-pt.org - emanuel.mota@gmail.com Pedro Sousa www.thinkorange.pt - psousa@thinkorange.pt
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×