SlideShare uma empresa Scribd logo
Conhecendo Ruby on Rails
Conhecendo Ruby on Rails

                 Jevô
       Paulo César M. Jeveaux
         www.jeveaux.com
               j
Jevô
                     Jô
• Consultor e Arquiteto Java

• Desenvolvedor Java há 7 anos
                Java há 7 anos

• Administrador do PortalJava e ESJUG

• Palestrante‐Entusiasta‐Evangelista Java e 
  agora também Rails =)
Agenda
                   Ad
•   A linguagem Ruby
•   Ruby on Rails
•   O exemplo: Blog
    O exemplo: Blog
•   Scaffold
•   Testes
•   Ajax
•   Como continuar e saber mais
    C         ti       b     i
Ruby
                        Rb
• Linguagem de programação

• Open Source

• Orientada a objetos
                j

• Linguagem de scripts dinâmica e interpretada
            de scripts dinâmica e interpretada

• Criada por Yukihiro “matz” Matsumoto em 1993 
      d         kh “        ”
  e disponibilizada ao público em 1995
Ruby
                      Rb
• Interpretada
  – Fedback imediato no desenvolvimento
  – Perde um pouco em performance
    Perde um pouco em performance


• Totalmente orientada a objetos
  –T d é
    Tudo é um objeto
                 bj t
  – 5 é uma instância da classe Fixnum
  – Classes, herança, métodos, closures, etc
Script Dinâmico e Interpretado
   S i t Di â i      It      td
• Possibilidade de realizar chamadas ao Sistema 
  Operacional diretamente
  O       i   l di t      t

• Poderosas operações com strings e Expressões 
  Regulares

• Feedback imediato no desenvolvimento
  Feedback imediato no desenvolvimento
Rápida e Fácil
               Rá id Fá il
• Não é necessário declarar variáveis

• Variáveis não tem tipo (não são “tipadas”)
  Variáveis não tem tipo (não são  tipadas )

• A sintaxe é simples e consistente;

• A gestão de memória é automática
  – Garbage Collector
Com e sem tipagem
          C         ti
• Variáveis não possuem tipagem estática 
  (como em Smalltalk e Python)
  (          S llt lk P th )

• Dados fortemente tipados
  – O dado em memória é tipado e checado em 
    tempo de execução (Runtime)
    tempo de execução (Runtime)
Multiencadeada
            M lti    dd
• Multiencadeamento é a implementação de 
  multitarefa dentro de um único processo
    ltit f d t d           úi
  – Execução mais lenta
          ç
  – Os recursos são compartilhados em memória e 
    devem ter o acesso sincronizado
    d       t            i     id
  – Várias tarefas executam de forma concorrente
  – O multiencademento do Ruby é implementado no 
    próprio interpretador
    próprio interpretador
Ruby on Rails
                Rb      R il
• Framework para desenvolvimento de aplicações Web;

• Criado com a linguagem Ruby;

• Desenvolvido por David Heinemeier Hansson, da 
  37signals;

• Extraído de um produto real: o Basecamp

• De um produto real para um mundo real
O que é Rails?
                     O     é R il ?
• Framework completo para desenvolvimento de aplicativos 
  Web

• Pacote MVC (Model‐View‐Controller)
   – Action Pack (Action Controller e Action View)
   – Active Record

• Suporte a envio e recebimento de e‐mails
   – A ti M il
     Action Mailer

• Suporte a Web Services
  Suporte a Web Services
   – Action WebServices
Arquitetura Rails
A it t      R il
Começando
                      C      d
• Instalar Ruby 1.8.6
   – www ruby lang org/en/downloads
     www.ruby‐lang.org/en/downloads


• Instalar RubyGems
   – rubyforge.org/frs/?group_id=126


• I t l R il (li h d
  Instalar Rails (linha de comando)
                                d)
   – gem install rails


• Instalar MySQL (suporta outros bancos)
  Instalar MySQL (suporta outros bancos)
   – dev.mysql.com/downloads
Começo Fácil
                    C      Fá il
• Windows
  – I t t R il
    Instant Rails
     • wiki.rubyonrails.com/rails/pages/InstantRails



• Mac e Linux
  Mac e Linux
  – FiveRuns RB‐Install
     • www.fiveruns.com/products/rm/install
           fi          / d t / /i t ll



• Linux
  – sudo apt get install ruby irb rdoc
         apt-get
O exemplo
                      O      l
• Sistema de Blog
  – Baseado no exemplo do blog do screencast de 
    David Hansson no rubyonrails.org. O exemplo se 
    chama: “Creating a weblog in 15 minutes”
     • http://media.rubyonrails.org/video/rails_take2_with_sound.mov
          p //         y          g/     /
O que o blog terá
             O       bl t á
•   Uma tabela de Posts
•   Uma tabela associada de Comments
•   Uma tela de listagem de Posts
    Uma tela de listagem de Posts
•   Uma tela de criação e edição de Posts
                     ç       ç
•   Uma tela de detalhes do Post
•   No detalhe do Post veremos e adicionaremos 
    Comments
Criando o projeto
            Ci d         jt
• rails <projeto>
  – rails blog
Criando o banco de dados
     Ci d      b     d dd
• Criando o banco de dados no MySQL
  – create d
           database <projeto>_<ambiente>
               b        j        bi
Ambientes
                   A bi t
• Rails vem preparado para lidar com três 
  ambientes diferentes:
     bi t dif      t

  – Development (sandbox)


  – Test (testes unitários funcionais integrados)
         (testes unitários, funcionais, integrados)


  – Production (produção)
A aplicação criada
            A li ã        id
• Estrutura de diretórios
Configurando
              C fi      d
• Configuração mínima necessária: Banco de 
  dados!
  dd !
Criando o Controller
          Ci d      C t ll
• script/generate controller <nome>
  – script/generate controller Blog
          /
Controllers e Actions
             C t ll        A ti
• Todo Controller fica no diretório:
   – /app/controllers/<nome> controller.rb
     /app/controllers/<nome>_controller.rb


• Todo Controller herda a classe ApplicationController
  Todo Controller herda a classe ApplicationController

• Todo aplicativo Rails é criado com uma classe chamada 
  ApplicationController, que herda de ActionController::Base, e 
  é base de todos os outros controllers

• Todo método de um controller é chamado de Action
Criando um Action
           Ci d       A ti
• Uma classe Controller pode ter várias Actions.
   def index
       #ffaca alguma coisa
               l       i
       render => :text “HelloWorld!”
   end
Executando a aplicação
        E    td        li ã
• Execute
  – script/server
          /
     • Irá iniciar o servidor de testes padrão, WEBRick na
                                        p     ,
       porta 3000.
     • Acesse: http://localhost:3000
       Acesse: http://localhost:3000
Executando
E    td
Roteamento
               Rt      t
• Como acessar o Controller e Action criados?
  – Roteamento customizável: config/routes.rb
  – http://localhost:3000/:controller/:action/:id
Roteamento
Rt      t
Executando uma Action
        E    td        A ti
• Seguindo a regra anterior de roteamento
  – http://localhost:3000/blog/index


  – blog = app/controller/blog_controller.rb
  – index = método index em BlogController
Convenções e comportamento
   C      õ           t    t
• Ao final de toda Action, Rails chamará uma view com 
  o mesmo nome da Action, no seguinte diretório:
  o mesmo nome da Action no seguinte diretório:
   – /app/views/<controller>/<action>.<ext>


