Workshop Ruby on Rails dia 2 ruby-pt

55
Workshop Ruby on Rails Dia 2

description

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

Transcript of Workshop Ruby on Rails dia 2 ruby-pt

Page 1: Workshop Ruby on Rails dia 2  ruby-pt

Workshop Ruby on Rails

Dia 2

Page 2: Workshop Ruby on Rails dia 2  ruby-pt

Apresentação Ruby on Rails

Page 3: Workshop Ruby on Rails dia 2  ruby-pt

REAL

baseado em necessidades reais

DRY

elimina tarefas repetitivas

COC

adopta convenções

ÁGIL

aberto a mudanças no desenvolvimento

Page 4: Workshop Ruby on Rails dia 2  ruby-pt

PrincípiosDRY: 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

Page 5: Workshop Ruby on Rails dia 2  ruby-pt

• 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

Page 6: Workshop Ruby on Rails dia 2  ruby-pt
Page 7: Workshop Ruby on Rails dia 2  ruby-pt

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

Page 8: Workshop Ruby on Rails dia 2  ruby-pt

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

Page 9: Workshop Ruby on Rails dia 2  ruby-pt

MODEL

•Models representam as tabelas das bases de dados (bd)

•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!

Page 10: Workshop Ruby on Rails dia 2  ruby-pt

•Relacionamentos de forma pré-definida

• has_many

• belongs_to

• has_and_belongs_to_many

MODEL

Page 11: Workshop Ruby on Rails dia 2  ruby-pt

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

MODEL

Page 12: Workshop Ruby on Rails dia 2  ruby-pt

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

Page 13: Workshop Ruby on Rails dia 2  ruby-pt

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

VIEW

Page 14: Workshop Ruby on Rails dia 2  ruby-pt

Ambiente de Desenvolvimento

Page 15: Workshop Ruby on Rails dia 2  ruby-pt

Várias opções

Aptana Studio

NetBeans

Eclipse

Textmate

Vim

Ruby in Steel (Visual Studio)

Page 16: Workshop Ruby on Rails dia 2  ruby-pt

Bases de Dados

Page 17: Workshop Ruby on Rails dia 2  ruby-pt

Não limitado a uma plataforma

SQLite (incluído na framework)

MySQL

PostgreSQL

Oracle

SQL Server

Outros...

Page 18: Workshop Ruby on Rails dia 2  ruby-pt

Live Coding

Page 19: Workshop Ruby on Rails dia 2  ruby-pt

criar uma aplicação

Page 20: Workshop Ruby on Rails dia 2  ruby-pt

•mac> cd projectos •mac> rails projecto_novo

create app/viewscreate app/controllers create app/helpers create app/models : : : create log/development.log create log/test.log

Page 21: Workshop Ruby on Rails dia 2  ruby-pt

Cada coisa no seu lugarAplicação (MVC)

ControladoresModelos

Vistas

Público

dispatchersImagens

CSSJavascript

Page 22: Workshop Ruby on Rails dia 2  ruby-pt

3 ambientes integrados

Page 23: Workshop Ruby on Rails dia 2  ruby-pt

Base de Dados1 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 )

Page 24: Workshop Ruby on Rails dia 2  ruby-pt

Excepções

self.table_name = ‘my_legacy_table’

self.primary_key = ‘my_id’

self.pluralize_table_names = false

self.table_name_prefix = ‘my_app’

Page 25: Workshop Ruby on Rails dia 2  ruby-pt

Active RecordCRUD

Create: create, new

Read: find, find_by_<attr>

Update: save, update_attributes

Delete: destroy

Page 26: Workshop Ruby on Rails dia 2  ruby-pt

Boas Prácticas

Não colocar muito código no controller/view. O objectivo é models com muito código e controllers com pouco.

Page 27: Workshop Ruby on Rails dia 2  ruby-pt

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.

Page 28: Workshop Ruby on Rails dia 2  ruby-pt

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.

Page 29: Workshop Ruby on Rails dia 2  ruby-pt

RESTRecursos 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

Page 30: Workshop Ruby on Rails dia 2  ruby-pt

Routes RESTmap.resources :articles

Page 31: Workshop Ruby on Rails dia 2  ruby-pt

AJAX - Links e forms<%= link_to_remote "Destroy (AJAX)", :url => workshop_path(workshop), :confirm => "Are you sure?", :method => :delete %>

<%= link_to_function "Create new?", "$('newuser').toggle().highlight();" %>

<%= link_to_function "Create new?" do |page| page['new_user'].show page['select_user'].hide page['new_user'].highlightend %>

<% form_remote_tag :url => {:action => 'update'} do %><%= hidden_field_tag "prompt[id]", @prompt.id %><%= render :partial => 'form', :locals => {:mode => 'edit'} %><%= submit_tag "Edit" %>

<% end %>

Page 32: Workshop Ruby on Rails dia 2  ruby-pt

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.

Page 33: Workshop Ruby on Rails dia 2  ruby-pt

RJS - Exemplospage.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

Page 34: Workshop Ruby on Rails dia 2  ruby-pt

TestesTestes Unitários e funcionais

RSPEC

http://rspec.info/

Shoulda

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

Saber mais:

http://blog.jayfields.com/

Page 35: Workshop Ruby on Rails dia 2  ruby-pt

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

Page 36: Workshop Ruby on Rails dia 2  ruby-pt

ConclusõesCriá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.

Page 37: Workshop Ruby on Rails dia 2  ruby-pt

Performance

Page 39: Workshop Ruby on Rails dia 2  ruby-pt

Deployment

Page 40: Workshop Ruby on Rails dia 2  ruby-pt

Várias opções

Apache + Passenger

Nginx + Mongrel

Lighttpd

FastCGI

Outras

Page 41: Workshop Ruby on Rails dia 2  ruby-pt

RecomendaçãoApache + Passenger www.modrails.com

Page 42: Workshop Ruby on Rails dia 2  ruby-pt

Outras ferramentas

Page 43: Workshop Ruby on Rails dia 2  ruby-pt

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

Page 44: Workshop Ruby on Rails dia 2  ruby-pt

Exemplo deploy

Page 46: Workshop Ruby on Rails dia 2  ruby-pt

O Futuro

Page 47: Workshop Ruby on Rails dia 2  ruby-pt

Novidades

Fusão entre Rails e MERB

Novas funcionalidades

Aposta na performance

Page 48: Workshop Ruby on Rails dia 2  ruby-pt

Conferências e a comunidade

Page 49: Workshop Ruby on Rails dia 2  ruby-pt

RUPY

RubyConf

RailsConf

Euruko

Scottland on Rails

Rails Summit Latin America

Conferencia Rails (Espanha)

Paris on Rails

Page 50: Workshop Ruby on Rails dia 2  ruby-pt

LivrosThe Rails Way - Obie Fernandez

Programming Ruby - Dave Thomas Chad Fowler Andy Hunt

Ruby Pocket Reference - Michael Fitzgerald

Page 51: Workshop Ruby on Rails dia 2  ruby-pt

VídeosRailsCasts

PeepCode

Pragmatic Videos

Rails Envy

E muitos mais...

Page 52: Workshop Ruby on Rails dia 2  ruby-pt

Exemplos Open-SourceTracks - Gestão de tarefas

Insonshi - Rede Social

Beast - Forum

Typo - Blog

RadiantCMS - Gestor de Conteúdo

Page 54: Workshop Ruby on Rails dia 2  ruby-pt

Perguntas?