SlideShare uma empresa Scribd logo
1 de 55
Baixar para ler offline
Workshop
Ruby on Rails
     Dia 2
Apresentação
Ruby on Rails
REAL

    baseado em necessidades reais

                DRY

      elimina tarefas repetitivas

                COC

         adopta convenções

                ÁGIL

aberto a mudanças no desenvolvimento
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
• 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
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
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
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!
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 é preciso saber SQL, nem mexer na BD
directamente.

•Podemos criar tabelas, chaves, indexes, etc.
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...
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 ...
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 app/models
 :::
 create log/development.log
 create log/test.log
Cada coisa no seu lugar
            Aplicação (MVC)

             Controladores
               Modelos
                Vistas




             Público

            dispatchers
              Imagens
                CSS
             Javascript
3 ambientes integrados
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 )
Excepções

self.table_name = ‘my_legacy_table’

self.primary_key = ‘my_id’

self.pluralize_table_names = false

self.table_name_prefix = ‘my_app’
Active Record
         CRUD

Create: create, new

Read: find, find_by_<attr>

Update: save, update_attributes

Delete: destroy
Boas Prácticas


Não colocar muito código no controller/view.
O objectivo é models com muito código e
controllers com pouco.
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.
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.
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
Routes REST
map.resources :articles
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 %>
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.
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
Testes
Testes Unitários e funcionais

RSPEC

  http://rspec.info/

Shoulda

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

Saber mais:

  http://blog.jayfields.com/
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
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.
Performance
Performance
Ver mais:

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

  http://railslab.newrelic.com/

Ferramentas de profiling

  www.fiveruns.com
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: gem install capistrano

Ver tarefas: cap -T
Exemplo deploy
Exemplo de Receitas

Receita Capistrano para deploy em Passenger:

  http://reinventar.com/2008/09/setting-up-
  git-and-passenger-with-capistrano/
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 - Michael Fitzgerald
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 - Gestor de Conteúdo
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

Mais conteúdo relacionado

Mais procurados

Introdução ao Desenvolvimento de aplicações WEB com JSP
Introdução ao Desenvolvimento de aplicações WEB com JSPIntrodução ao Desenvolvimento de aplicações WEB com JSP
Introdução ao Desenvolvimento de aplicações WEB com JSPManoel Afonso
 
JSP - Java Serves Pages
JSP - Java Serves PagesJSP - Java Serves Pages
JSP - Java Serves PagesAmanda Luz
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer FacesEduardo Bregaida
 
Apresentação jsf 2.0
Apresentação jsf 2.0Apresentação jsf 2.0
Apresentação jsf 2.0Paulo Neto
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com PrimefacesFabio Noth
 
Curso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTCurso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTMario Sergio
 
Curso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationCurso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationMario Sergio
 
Curso de Java (Parte 6) Introdução a Front-end
Curso de Java (Parte 6) Introdução a Front-endCurso de Java (Parte 6) Introdução a Front-end
Curso de Java (Parte 6) Introdução a Front-endMario Sergio
 
Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1Thyago Maia
 
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4Desenvolvimento de sistemas web com PHP Frameworks - Aula 4
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4Thyago Maia
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Thyago Maia
 
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Thyago Maia
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Thyago Maia
 
Jsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenJsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenLeandro Costa
 

Mais procurados (20)

Curso de JSP
Curso de JSPCurso de JSP
Curso de JSP
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Introdução ao Desenvolvimento de aplicações WEB com JSP
Introdução ao Desenvolvimento de aplicações WEB com JSPIntrodução ao Desenvolvimento de aplicações WEB com JSP
Introdução ao Desenvolvimento de aplicações WEB com JSP
 
JSP - Java Serves Pages
JSP - Java Serves PagesJSP - Java Serves Pages
JSP - Java Serves Pages
 
Spa com angular js flisol 2015 - aquidauana ms
Spa com angular js   flisol 2015 - aquidauana msSpa com angular js   flisol 2015 - aquidauana ms
Spa com angular js flisol 2015 - aquidauana ms
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer Faces
 