• A extensão do arquivo pode ser:
                  q     p
   – .rhtml ‐ Embedded Ruby (HTML+Ruby)
   – .rxml ‐ XML Builder (Ruby puro)
                          (    yp )
   – .rjs ‐ Javascript Generator (Ruby puro)


• Este fluxo pode ser interrompido com uma chamada 
  explícita ao método render ou redirect_to
Criando uma View
           Ci d        Vi
• Criar index.rhtml em /app/views/blog/
   <h3>HelloWorld! (view)</h3>

• Comentar a linha com o render no método 
  index do BlogController

• Acesse novamente e comprove
  Acesse novamente e comprove
  – http://localhost:3000/blog/index
Criando
C i d uma Vi
          View
Criando
C i d uma Vi
          View
Criando
C i d uma Vi
          View
Criando a entidade Post
       Ci d        tid d P t
• script/generate model <nome>
  – script/generate model Post
          /
Mantendo sempre a ordem
     Mtd                 d
• Migration
  – Manutenção de tabelas usando Ruby
  – Independente de banco
    Independente de banco
  – Também suporta SQL nativo
Rake
                    Rk
• Rake é a ferramenta para execução de tarefas 
  implementadas em Ruby. Rake é o Make para 
  il        td       Rb Rk é Mk
  Rubyy
• Primeira tarefa: manutenção das tabelas
  – rake migrate
rake migrate
                         kit
• Toda entidade criada com script/generate gera um arquivo de 
  Migration no diretório db/migrate
  Migration no diretório db/migrate

• Todo arquivo Migration é numerado:
  Todo arquivo Migration é numerado:
   – 001_create_posts.rb


• O comando rake migrate executa os arquivos em db/migrate

• O gerenciamento do banco de dados é feito totalmente em 
  Ruby
Mapeando as tabelas
           M     d     tbl
• A classe Post já é capaz de gerenciar os dados da 
  tabela no banco de dados
  tabela no banco de dados
   – ActiveRecord
• Não há necessidade de explicitar o mapeamento das 
  colunas do banco com atributos da classe
• Rails não proíbe nada: se for necessário existe como 
  mapear uma coluna para outro atributo de nome 
  mapear uma coluna para outro atributo de nome
  diferente
Mais convenções
                Mi          õ
• Toda entidade é criada no diretório padrão:
   – /app/models/<controller>/<model>.rb
       pp


• Toda entidade herda diretamente da classe 
  ActiveRecord::Base

• Não é preciso mapear manualmente as colunas da tabela

• Convenção: a classe tem o nome no singular (Post), a tabela 
  tem o nome do plural (posts)
                 p      (p   )

• Convenção: Surrogate Key, toda tabela tem uma chave
  Convenção: Surrogate Key, toda tabela tem uma chave 
  primária chamada “id” que é um número auto‐incrementável
Anotando os Modelos
           Atd         Mdl
• Plugin de Dave Thomas

• Instalação (via internet):
   – script/plugin install annotate_models

• Utilização (via rake):
   – rake annotate_models

• Lê a tabela do banco de dados e coloca um
  Lê a tabela do banco de dados e coloca um 
  cabeçalho como comentário na classe entidade
Scaffold
                     S ff ld
• Colocar o método scaffold :<model> no controller é 
  suficiente

• Telas CRUD (Create, Read, Update, Delete) geradas 
  automaticamente em tempo de execução (runtime)
  automaticamente em tempo de execução (runtime)

• CUIDADO: Rails NÃO é Scaffold

• Scaffold é apenas uma pequena funcionalidade para 
  facilitar prototipação
  fl
Telas com Scaffold
Tl        S ff ld
Telas com Scaffold
Tl        S ff ld
Telas com Scaffold
Tl        S ff ld
Configurando o Post
         C fi      d    Pt
• Acrecentando uma validação
  – validate_presence_of :title
Testando validação
Ttd        lid ã
Melhorando o Post
           M lh    d    Pt
• Criando novas colunas com Migration
• script/generate migration <atividade>
  – script/generate migration AdicionarColunasPost
        pg            g
Melhorando o Post
M lh    d    Pt
Melhorando o Post
M lh    d    Pt
Criando um novo Post
         Ci d            Pt
• Testando sem reiniciar
• Verifique as novas colunas
Criando um novo Post
         Ci d            Pt
• Testando sem reiniciar
• Verifique as novas colunas
Gerando o Scaffold
           G    d    S ff ld
• script/generate scaffold <model> <controller>
  – script/generate scaffold Post Blog
Scaffold gerado!
             S ff ld      d!
• Toda execução que era automática agora está 
  exposta em arquivos que podemos editar 
       t           i           d        dit
  como quisermos
        q
• Provado: Rails não se restringe a Scaffold 
  automático
        á
• Podemos mudar a listagem de Posts por
  Podemos mudar a listagem de Posts, por 
  exemplo, em:
  – /app/views/blog/list.rhtml
Arquivos gerados
Ai           d
Arquivos gerados
Ai           d
Arquivos gerados
Ai           d
Criando a entidade Comment
    Ci d        tid d C      t
• Hora de criar a entidade Comment
  – script/generate model Comment
          /
• Lembre‐se: esta entidade será associada a um
  Lembre se: esta                         a um 
  Post
Rake: Organizando novamente
   Rk O       id            t
• Comment pertence a Post através da coluna 
  post_id.
     t id
• Convenção de Chave Estrangeira: <classe> id
  Convenção de Chave Estrangeira: <classe>_id

• rake migrate
Rake: Organizando novamente
Rk O       id            t
Rake: Organizando novamente
Rk O       id            t
Criando as associações
        Ci d            iõ
• Na classe Post
  – has_many :comments


• Na classe Comments
  – belongs_to :post
Criando as associações
Ci d            iõ
Criando as associações
Ci d            iõ
Usando as associações
        Ud             iõ
• Criar um formulário de Comment na tela de 
  detalhe de um Post
  d t lh d      Pt
  – /app/views/blog/show.rhtml
    / pp/     / g/
Partials
                       P ti l
• “Don’t Repeat Yourself” (DRY)
• Uma das maneiras de separar trechos de código
       das maneiras de separar         de código
• Toda partial começa com underline “_”
   – <%= render :partial => quot;commentquot;, :collection => 
              d        lquot;            quot;     ll
     @post.comments %>
• Associação has_many em Post automaticamente fornece um 
  hash chamado comments (nome da outra entidade no plural)
Action para Comment
       A ti        C     t
• <% form_for :comment, @comment, :url
  => {:action => 'add comment', :id =>
                  add_comment
  @post } do |f| %>
  – Action esperada: add_comment
  – Passando parâmetros: params[:id] e
    Passando parâmetros: params[:id] e 
    params[:comment]
  – Hash params[:comment] contém todos os 
    campos do formulário enviado.
            df       lá i   id
Action para Comment
A ti        C     t
Resultado final
R lt d fi l
Testes Unitários
              T t U itá i
• Toda nova entidade ganha um arquivo para 
  teste unitário em:
  tt      itá i
  – /app/test/unit/<entidade>_test.rb
    / pp/    /    /


• Devemos seguir Test‐Driven Development:
  – “Se não vale a pena testar para que estamos
     Se não vale a pena testar, para que estamos 
    codificando?”
Ambiente de Testes
             A bi t d T t
