Your SlideShare is downloading. ×
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2  ruby-pt
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Workshop Ruby on Rails dia 2 ruby-pt

1,605

Published on

Dia 2 do workshop sobre Ruby on Rails de 2 dias. …

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,605
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
42
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Workshop Ruby on Rails Dia 2
  • 2. Apresentação Ruby on Rails
  • 3. REAL baseado em necessidades reais DRY elimina tarefas repetitivas COC adopta convenções ÁGIL aberto a mudanças no desenvolvimento
  • 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. • 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. 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. 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. 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. MODEL •Relacionamentos de forma pré-definida • has_many • belongs_to • has_and_belongs_to_many
  • 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. 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. 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. Ambiente de Desenvolvimento
  • 14. Várias opções Aptana Studio NetBeans Eclipse Textmate Vim Ruby in Steel (Visual Studio)
  • 15. Bases de Dados
  • 16. Não limitado a uma plataforma SQLite (incluído na framework) MySQL PostgreSQL Oracle SQL Server Outros...
  • 17. Live Coding
  • 18. criar uma aplicação
  • 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. Cada coisa no seu lugar Aplicação (MVC) Controladores Modelos Vistas Público dispatchers Imagens CSS Javascript
  • 21. 3 ambientes integrados
  • 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. 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. Active Record CRUD Create: create, new Read: find, find_by_<attr> Update: save, update_attributes Delete: destroy
  • 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. 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. 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. 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. Routes REST map.resources :articles
  • 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. 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. 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. Testes Testes Unitários e funcionais RSPEC http://rspec.info/ Shoulda http://thoughtbot.com/projects/shoulda/ Saber mais: http://blog.jayfields.com/
  • 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. 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. Performance
  • 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. Deployment
  • 39. Várias opções Apache + Passenger Nginx + Mongrel Lighttpd FastCGI Outras
  • 40. Recomendação Apache + Passenger www.modrails.com
  • 41. Outras ferramentas
  • 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. Exemplo deploy
  • 44. Exemplo de Receitas Receita Capistrano para deploy em Passenger: http://reinventar.com/2008/09/setting-up- git-and-passenger-with-capistrano/
  • 45. O Futuro
  • 46. Novidades Fusão entre Rails e MERB Novas funcionalidades Aposta na performance
  • 47. Conferências e a comunidade
  • 48. RUPY RubyConf RailsConf Euruko Scottland on Rails Rails Summit Latin America Conferencia Rails (Espanha) Paris on Rails
  • 49. Livros The Rails Way - Obie Fernandez Programming Ruby - Dave Thomas Chad Fowler Andy Hunt Ruby Pocket Reference - Michael Fitzgerald
  • 50. Vídeos RailsCasts PeepCode Pragmatic Videos Rails Envy E muitos mais...
  • 51. Exemplos Open-Source Tracks - Gestão de tarefas Insonshi - Rede Social Beast - Forum Typo - Blog RadiantCMS - Gestor de Conteúdo
  • 52. Websites www.ruby-pt.org www.rubyonrails.org www.ruby-lang.org
  • 53. Perguntas?
  • 54. Obrigado Emanuel Mota www.ruby-pt.org - emanuel.mota@gmail.com Pedro Sousa www.thinkorange.pt - psousa@thinkorange.pt

×