Apresentação jsf 2.0
Apresentação jsf 2.0Apresentação jsf 2.0
Apresentação jsf 2.0
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com Primefaces
 
Curso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTCurso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service REST
 
Curso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationCurso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web Application
 
Curso de Java (Parte 6) Introdução a Front-end
Curso de Java (Parte 6) Introdução a Front-endCurso de Java (Parte 6) Introdução a Front-end
Curso de Java (Parte 6) Introdução a Front-end
 
Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1
 
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4Desenvolvimento de sistemas web com PHP Frameworks - Aula 4
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4
 
CakePHP
CakePHPCakePHP
CakePHP
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
 
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
 
Jsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenJsf com hibernate, spring security e maven
Jsf com hibernate, spring security e maven
 
ApresentaçãO Mvc
ApresentaçãO MvcApresentaçãO Mvc
ApresentaçãO Mvc
 

Destaque

School Sport Portfolio
School Sport PortfolioSchool Sport Portfolio
School Sport PortfolioH Anderson
 
App Mechanical Pomodoro para iPhone
App Mechanical Pomodoro para iPhoneApp Mechanical Pomodoro para iPhone
App Mechanical Pomodoro para iPhonePedro Sousa
 
SHiFT Conference - The Future of Work
SHiFT Conference - The Future of WorkSHiFT Conference - The Future of Work
SHiFT Conference - The Future of WorkPedro Sousa
 
Rochersextraordinaires11 (4)
Rochersextraordinaires11 (4)Rochersextraordinaires11 (4)
Rochersextraordinaires11 (4)elocastanyo
 
Workshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptWorkshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptPedro Sousa
 
2 anos de CoworkLisboa
2 anos de CoworkLisboa2 anos de CoworkLisboa
2 anos de CoworkLisboaPedro Sousa
 
Pistachio Sketch App Presentation
Pistachio Sketch App PresentationPistachio Sketch App Presentation
Pistachio Sketch App PresentationPedro Sousa
 
Catherine - Year Book Concepts
Catherine - Year Book ConceptsCatherine - Year Book Concepts
Catherine - Year Book ConceptsH Anderson
 
Performance on Rails
Performance on RailsPerformance on Rails
Performance on RailsPedro Sousa
 

Destaque (10)

School Sport Portfolio
School Sport PortfolioSchool Sport Portfolio
School Sport Portfolio
 
App Mechanical Pomodoro para iPhone
App Mechanical Pomodoro para iPhoneApp Mechanical Pomodoro para iPhone
App Mechanical Pomodoro para iPhone
 
SHiFT Conference - The Future of Work
SHiFT Conference - The Future of WorkSHiFT Conference - The Future of Work
SHiFT Conference - The Future of Work
 
Rochersextraordinaires11 (4)
Rochersextraordinaires11 (4)Rochersextraordinaires11 (4)
Rochersextraordinaires11 (4)
 
Sponsor pack
Sponsor packSponsor pack
Sponsor pack
 
Workshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptWorkshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-pt
 
2 anos de CoworkLisboa
2 anos de CoworkLisboa2 anos de CoworkLisboa
2 anos de CoworkLisboa
 
Pistachio Sketch App Presentation
Pistachio Sketch App PresentationPistachio Sketch App Presentation
Pistachio Sketch App Presentation
 
Catherine - Year Book Concepts
Catherine - Year Book ConceptsCatherine - Year Book Concepts
Catherine - Year Book Concepts
 
Performance on Rails
Performance on RailsPerformance on Rails
Performance on Rails
 

Semelhante a Workshop Ruby on Rails dia 2 ruby-pt

Semelhante a Workshop Ruby on Rails dia 2 ruby-pt (20)

Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Apresentação M V C
Apresentação M V CApresentação M V C
Apresentação M V C
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifa
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01
 