• Os testes acontecem em banco de dados separado 
  do desenvolvimento
  do desenvolvimento
   – <projeto>_test

• Cada teste roda de maneira isolada: os dados 
  modificados em um teste não afetam outro teste
     difi d           t t ã ft            ttt

• Cada teste unitário tem um arquivo de “fixture”, 
  carga de dados para testes:
     g           p
   – /app/test/fixture/<tabela>.yml
Rodando os Testes Unitários
     Rd d       T t U itá i
• Todos os testes unitários
  – rake test:units


• Apenas um teste unitário:
  – ruby test/unit/<entidade>_test.rb
Testes Funcionais
               Tt F i         i
• Todo novo controller ganha uma classe de teste em:
   –/
    /app/test/functional/<classe>_controller_test.rb
        /t t/f ti      l/< l    >    t ll t t b
• Devemos testar cada action do controller
• Métodos como get e post simulam navegação com 
  um browser
  um browser

• Todos os testes funcionais:
   – rake test: u ct o a s
      a e test:functionals
• Apenas um testes funcional:
   – r b test/f nctional/<classe> controller test rb
     ruby test/functional/<classe>_controller_test.rb
Testes
                      Tt
• Testes Unitários devem testar todos os aspectos da 
  entidade como associações, validações, callbacks, etc
  entidade como associações validações callbacks etc

• Testes Funcionais devem testar todas as actions de 
  um mesmo controller, todos os fluxos, 
  um mesmo controller todos os fluxos
  redirecionamentos, filtros, etc

• Testes Integrados servem para avaliar a navegação e 
             g               p                  gç
  fluxos entre actions de diferentes controllers. 
  Funcionam de maneira semelhante a um teste 
  Funcionam de maneira semelhante a um teste
  funcional
Ajax
                     Aj
• Rails é o melhor modelo de framework para 
  Ajax
  Aj

• Ajax é codificado em Ruby puro

• Integração com as bibliotecas Prototype e 
  Script.aculo.us
Adicionando Ajax
              Adi i    d Aj
• Na View
  – Apenas trocar form_for para remote_form_for


• Na Action
  – request.xhr? checa se veio chamada via Ajax. Caso 
    contrário redireciona para a mesma action de 
    contrário redireciona para a mesma action de
    antes, que retorna a página toda 
A arma secreta: RJS
          A           t RJS
• Seguindo as convenções, ao utilizarmos Ajax a 
  action add_comment espera encontrar a 
    ti    dd         t               t
  pg
  página:
  – /app/views/blog/add_comment.rjs
Ative e teste o efeito
          Ati     tt       f it
• O ajax é ativado por controller através de seu 
  layout com o método javascript_include_tag
  l    t          ét d j        iti ld t

• Acesse e comprove
  – http://localhost:3000/blog
Blog Pronto!
                       Bl P t !
• Mini Blog criado conforme requerimentos iniciais

• Plus: pequeno brinde via Ajax

• Conseguimos criar entidades e tabelas sem mapear campo‐a‐
  campo manualmente
  campo manualmente
    – deixe o computador trabalhar por nós


• Infraestrutura completa de testes unitários, funcionais e 
  integrados
      g

• Obs: este é um aplicativo de demonstração, muito mais ainda
  Obs: este é um aplicativo de demonstração, muito mais ainda 
  pode ser feito !
Scriptlet!?
                     S i tl t!?
• Rails não utiliza taglibs

• Ruby é simples e expressiva o suficiente para não 
      y      p         p                   p
  precisar de artifícios

• Taglibs são simplificações de lógica

• Podemos fazer tudo de maneira simples e flexível
  Podemos fazer tudo de maneira simples e flexível 
  sem precisar aprender sintaxes complexas de XML
O que não fi
            O      ã fizemos?
                            ?
• Não precisamos recompilar e reinstalar o aplicativo a 
  cada mudança
  cada mudança

• Nã
  Não precisamos reiniciar o servidor a cada mudança
          i        iii           id       d    d

• Não precisamos mapear cada uma das colunas das 
  tabelas para as entidades
  tabelas para as entidades

• Nã
  Não precisamos configurar dezenas de arquivos XML. 
          i         fi      d       d      i    XML
  Basicamente colocamos a senha do banco de dados, 
  apenas
O que não fi
            O      ã fizemos?
                            ?
• Não precisamos usar Javascript para fazer Ajax: a 
  maior parte pode ser feita com Ruby puro
  maior parte pode ser feita com Ruby puro

• Nã
  Não sentimos falta de taglibs: expressões Ruby, 
            i    fl d       lib         õ Rb
  partials foram simples o suficiente

• Não precisamos codificar código‐cola, o framework
  Não precisamos codificar código cola, o framework 
  possui “padrões espertos” afinal, todo aplicativo 
  Web tem a mesma infraestrutura
  Web tem a mesma infraestrutura
Próximos passos?
Próximos passos?

                   Rails no Brasil?
                   Rails no Brasil?
Próximos passos?

                   Rails no Brasil?
                   Rails no Brasil?




 Gostei! Quero me aprofundar
 Gostei! Quero me aprofundar
A dificuldade de aprender Java
A difi ld d d         dJ
Martin Fowler on Rails
        M ti F l         R il
• Famoso escritor de livros especializados em 
  arquitetura de sistemas
  arquitetura de sistemas
• Reconhecido nome na comunidade Java
• Desenvolvendo projetos em Rails
• Celebridade do mundo Java apoiando Rails
  Celebridade do mundo Java apoiando Rails
Rails no Brasil: iniciativa Akit O R il
R il     B il i i i ti Akita On Rails
Ruby on Rails no Brasil
Rb      R il     B il
Próximos Passos
                   Pói      P
• Aprender mais!

   – Programming Ruby (livro gratuito!)
   – http://www.rubycentral.com/book/intro.html

   – Agile Web Development With Rails (livro mais famoso de Rails)
   – http://www.pragmaticprogrammer.com/titles/rails2/
          //                               /     /     /

   – Melhores websites sobre Ruby e Rails
     Melhores websites sobre Ruby e Rails
   – http://del.icio.us/fabioakita/rubyonrails

   – Akita On Rails: principal site de Rails do Brasil
   – http://www.akitaonrails.com
Aprenda mais
                       A    d    i
• Repensando a Web com Rails
   – Primeiro livro de Ruby on Rails em português no Brasil

   – Documentação completa do Rails versão 1.1.2
              ç      p

   – Cada um dos tópicos desta demonstração em detalhes

   – Por Fabio Akita (www.akitaonrails.com)
      • Consultor SAP há 5 anos
      • Gerente de Projetos PMP
      • Desenvolvedor Java há 8 anos
      • Utilizando diversas plataformas de desenvolvimento há 14 anos
                                         de desenvolvimento 14 anos

   – Pela editora Brasport, já disponível!
Quem está por trás do Ruby?
     Q      tá     tá d R b ?
• Ainda hoje, Matz é o responsável por todas as decisões 
  não‐consensuais do Ruby. Ou seja, qualquer 
  divergência quanto à implementação de uma nova 
  funcionalidade é resolvida pelo “ditador benevolente”. 
  Apesar desta “dependência”, a comunidade é forte a 
  A       d t “d        dê i ”          id d é f t
  ponto de sobreviver “caso o Matz seja atropelado por 
  um ônibus Existem pessoas que estão tão inteiradas
  um ônibus”. Existem pessoas que estão tão inteiradas 
  com o código quanto o próprio Matz. Diferentemente 
  de outras tecnologias opensource, não existe uma 
                     g     p        ,
  empresa por trás de suas operações, bancando os 
  custos. O projeto sobrevive de doações feitas pelos 
  usuários satisfeitos e por empresas que conseguiram 
     ái      ti f it                              i
  aumentar sua produtividade utilizando Ruby.
                                              Fonte: ruby‐br.org
Referências
                       Rf ê i
•   www.ruby‐lang.org
•   www.rubyonrails.org
            b      il
•   www.rubyonrails.com.br
             y
•   www.ruby‐br.org
•   Agradecimento especial ao Fabio Akita por 
    A di                 i l F bi Aki
    gentilmente permitir a utilização de diversos slides 
    de suas palestras:
     – www akitaonrails com
       www.akitaonrails.com
        • Palestra: Entendendo Rails
        •Pl
          Palestra: Ruby on Rails no Brasil
                    Rb      R il     B il
Duvídas, Críticas e Sugestões
   D íd C íti          S    tõ
• Para contato:
  – www.jeveaux.com
  – www.portaljava.com
            t lj
  – paulo@jeveaux.com
  – jeveaux@portaljava.com



                         Obrigado a todos!
                         Obrigado a todos!

Mais conteúdo relacionado

Mais procurados

Oficina groovy grails - infoway
Oficina  groovy grails - infowayOficina  groovy grails - infoway
Oficina groovy grails - infoway
Lucas Aquiles
 
Groovy grails
Groovy grailsGroovy grails
Groovy grails
Lucas Aquiles
 
Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Rails
overduka
 
Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on Rails
CJR, UnB
 
Introducao ao Ruby On Rails
Introducao ao Ruby On RailsIntroducao ao Ruby On Rails
Introducao ao Ruby On Rails
Andre Ferraro
 
Javascript levado a serio
Javascript levado a serioJavascript levado a serio
Javascript levado a serio
Jaydson Gomes
 
Curso de Grails
Curso de GrailsCurso de Grails
Curso de Grails
Bruno Nascimento
 
Desenvolvimento em três camadas com PHP 5, MVC e AJAX
Desenvolvimento em três camadas com PHP 5, MVC e AJAXDesenvolvimento em três camadas com PHP 5, MVC e AJAX
Desenvolvimento em três camadas com PHP 5, MVC e AJAX
Otávio Calaça Xavier
 
Nadando em Dinheiro com jQuery
Nadando em Dinheiro com jQueryNadando em Dinheiro com jQuery
Nadando em Dinheiro com jQuery
Reinaldo Junior
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHP
elliando dias
 
Introdução ao CakePHP
Introdução ao CakePHPIntrodução ao CakePHP
Introdução ao CakePHP
2km interativa!
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVC
Michael Douglas
 
Grails
GrailsGrails
Grails
Alex Guido
 
Curso ASP.NET MVC 3 - Vinicius Quaiato
Curso ASP.NET MVC 3 - Vinicius QuaiatoCurso ASP.NET MVC 3 - Vinicius Quaiato
Curso ASP.NET MVC 3 - Vinicius Quaiato
Vinicius Quaiato
 
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
Rodrigo Urubatan
 
Web open source
Web open sourceWeb open source
Web open source
Carlos Maniero
 
Javascript levado a sério
Javascript levado a sérioJavascript levado a sério
Javascript levado a sério
saspi2
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
Rangel Javier
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Rodrigo Urubatan
 
Desafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFDesafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSF
Rafael Ponte
 

Mais procurados (20)

Oficina groovy grails - infoway
Oficina  groovy grails - infowayOficina  groovy grails - infoway
Oficina groovy grails - infoway
 
Groovy grails
Groovy grailsGroovy grails
Groovy grails
 
Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Rails
 
Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on Rails
 
Introducao ao Ruby On Rails
Introducao ao Ruby On RailsIntroducao ao Ruby On Rails
Introducao ao Ruby On Rails
 
Javascript levado a serio
Javascript levado a serioJavascript levado a serio
Javascript levado a serio
 
Curso de Grails
Curso de GrailsCurso de Grails
Curso de Grails
 
Desenvolvimento em três camadas com PHP 5, MVC e AJAX
Desenvolvimento em três camadas com PHP 5, MVC e AJAXDesenvolvimento em três camadas com PHP 5, MVC e AJAX
Desenvolvimento em três camadas com PHP 5, MVC e AJAX
 
Nadando em Dinheiro com jQuery
Nadando em Dinheiro com jQueryNadando em Dinheiro com jQuery
Nadando em Dinheiro com jQuery
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHP
 
Introdução ao CakePHP
Introdução ao CakePHPIntrodução ao CakePHP
Introdução ao CakePHP
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVC
 
Grails
GrailsGrails
Grails
 
Curso ASP.NET MVC 3 - Vinicius Quaiato
Curso ASP.NET MVC 3 - Vinicius QuaiatoCurso ASP.NET MVC 3 - Vinicius Quaiato
Curso ASP.NET MVC 3 - Vinicius Quaiato
 
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
 
Web open source
Web open sourceWeb open source
Web open source
 
Javascript levado a sério
Javascript levado a sérioJavascript levado a sério
Javascript levado a sério
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
 
Desafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFDesafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSF
 

Semelhante a Ruby On Rails

Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
Pedro Sousa
 
Introdução ao Asp.Net Mvc
Introdução ao Asp.Net MvcIntrodução ao Asp.Net Mvc
Introdução ao Asp.Net Mvc
Giovanni Bassi
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
Thiago Cifani
 
Rails na prática
Rails na práticaRails na prática
Rails na prática
Marco Antonio Filho
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
Diego Tremper
 
Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)
elliando dias
 
Ruby On Rails - Porque Utilizar?
Ruby On Rails - Porque Utilizar?Ruby On Rails - Porque Utilizar?
Ruby On Rails - Porque Utilizar?
David Ruiz
 
Introducao ao desenvolvimento web com Rails
Introducao ao desenvolvimento web com RailsIntroducao ao desenvolvimento web com Rails
Introducao ao desenvolvimento web com Rails
Katon Agência Digital
 
Netbeans 6.0: Aplicações Java Desktop
Netbeans 6.0: Aplicações Java DesktopNetbeans 6.0: Aplicações Java Desktop
Netbeans 6.0: Aplicações Java Desktop
elliando dias
 
Integracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlIntegracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControl
Diego Tremper
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
Manuel Lemos
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOL
targinosilveira
 
Desenvolvimento web ágil com Django
Desenvolvimento web ágil com DjangoDesenvolvimento web ágil com Django
Desenvolvimento web ágil com Django
Igor Sobreira
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControl
Diego Tremper
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
Felipe Ribeiro
 
Desenvolvimento em .Net - Introducao A Framework
Desenvolvimento em .Net - Introducao A FrameworkDesenvolvimento em .Net - Introducao A Framework
Desenvolvimento em .Net - Introducao A Framework
Vitor Silva
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
michel adriano medeiros
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
Diego Tremper
 
Melhorando a performance de aplicações com o uso do MemCache
Melhorando a performance de aplicações com o uso do MemCacheMelhorando a performance de aplicações com o uso do MemCache
Melhorando a performance de aplicações com o uso do MemCache
Elton Minetto
 