Criando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptCriando APIs com Node e TypeScript
Criando APIs com Node e TypeScript
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 
Asp.Net Mvc Dev Days09 V3 Pt
Asp.Net Mvc Dev Days09 V3 PtAsp.Net Mvc Dev Days09 V3 Pt
Asp.Net Mvc Dev Days09 V3 Pt
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOL
 
Rails na prática
Rails na práticaRails na prática
Rails na prática
 
Arquitetura de sistemas web
Arquitetura de sistemas webArquitetura de sistemas web
Arquitetura de sistemas web
 
Cake Php
Cake PhpCake Php
Cake Php
 
Desenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endDesenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-end
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São Carlos
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.
 
Grails
GrailsGrails
Grails
 

Mais de Pedro Sousa

Introdução ao Raspberry Pi
Introdução ao Raspberry PiIntrodução ao Raspberry Pi
Introdução ao Raspberry PiPedro Sousa
 
Novos desafios digitais - sub-produtos
Novos desafios digitais - sub-produtosNovos desafios digitais - sub-produtos
Novos desafios digitais - sub-produtosPedro Sousa
 
Web 2.0 e as bibliotecas
Web 2.0 e as bibliotecasWeb 2.0 e as bibliotecas
Web 2.0 e as bibliotecasPedro Sousa
 
10 Dicas Para Construir Redes Sociais
10 Dicas Para Construir Redes Sociais10 Dicas Para Construir Redes Sociais
10 Dicas Para Construir Redes SociaisPedro Sousa
 
Inovação, Empreendedorismo, a Wii e Portugal
Inovação, Empreendedorismo, a Wii e PortugalInovação, Empreendedorismo, a Wii e Portugal
Inovação, Empreendedorismo, a Wii e PortugalPedro Sousa
 
Ruby on Rails numa agência de marketing digital
Ruby on Rails numa agência de marketing digitalRuby on Rails numa agência de marketing digital
Ruby on Rails numa agência de marketing digitalPedro Sousa
 
Do cubiculo para o sofa
Do cubiculo para o sofaDo cubiculo para o sofa
Do cubiculo para o sofaPedro Sousa
 

Mais de Pedro Sousa (7)

Introdução ao Raspberry Pi
Introdução ao Raspberry PiIntrodução ao Raspberry Pi
Introdução ao Raspberry Pi
 
Novos desafios digitais - sub-produtos
Novos desafios digitais - sub-produtosNovos desafios digitais - sub-produtos
Novos desafios digitais - sub-produtos
 
Web 2.0 e as bibliotecas
Web 2.0 e as bibliotecasWeb 2.0 e as bibliotecas
Web 2.0 e as bibliotecas
 
10 Dicas Para Construir Redes Sociais
10 Dicas Para Construir Redes Sociais10 Dicas Para Construir Redes Sociais
10 Dicas Para Construir Redes Sociais
 
Inovação, Empreendedorismo, a Wii e Portugal
Inovação, Empreendedorismo, a Wii e PortugalInovação, Empreendedorismo, a Wii e Portugal
Inovação, Empreendedorismo, a Wii e Portugal
 
Ruby on Rails numa agência de marketing digital
Ruby on Rails numa agência de marketing digitalRuby on Rails numa agência de marketing digital
Ruby on Rails numa agência de marketing digital
 
Do cubiculo para o sofa
Do cubiculo para o sofaDo cubiculo para o sofa
Do cubiculo para o sofa
 

Último

Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Dirceu Resende
 
Knowtree - Extração de Dados com o KAPE.
Knowtree - Extração de Dados com o KAPE.Knowtree - Extração de Dados com o KAPE.
Knowtree - Extração de Dados com o KAPE.Thiago lindolfo
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Dirceu Resende
 
O papel da automação de processos no mundo do trabalho pós-moderno
O papel da automação de processos no mundo do trabalho pós-modernoO papel da automação de processos no mundo do trabalho pós-moderno
O papel da automação de processos no mundo do trabalho pós-modernoDenis Pereira Raymundo
 
PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...
PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...
PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...Priscila Ribeiro Chagas
 
TI EXAMES - NIST Cybersecurity Framework.pdf
TI EXAMES - NIST Cybersecurity Framework.pdfTI EXAMES - NIST Cybersecurity Framework.pdf
TI EXAMES - NIST Cybersecurity Framework.pdfRodrigoMori7
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Dirceu Resende
 

Último (7)

Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
Knowtree - Extração de Dados com o KAPE.
Knowtree - Extração de Dados com o KAPE.Knowtree - Extração de Dados com o KAPE.
Knowtree - Extração de Dados com o KAPE.
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
O papel da automação de processos no mundo do trabalho pós-moderno
O papel da automação de processos no mundo do trabalho pós-modernoO papel da automação de processos no mundo do trabalho pós-moderno
O papel da automação de processos no mundo do trabalho pós-moderno
 
PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...
PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...
PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...
 
TI EXAMES - NIST Cybersecurity Framework.pdf
TI EXAMES - NIST Cybersecurity Framework.pdfTI EXAMES - NIST Cybersecurity Framework.pdf
TI EXAMES - NIST Cybersecurity Framework.pdf
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 

Workshop Ruby on Rails dia 2 ruby-pt

  • 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
  • 7. 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
  • 8. 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
  • 9. 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!
  • 10. MODEL •Relacionamentos de forma pré-definida • has_many • belongs_to • has_and_belongs_to_many
  • 11. 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.
  • 12. 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...
  • 13. 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 ...
  • 17. Não limitado a uma plataforma SQLite (incluído na framework) MySQL PostgreSQL Oracle SQL Server Outros...
  • 20. •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
  • 21. Cada coisa no seu lugar Aplicação (MVC) Controladores Modelos Vistas Público dispatchers Imagens CSS Javascript
  • 23. 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 )
  • 24. Excepções self.table_name = ‘my_legacy_table’ self.primary_key = ‘my_id’ self.pluralize_table_names = false self.table_name_prefix = ‘my_app’
  • 25. Active Record CRUD Create: create, new Read: find, find_by_<attr> Update: save, update_attributes Delete: destroy
  • 26. Boas Prácticas Não colocar muito código no controller/view. O objectivo é models com muito código e controllers com pouco.
  • 27. 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.
  • 28. 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.
  • 29. 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
  • 31. 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 %>
  • 32. 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.
  • 33. 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
  • 34. Testes Testes Unitários e funcionais RSPEC http://rspec.info/ Shoulda http://thoughtbot.com/projects/shoulda/ Saber mais: http://blog.jayfields.com/
  • 35. 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
  • 36. 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.
  • 38. Performance Ver mais: http://reinventar.com/2008/09/ performance-on-rails-barcamp-pt-08/ http://railslab.newrelic.com/ Ferramentas de profiling www.fiveruns.com
  • 40. Várias opções Apache + Passenger Nginx + Mongrel Lighttpd FastCGI Outras
  • 43. 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
  • 45. Exemplo de Receitas Receita Capistrano para deploy em Passenger: http://reinventar.com/2008/09/setting-up- git-and-passenger-with-capistrano/
  • 47. Novidades Fusão entre Rails e MERB Novas funcionalidades Aposta na performance
  • 48. Conferências e a comunidade
  • 49. RUPY RubyConf RailsConf Euruko Scottland on Rails Rails Summit Latin America Conferencia Rails (Espanha) Paris on Rails
  • 50. Livros The Rails Way - Obie Fernandez Programming Ruby - Dave Thomas Chad Fowler Andy Hunt Ruby Pocket Reference - Michael Fitzgerald
  • 52. Exemplos Open-Source Tracks - Gestão de tarefas Insonshi - Rede Social Beast - Forum Typo - Blog RadiantCMS - Gestor de Conteúdo
  • 55. Obrigado Emanuel Mota www.ruby-pt.org - emanuel.mota@gmail.com Pedro Sousa www.thinkorange.pt - psousa@thinkorange.pt