ISEPonRails
ISEPonRailsISEPonRails
ISEPonRails
José Mota
 

Semelhante a Ruby On Rails (20)

Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
Introdução ao Asp.Net Mvc
Introdução ao Asp.Net MvcIntrodução ao Asp.Net Mvc
Introdução ao Asp.Net Mvc
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Rails na prática
Rails na práticaRails na prática
Rails na prática
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)
 
Ruby On Rails - Porque Utilizar?
Ruby On Rails - Porque Utilizar?Ruby On Rails - Porque Utilizar?
Ruby On Rails - Porque Utilizar?
 
Introducao ao desenvolvimento web com Rails
Introducao ao desenvolvimento web com RailsIntroducao ao desenvolvimento web com Rails
Introducao ao desenvolvimento web com Rails
 
Netbeans 6.0: Aplicações Java Desktop
Netbeans 6.0: Aplicações Java DesktopNetbeans 6.0: Aplicações Java Desktop
Netbeans 6.0: Aplicações Java Desktop
 
Integracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlIntegracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControl
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOL
 
Desenvolvimento web ágil com Django
Desenvolvimento web ágil com DjangoDesenvolvimento web ágil com Django
Desenvolvimento web ágil com Django
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControl
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
Desenvolvimento em .Net - Introducao A Framework
Desenvolvimento em .Net - Introducao A FrameworkDesenvolvimento em .Net - Introducao A Framework
Desenvolvimento em .Net - Introducao A Framework
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Melhorando a performance de aplicações com o uso do MemCache
Melhorando a performance de aplicações com o uso do MemCacheMelhorando a performance de aplicações com o uso do MemCache
Melhorando a performance de aplicações com o uso do MemCache
 
ISEPonRails
ISEPonRailsISEPonRails
ISEPonRails
 

Mais de Paulo César M Jeveaux

Wine.com.br - De zero a 300 milhões de faturamento na mesma plataforma
Wine.com.br - De zero a 300 milhões de faturamento na mesma plataformaWine.com.br - De zero a 300 milhões de faturamento na mesma plataforma
Wine.com.br - De zero a 300 milhões de faturamento na mesma plataforma
Paulo César M Jeveaux
 
Empreendedorismo além do mundo da fantasia
Empreendedorismo além do mundo da fantasiaEmpreendedorismo além do mundo da fantasia
Empreendedorismo além do mundo da fantasia
Paulo César M Jeveaux
 
Case Giran 2011: os desafios no uso de práticas ágeis no dia-a-dia de uma sta...
Case Giran 2011: os desafios no uso de práticas ágeis no dia-a-dia de uma sta...Case Giran 2011: os desafios no uso de práticas ágeis no dia-a-dia de uma sta...
Case Giran 2011: os desafios no uso de práticas ágeis no dia-a-dia de uma sta...
Paulo César M Jeveaux
 
E-commerce Além dos Sites
E-commerce Além dos SitesE-commerce Além dos Sites
E-commerce Além dos Sites
Paulo César M Jeveaux
 
Controle de versão com GIT
Controle de versão com GITControle de versão com GIT
Controle de versão com GIT
Paulo César M Jeveaux
 
Resenha Rework por Jeveaux
Resenha Rework por JeveauxResenha Rework por Jeveaux
Resenha Rework por Jeveaux
Paulo César M Jeveaux
 
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-diaCase Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
Paulo César M Jeveaux
 
SCRUM e XP - Desenvolvimento Ágil de Software - Experiências e relatos
SCRUM e XP - Desenvolvimento Ágil de Software - Experiências e relatosSCRUM e XP - Desenvolvimento Ágil de Software - Experiências e relatos
SCRUM e XP - Desenvolvimento Ágil de Software - Experiências e relatos
Paulo César M Jeveaux
 
Desafios no e-commerce brasileiro
Desafios no e-commerce brasileiroDesafios no e-commerce brasileiro
Desafios no e-commerce brasileiro
Paulo César M Jeveaux
 
Desenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUMDesenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUM
Paulo César M Jeveaux
 
Negociação de contratos de projetos de software
Negociação de contratos de projetos de softwareNegociação de contratos de projetos de software
Negociação de contratos de projetos de software
Paulo César M Jeveaux
 
Desenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUMDesenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUM
Paulo César M Jeveaux
 
Turbinando sua aplicação com Lucene, Solr e Hibernate Search
Turbinando sua aplicação com Lucene, Solr e Hibernate SearchTurbinando sua aplicação com Lucene, Solr e Hibernate Search
Turbinando sua aplicação com Lucene, Solr e Hibernate Search
Paulo César M Jeveaux
 
Palestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnitPalestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnit
Paulo César M Jeveaux
 
Extreme Programming - XP
Extreme Programming - XPExtreme Programming - XP
Extreme Programming - XP
Paulo César M Jeveaux
 
Desenvolvimento Ágil com SCRUM
Desenvolvimento Ágil com SCRUMDesenvolvimento Ágil com SCRUM
Desenvolvimento Ágil com SCRUM
Paulo César M Jeveaux
 
Certificação Digital
Certificação DigitalCertificação Digital
Certificação Digital
Paulo César M Jeveaux
 
AOP - JustJava - 2005
AOP - JustJava - 2005AOP - JustJava - 2005
AOP - JustJava - 2005
Paulo César M Jeveaux
 
AOP - ESJUG - 2005
AOP - ESJUG - 2005AOP - ESJUG - 2005
AOP - ESJUG - 2005
Paulo César M Jeveaux
 
Comunidades Virtuais Java - Conexão Java - 2004
Comunidades Virtuais Java - Conexão Java - 2004Comunidades Virtuais Java - Conexão Java - 2004
Comunidades Virtuais Java - Conexão Java - 2004
Paulo César M Jeveaux
 

Mais de Paulo César M Jeveaux (20)

Wine.com.br - De zero a 300 milhões de faturamento na mesma plataforma
Wine.com.br - De zero a 300 milhões de faturamento na mesma plataformaWine.com.br - De zero a 300 milhões de faturamento na mesma plataforma
Wine.com.br - De zero a 300 milhões de faturamento na mesma plataforma
 
Empreendedorismo além do mundo da fantasia
Empreendedorismo além do mundo da fantasiaEmpreendedorismo além do mundo da fantasia
Empreendedorismo além do mundo da fantasia
 
Case Giran 2011: os desafios no uso de práticas ágeis no dia-a-dia de uma sta...
Case Giran 2011: os desafios no uso de práticas ágeis no dia-a-dia de uma sta...Case Giran 2011: os desafios no uso de práticas ágeis no dia-a-dia de uma sta...
Case Giran 2011: os desafios no uso de práticas ágeis no dia-a-dia de uma sta...
 
E-commerce Além dos Sites
E-commerce Além dos SitesE-commerce Além dos Sites
E-commerce Além dos Sites
 
Controle de versão com GIT
Controle de versão com GITControle de versão com GIT
Controle de versão com GIT
 
Resenha Rework por Jeveaux
Resenha Rework por JeveauxResenha Rework por Jeveaux
Resenha Rework por Jeveaux
 
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-diaCase Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
 
SCRUM e XP - Desenvolvimento Ágil de Software - Experiências e relatos
SCRUM e XP - Desenvolvimento Ágil de Software - Experiências e relatosSCRUM e XP - Desenvolvimento Ágil de Software - Experiências e relatos
SCRUM e XP - Desenvolvimento Ágil de Software - Experiências e relatos
 
Desafios no e-commerce brasileiro
Desafios no e-commerce brasileiroDesafios no e-commerce brasileiro
Desafios no e-commerce brasileiro
 
Desenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUMDesenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUM
 
Negociação de contratos de projetos de software
Negociação de contratos de projetos de softwareNegociação de contratos de projetos de software
Negociação de contratos de projetos de software
 
Desenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUMDesenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUM
 
Turbinando sua aplicação com Lucene, Solr e Hibernate Search
Turbinando sua aplicação com Lucene, Solr e Hibernate SearchTurbinando sua aplicação com Lucene, Solr e Hibernate Search
Turbinando sua aplicação com Lucene, Solr e Hibernate Search
 
Palestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnitPalestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnit
 
Extreme Programming - XP
Extreme Programming - XPExtreme Programming - XP
Extreme Programming - XP
 
Desenvolvimento Ágil com SCRUM
Desenvolvimento Ágil com SCRUMDesenvolvimento Ágil com SCRUM
Desenvolvimento Ágil com SCRUM
 
Certificação Digital
Certificação DigitalCertificação Digital
Certificação Digital
 
AOP - JustJava - 2005
AOP - JustJava - 2005AOP - JustJava - 2005
AOP - JustJava - 2005
 
AOP - ESJUG - 2005
AOP - ESJUG - 2005AOP - ESJUG - 2005
AOP - ESJUG - 2005
 
Comunidades Virtuais Java - Conexão Java - 2004
Comunidades Virtuais Java - Conexão Java - 2004Comunidades Virtuais Java - Conexão Java - 2004
Comunidades Virtuais Java - Conexão Java - 2004
 

Ruby On Rails

  • 1. Conhecendo Ruby on Rails Conhecendo Ruby on Rails Jevô Paulo César M. Jeveaux www.jeveaux.com j
  • 2. Jevô Jô • Consultor e Arquiteto Java • Desenvolvedor Java há 7 anos Java há 7 anos • Administrador do PortalJava e ESJUG • Palestrante‐Entusiasta‐Evangelista Java e  agora também Rails =)
  • 3. Agenda Ad • A linguagem Ruby • Ruby on Rails • O exemplo: Blog O exemplo: Blog • Scaffold • Testes • Ajax • Como continuar e saber mais C ti b i
  • 4. Ruby Rb • Linguagem de programação • Open Source • Orientada a objetos j • Linguagem de scripts dinâmica e interpretada de scripts dinâmica e interpretada • Criada por Yukihiro “matz” Matsumoto em 1993  d kh “ ” e disponibilizada ao público em 1995
  • 5. Ruby Rb • Interpretada – Fedback imediato no desenvolvimento – Perde um pouco em performance Perde um pouco em performance • Totalmente orientada a objetos –T d é Tudo é um objeto bj t – 5 é uma instância da classe Fixnum – Classes, herança, métodos, closures, etc
  • 6. Script Dinâmico e Interpretado S i t Di â i It td • Possibilidade de realizar chamadas ao Sistema  Operacional diretamente O i l di t t • Poderosas operações com strings e Expressões  Regulares • Feedback imediato no desenvolvimento Feedback imediato no desenvolvimento
  • 7. Rápida e Fácil Rá id Fá il • Não é necessário declarar variáveis • Variáveis não tem tipo (não são “tipadas”) Variáveis não tem tipo (não são  tipadas ) • A sintaxe é simples e consistente; • A gestão de memória é automática – Garbage Collector
  • 8. Com e sem tipagem C ti • Variáveis não possuem tipagem estática  (como em Smalltalk e Python) ( S llt lk P th ) • Dados fortemente tipados – O dado em memória é tipado e checado em  tempo de execução (Runtime) tempo de execução (Runtime)
  • 9. Multiencadeada M lti dd • Multiencadeamento é a implementação de  multitarefa dentro de um único processo ltit f d t d úi – Execução mais lenta ç – Os recursos são compartilhados em memória e  devem ter o acesso sincronizado d t i id – Várias tarefas executam de forma concorrente – O multiencademento do Ruby é implementado no  próprio interpretador próprio interpretador
  • 10. Ruby on Rails Rb R il • Framework para desenvolvimento de aplicações Web; • Criado com a linguagem Ruby; • Desenvolvido por David Heinemeier Hansson, da  37signals; • Extraído de um produto real: o Basecamp • De um produto real para um mundo real
  • 11. O que é Rails? O é R il ? • Framework completo para desenvolvimento de aplicativos  Web • Pacote MVC (Model‐View‐Controller) – Action Pack (Action Controller e Action View) – Active Record • Suporte a envio e recebimento de e‐mails – A ti M il Action Mailer • Suporte a Web Services Suporte a Web Services – Action WebServices
  • 13. Começando C d • Instalar Ruby 1.8.6 – www ruby lang org/en/downloads www.ruby‐lang.org/en/downloads • Instalar RubyGems – rubyforge.org/frs/?group_id=126 • I t l R il (li h d Instalar Rails (linha de comando) d) – gem install rails • Instalar MySQL (suporta outros bancos) Instalar MySQL (suporta outros bancos) – dev.mysql.com/downloads
  • 14. Começo Fácil C Fá il • Windows – I t t R il Instant Rails • wiki.rubyonrails.com/rails/pages/InstantRails • Mac e Linux Mac e Linux – FiveRuns RB‐Install • www.fiveruns.com/products/rm/install fi / d t / /i t ll • Linux – sudo apt get install ruby irb rdoc apt-get
  • 15. O exemplo O l • Sistema de Blog – Baseado no exemplo do blog do screencast de  David Hansson no rubyonrails.org. O exemplo se  chama: “Creating a weblog in 15 minutes” • http://media.rubyonrails.org/video/rails_take2_with_sound.mov p // y g/ /
  • 16. O que o blog terá O bl t á • Uma tabela de Posts • Uma tabela associada de Comments • Uma tela de listagem de Posts Uma tela de listagem de Posts • Uma tela de criação e edição de Posts ç ç • Uma tela de detalhes do Post • No detalhe do Post veremos e adicionaremos  Comments
  • 17. Criando o projeto Ci d jt • rails <projeto> – rails blog
  • 18. Criando o banco de dados Ci d b d dd • Criando o banco de dados no MySQL – create d database <projeto>_<ambiente> b j bi
  • 19. Ambientes A bi t • Rails vem preparado para lidar com três  ambientes diferentes: bi t dif t – Development (sandbox) – Test (testes unitários funcionais integrados) (testes unitários, funcionais, integrados) – Production (produção)
  • 20. A aplicação criada A li ã id • Estrutura de diretórios
  • 21. Configurando C fi d • Configuração mínima necessária: Banco de  dados! dd !
  • 22. Criando o Controller Ci d C t ll • script/generate controller <nome> – script/generate controller Blog /
  • 23. Controllers e Actions C t ll A ti • Todo Controller fica no diretório: – /app/controllers/<nome> controller.rb /app/controllers/<nome>_controller.rb • Todo Controller herda a classe ApplicationController Todo Controller herda a classe ApplicationController • Todo aplicativo Rails é criado com uma classe chamada  ApplicationController, que herda de ActionController::Base, e  é base de todos os outros controllers • Todo método de um controller é chamado de Action
  • 24. Criando um Action Ci d A ti • Uma classe Controller pode ter várias Actions. def index #ffaca alguma coisa l i render => :text “HelloWorld!” end
  • 25. Executando a aplicação E td li ã • Execute – script/server / • Irá iniciar o servidor de testes padrão, WEBRick na p , porta 3000. • Acesse: http://localhost:3000 Acesse: http://localhost:3000
  • 27. Roteamento Rt t • Como acessar o Controller e Action criados? – Roteamento customizável: config/routes.rb – http://localhost:3000/:controller/:action/:id
  • 29. Executando uma Action E td A ti • Seguindo a regra anterior de roteamento – http://localhost:3000/blog/index – blog = app/controller/blog_controller.rb – index = método index em BlogController
  • 30. Convenções e comportamento C õ t t • Ao final de toda Action, Rails chamará uma view com  o mesmo nome da Action, no seguinte diretório: o mesmo nome da Action no seguinte diretório: – /app/views/<controller>/<action>.<ext> • A extensão do arquivo pode ser: q p – .rhtml ‐ Embedded Ruby (HTML+Ruby) – .rxml ‐ XML Builder (Ruby puro) ( yp ) – .rjs ‐ Javascript Generator (Ruby puro) • Este fluxo pode ser interrompido com uma chamada  explícita ao método render ou redirect_to
  • 31. Criando uma View Ci d Vi • Criar index.rhtml em /app/views/blog/ <h3>HelloWorld! (view)</h3> • Comentar a linha com o render no método  index do BlogController • Acesse novamente e comprove Acesse novamente e comprove – http://localhost:3000/blog/index
  • 32. Criando C i d uma Vi View
  • 33. Criando C i d uma Vi View
  • 34. Criando C i d uma Vi View
  • 35. Criando a entidade Post Ci d tid d P t • script/generate model <nome> – script/generate model Post /
  • 36. Mantendo sempre a ordem Mtd d • Migration – Manutenção de tabelas usando Ruby – Independente de banco Independente de banco – Também suporta SQL nativo
  • 37. Rake Rk • Rake é a ferramenta para execução de tarefas  implementadas em Ruby. Rake é o Make para  il td Rb Rk é Mk Rubyy • Primeira tarefa: manutenção das tabelas – rake migrate
  • 38. rake migrate kit • Toda entidade criada com script/generate gera um arquivo de  Migration no diretório db/migrate Migration no diretório db/migrate • Todo arquivo Migration é numerado: Todo arquivo Migration é numerado: – 001_create_posts.rb • O comando rake migrate executa os arquivos em db/migrate • O gerenciamento do banco de dados é feito totalmente em  Ruby
  • 39. Mapeando as tabelas M d tbl • A classe Post já é capaz de gerenciar os dados da  tabela no banco de dados tabela no banco de dados – ActiveRecord • Não há necessidade de explicitar o mapeamento das  colunas do banco com atributos da classe • Rails não proíbe nada: se for necessário existe como  mapear uma coluna para outro atributo de nome  mapear uma coluna para outro atributo de nome diferente
  • 40. Mais convenções Mi õ • Toda entidade é criada no diretório padrão: – /app/models/<controller>/<model>.rb pp • Toda entidade herda diretamente da classe  ActiveRecord::Base • Não é preciso mapear manualmente as colunas da tabela • Convenção: a classe tem o nome no singular (Post), a tabela  tem o nome do plural (posts) p (p ) • Convenção: Surrogate Key, toda tabela tem uma chave Convenção: Surrogate Key, toda tabela tem uma chave  primária chamada “id” que é um número auto‐incrementável
  • 41. Anotando os Modelos Atd Mdl • Plugin de Dave Thomas • Instalação (via internet): – script/plugin install annotate_models • Utilização (via rake): – rake annotate_models • Lê a tabela do banco de dados e coloca um Lê a tabela do banco de dados e coloca um  cabeçalho como comentário na classe entidade
  • 42. Scaffold S ff ld • Colocar o método scaffold :<model> no controller é  suficiente • Telas CRUD (Create, Read, Update, Delete) geradas  automaticamente em tempo de execução (runtime) automaticamente em tempo de execução (runtime) • CUIDADO: Rails NÃO é Scaffold • Scaffold é apenas uma pequena funcionalidade para  facilitar prototipação fl
  • 46. Configurando o Post C fi d Pt • Acrecentando uma validação – validate_presence_of :title
  • 48. Melhorando o Post M lh d Pt • Criando novas colunas com Migration • script/generate migration <atividade> – script/generate migration AdicionarColunasPost pg g
  • 51. Criando um novo Post Ci d Pt • Testando sem reiniciar • Verifique as novas colunas
  • 52. Criando um novo Post Ci d Pt • Testando sem reiniciar • Verifique as novas colunas
  • 53. Gerando o Scaffold G d S ff ld • script/generate scaffold <model> <controller> – script/generate scaffold Post Blog
  • 54. Scaffold gerado! S ff ld d! • Toda execução que era automática agora está  exposta em arquivos que podemos editar  t i d dit como quisermos q • Provado: Rails não se restringe a Scaffold  automático á • Podemos mudar a listagem de Posts por Podemos mudar a listagem de Posts, por  exemplo, em: – /app/views/blog/list.rhtml
  • 58. Criando a entidade Comment Ci d tid d C t • Hora de criar a entidade Comment – script/generate model Comment / • Lembre‐se: esta entidade será associada a um Lembre se: esta a um  Post
  • 59. Rake: Organizando novamente Rk O id t • Comment pertence a Post através da coluna  post_id. t id • Convenção de Chave Estrangeira: <classe> id Convenção de Chave Estrangeira: <classe>_id • rake migrate
  • 62. Criando as associações Ci d iõ • Na classe Post – has_many :comments • Na classe Comments – belongs_to :post
  • 65. Usando as associações Ud iõ • Criar um formulário de Comment na tela de  detalhe de um Post d t lh d Pt – /app/views/blog/show.rhtml / pp/ / g/
  • 66. Partials P ti l • “Don’t Repeat Yourself” (DRY) • Uma das maneiras de separar trechos de código das maneiras de separar de código • Toda partial começa com underline “_” – <%= render :partial => quot;commentquot;, :collection =>  d lquot; quot; ll @post.comments %> • Associação has_many em Post automaticamente fornece um  hash chamado comments (nome da outra entidade no plural)
  • 67. Action para Comment A ti C t • <% form_for :comment, @comment, :url => {:action => 'add comment', :id => add_comment @post } do |f| %> – Action esperada: add_comment – Passando parâmetros: params[:id] e Passando parâmetros: params[:id] e  params[:comment] – Hash params[:comment] contém todos os  campos do formulário enviado. df lá i id
  • 70. Testes Unitários T t U itá i • Toda nova entidade ganha um arquivo para  teste unitário em: tt itá i – /app/test/unit/<entidade>_test.rb / pp/ / / • Devemos seguir Test‐Driven Development: – “Se não vale a pena testar para que estamos Se não vale a pena testar, para que estamos  codificando?”
  • 71. Ambiente de Testes A bi t d T t • Os testes acontecem em banco de dados separado  do desenvolvimento do desenvolvimento – <projeto>_test • Cada teste roda de maneira isolada: os dados  modificados em um teste não afetam outro teste difi d t t ã ft ttt • Cada teste unitário tem um arquivo de “fixture”,  carga de dados para testes: g p – /app/test/fixture/<tabela>.yml
  • 72. Rodando os Testes Unitários Rd d T t U itá i • Todos os testes unitários – rake test:units • Apenas um teste unitário: – ruby test/unit/<entidade>_test.rb
  • 73. Testes Funcionais Tt F i i • Todo novo controller ganha uma classe de teste em: –/ /app/test/functional/<classe>_controller_test.rb /t t/f ti l/< l > t ll t t b • Devemos testar cada action do controller • Métodos como get e post simulam navegação com  um browser um browser • Todos os testes funcionais: – rake test: u ct o a s a e test:functionals • Apenas um testes funcional: – r b test/f nctional/<classe> controller test rb ruby test/functional/<classe>_controller_test.rb
  • 74. Testes Tt • Testes Unitários devem testar todos os aspectos da  entidade como associações, validações, callbacks, etc entidade como associações validações callbacks etc • Testes Funcionais devem testar todas as actions de  um mesmo controller, todos os fluxos,  um mesmo controller todos os fluxos redirecionamentos, filtros, etc • Testes Integrados servem para avaliar a navegação e  g p gç fluxos entre actions de diferentes controllers.  Funcionam de maneira semelhante a um teste  Funcionam de maneira semelhante a um teste funcional
  • 75. Ajax Aj • Rails é o melhor modelo de framework para  Ajax Aj • Ajax é codificado em Ruby puro • Integração com as bibliotecas Prototype e  Script.aculo.us
  • 76. Adicionando Ajax Adi i d Aj • Na View – Apenas trocar form_for para remote_form_for • Na Action – request.xhr? checa se veio chamada via Ajax. Caso  contrário redireciona para a mesma action de  contrário redireciona para a mesma action de antes, que retorna a página toda 
  • 77. A arma secreta: RJS A t RJS • Seguindo as convenções, ao utilizarmos Ajax a  action add_comment espera encontrar a  ti dd t t pg página: – /app/views/blog/add_comment.rjs
  • 78. Ative e teste o efeito Ati tt f it • O ajax é ativado por controller através de seu  layout com o método javascript_include_tag l t ét d j iti ld t • Acesse e comprove – http://localhost:3000/blog
  • 79. Blog Pronto! Bl P t ! • Mini Blog criado conforme requerimentos iniciais • Plus: pequeno brinde via Ajax • Conseguimos criar entidades e tabelas sem mapear campo‐a‐ campo manualmente campo manualmente – deixe o computador trabalhar por nós • Infraestrutura completa de testes unitários, funcionais e  integrados g • Obs: este é um aplicativo de demonstração, muito mais ainda Obs: este é um aplicativo de demonstração, muito mais ainda  pode ser feito !
  • 80. Scriptlet!? S i tl t!? • Rails não utiliza taglibs • Ruby é simples e expressiva o suficiente para não  y p p p precisar de artifícios • Taglibs são simplificações de lógica • Podemos fazer tudo de maneira simples e flexível Podemos fazer tudo de maneira simples e flexível  sem precisar aprender sintaxes complexas de XML
  • 81. O que não fi O ã fizemos? ? • Não precisamos recompilar e reinstalar o aplicativo a  cada mudança cada mudança • Nã Não precisamos reiniciar o servidor a cada mudança i iii id d d • Não precisamos mapear cada uma das colunas das  tabelas para as entidades tabelas para as entidades • Nã Não precisamos configurar dezenas de arquivos XML.  i fi d d i XML Basicamente colocamos a senha do banco de dados,  apenas
  • 82. O que não fi O ã fizemos? ? • Não precisamos usar Javascript para fazer Ajax: a  maior parte pode ser feita com Ruby puro maior parte pode ser feita com Ruby puro • Nã Não sentimos falta de taglibs: expressões Ruby,  i fl d lib õ Rb partials foram simples o suficiente • Não precisamos codificar código‐cola, o framework Não precisamos codificar código cola, o framework  possui “padrões espertos” afinal, todo aplicativo  Web tem a mesma infraestrutura Web tem a mesma infraestrutura
  • 84. Próximos passos? Rails no Brasil? Rails no Brasil?
  • 85. Próximos passos? Rails no Brasil? Rails no Brasil? Gostei! Quero me aprofundar Gostei! Quero me aprofundar
  • 87. Martin Fowler on Rails M ti F l R il • Famoso escritor de livros especializados em  arquitetura de sistemas arquitetura de sistemas • Reconhecido nome na comunidade Java • Desenvolvendo projetos em Rails • Celebridade do mundo Java apoiando Rails Celebridade do mundo Java apoiando Rails
  • 88. Rails no Brasil: iniciativa Akit O R il R il B il i i i ti Akita On Rails
  • 90. Próximos Passos Pói P • Aprender mais! – Programming Ruby (livro gratuito!) – http://www.rubycentral.com/book/intro.html – Agile Web Development With Rails (livro mais famoso de Rails) – http://www.pragmaticprogrammer.com/titles/rails2/ // / / / – Melhores websites sobre Ruby e Rails Melhores websites sobre Ruby e Rails – http://del.icio.us/fabioakita/rubyonrails – Akita On Rails: principal site de Rails do Brasil – http://www.akitaonrails.com
  • 91. Aprenda mais A d i • Repensando a Web com Rails – Primeiro livro de Ruby on Rails em português no Brasil – Documentação completa do Rails versão 1.1.2 ç p – Cada um dos tópicos desta demonstração em detalhes – Por Fabio Akita (www.akitaonrails.com) • Consultor SAP há 5 anos • Gerente de Projetos PMP • Desenvolvedor Java há 8 anos • Utilizando diversas plataformas de desenvolvimento há 14 anos de desenvolvimento 14 anos – Pela editora Brasport, já disponível!
  • 92. Quem está por trás do Ruby? Q tá tá d R b ? • Ainda hoje, Matz é o responsável por todas as decisões  não‐consensuais do Ruby. Ou seja, qualquer  divergência quanto à implementação de uma nova  funcionalidade é resolvida pelo “ditador benevolente”.  Apesar desta “dependência”, a comunidade é forte a  A d t “d dê i ” id d é f t ponto de sobreviver “caso o Matz seja atropelado por  um ônibus Existem pessoas que estão tão inteiradas um ônibus”. Existem pessoas que estão tão inteiradas  com o código quanto o próprio Matz. Diferentemente  de outras tecnologias opensource, não existe uma  g p , empresa por trás de suas operações, bancando os  custos. O projeto sobrevive de doações feitas pelos  usuários satisfeitos e por empresas que conseguiram  ái ti f it i aumentar sua produtividade utilizando Ruby. Fonte: ruby‐br.org
  • 93. Referências Rf ê i • www.ruby‐lang.org • www.rubyonrails.org b il • www.rubyonrails.com.br y • www.ruby‐br.org • Agradecimento especial ao Fabio Akita por  A di i l F bi Aki gentilmente permitir a utilização de diversos slides  de suas palestras: – www akitaonrails com www.akitaonrails.com • Palestra: Entendendo Rails •Pl Palestra: Ruby on Rails no Brasil Rb R il B il
  • 94. Duvídas, Críticas e Sugestões D íd C íti S tõ • Para contato: – www.jeveaux.com – www.portaljava.com t lj – paulo@jeveaux.com – jeveaux@portaljava.com Obrigado a todos! Obrigado a todos!