Desenvolvimento Ágil para Web
     com Ruby on Rails
Ruby




                 Release público em 1995




Ruby is designed to make programmers happy
PragDave




2000 – Ocidente
Ruby
●   Melhor amigo do desenvolvedor
●   Legível e Humana
●   Perl, Smalltalk, Ada e LISP
●   Orientada a Objetos
●   Extremamente Flexível
Características do Ruby
●   A sintaxe é enxuta
●   Tudo é objeto
●   Geração de código em tempo real
●   Fortemente Tipada
●   Tipagem dinâmica
●   Closures Reais
Características do Ruby
●   Classes abertas
●   Garbage Collector
●   Multi-plataforma
●   Herança Simples
Vantagens
●   Memoria controlada automaticamente
●   Linguagem humana
●   Simplicidade
●   Tipagem Dinâmica
●   Extensibilidade
●   simbolos
Desvantagens
●   Maquina Virtual Lenta (1.8)
●   Matemática Intensa – Estatísticas e fins cientificos
●   Threading – Green Threading/ melhora no ruby 1.9 (jruby)
Instalando Ruby
●   Ubuntu - sudo apt-get install ruby irb
●   Windows - http://rubyforge.org/projects/rubyinstaller/
●   easyrails
Escopo Variáveis
●   thiago – variavel local
●   @thiago – variavel de instancia
●   @@thiago – variavel de classe
●   $thiago – variavel global
Classes em Ruby


class Personagem

 def initialize(tipo, nome)
  @tipo = tipo
  @nome = nome
 end

end
Classes em Ruby

thiago = Personagem.new(:ator, "Thiago Cifani")

marano = Personagem.new(:revisor, "Thiago
Marano")
Classes em Ruby

def to_s
 "#{@nome} é um #{@tipo}"
end
Classes em Ruby
def nome
 @nome
end

def tipo
 @tipo
end

def nome=(value)
  @nome = value
end

def tipo=(value)
 @tipo = value
end
Classes em Ruby




attr_accessor :nome, :tipo
Controle de Acesso
class Test               class Test
public                    def method1
 def method1
                          end
 end
                          def method2
 protected                end
 def method2              def method3
 end                      end

  private
                          public :method1
 def method3
end                       protected :method2
                          private :method2
end                      end
Herança Simples




   class B < A
   end
Livros OpenSource
●   http://aprendaaprogramar.rubyonrails.pro.br/
●   http://why.nomedojogo.com/
try {
        BufferedReader in = new BufferedReader(new
FileReader("nome do arquivo"));
            String str;
            while (in.ready()) {
                str = in.readLine();
                process(str);
            }
            in.close();
    } catch (IOException e) {
    }




  teste = File.readlines("/home/thiagocifani/Documentos/txt.txt")
  puts teste
DEMO
DHH 2004
BaseCamp
Rails: o que é ?



  Framework baseado em Ruby que facilita o
desenvolvimento web, fazendo-o com agilidade e
                produtividade
“Eles servem mais de 23 milhões de visitantes por mês. A conversão resultou
em 20 mil linhas de Ruby ao invés de 120 mil linhas de Java, e mais importante,
Facilitou a dificuldade que tinham com manutenção. Eles também finalizaram a
escrita do programa com apenas 3 meses com 4 desenvolvedores. Uma vez
completo e otimizado o site deles é mais rapido do que antes.”
Rails instalação
●   Sudo apt-get install rubygems
●   Sudo gem update –system
●   Sudo gem install rails
Rails - Filosofia


●   Convention over Configuration
●   DRY - Don't repeat yourself
●   KISS – Keep it simple stupid
●   Diversão
Convention over Configuration
●   Grande parte do desenvolvimento segue
    padrões de convenção.
●   Ex.: Para o model venda, temos uma tabela no
    banco de dados chamada vendas.
●   Resume-se em menos código e menos
    repetição.
Convention over Configuration
●   Nomes de Arquivos
●   Nomes de Tabelas no BD
●   Mapeamentos
●   Chaves do BD
●   Nome das Classes
●   Ambientes
Don't Repeat Yourself
●   Todo código gerado deve ficar apenas em um
    local, não deve haver repetição de código em
    outras áreas da aplicação.
●   Ex.: Active Record – Não é necessário colocar
    os códigos de CRUD no modelo, nome das
    colunas, etc.
Don't Repeat Yourself
 development:
   adapter: sqlite3
   database: db/development.sqlite3
   pool: 5
   timeout: 5000
 test:
   adapter: sqlite3
   database: db/test.sqlite3
   pool: 5
   timeout: 5000

 production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000
Don't Repeat Yourself
●   Gems
●   Plugins
●   Generators
●   Templates
●   Partials
Keep it Simple Stupid
●   Simplicidade acima de tudo
●   Refatoração
●   Testes legíveis
●   Código enxuto
Comandos
●   Scaffolding
●   Migrations
●   script/server
●   script/generate model / controller / view
●   rake
MVC
●   Model - Parte da aplicação que faz ligação com
    o banco de dados.
●   View – Interface com o usuário.
●   Controller – Responsável por receber as
    requisições feitas pela aplicação e executar as
    ações necessárias para atender essas
    requisições. É onde definimos a lógica do
    funcionamento da aplicação.
REST

●   Consiste em utilizar os métodos HTTP no lugar
    do nome das ações para rotear a ação correta
    dentro do Controller.
●   Dependendo do método HTTP o Rails
    encaminha automaticamente para a ação
    correspondente dentro do Controller.
REST
●   Solicitações com o método:
    ●   GET são encaminhadas para as ações
        “index” e “show”
    ●   POST são encaminhadas para a ação
        “create”
    ●   PUT são encaminhadas para a ação
        “update”
    ●   DELETE são encaminhadas para a ação
        “destroy”
Rotas
●   Rails não trabalha com URLs bagunçadas e
    sim Rotas.
●   Facilitação na leitura por engines de busca



           http://www.torrentleech.org/details.php?id=188684
Facilidades
●   Logs
●   Ajax
●   Javascript
●   Jquery
●   Prototype e Scriptaculous
●   HTML
●   Testes Automatizados
Facilidades
●   TDD e BDD
●   Cucumber e Rspec
●   XP
Ferramentas Ágeis
●   Github - Repositório
●   Integração contínua – Cruise Control
●   Deployment – Capistrano, Inploy (dcrec1)
Código PHP
<?
  $email = $_POST['email'];
  $opcao = $_POST['opcoes'];

  $db = mysql_connect("localhost","root", "");
  $banco = mysql_select_db("teste",$db);


  if($opcao == "cadastrar"){



      $sql = mysql_query("INSERT INTO email (email) value ('$email')");

  }else{

      $sql = mysql_query("DELETE FROM email where email = '$email'");

  }



?>
DEMO RAILS
Comunidade
Por akitaonrails




                   or
Dizem que rails é pouco usado!
Links
●   http://www.nomedojogo.com/
●   http://akitaonrails.com/
●   http://blog.areacriacoes.com.br/
●   http://guides.rubyonrails.org/
●   http://ruby-doc.org/core/
●   http://aprendaaprogramar.rubyonrails.pro.br/
●
@egenial
@danielvlopes
@AkitaOnRails
  @tapajos
@carlosbrando
@thiagomarano
  @fredmp
OBRIGADO!!
Perguntas?
@thiagocifani
 cifani.thiago@gmail.com
  github.com/thiagocifani
slideshare.net/thiagocifani

Palestra Desenvolvimento Ágil para Web com ROR UVA

  • 1.
    Desenvolvimento Ágil paraWeb com Ruby on Rails
  • 3.
    Ruby Release público em 1995 Ruby is designed to make programmers happy
  • 4.
  • 5.
    Ruby ● Melhor amigo do desenvolvedor ● Legível e Humana ● Perl, Smalltalk, Ada e LISP ● Orientada a Objetos ● Extremamente Flexível
  • 6.
    Características do Ruby ● A sintaxe é enxuta ● Tudo é objeto ● Geração de código em tempo real ● Fortemente Tipada ● Tipagem dinâmica ● Closures Reais
  • 7.
    Características do Ruby ● Classes abertas ● Garbage Collector ● Multi-plataforma ● Herança Simples
  • 8.
    Vantagens ● Memoria controlada automaticamente ● Linguagem humana ● Simplicidade ● Tipagem Dinâmica ● Extensibilidade ● simbolos
  • 9.
    Desvantagens ● Maquina Virtual Lenta (1.8) ● Matemática Intensa – Estatísticas e fins cientificos ● Threading – Green Threading/ melhora no ruby 1.9 (jruby)
  • 11.
    Instalando Ruby ● Ubuntu - sudo apt-get install ruby irb ● Windows - http://rubyforge.org/projects/rubyinstaller/ ● easyrails
  • 13.
    Escopo Variáveis ● thiago – variavel local ● @thiago – variavel de instancia ● @@thiago – variavel de classe ● $thiago – variavel global
  • 14.
    Classes em Ruby classPersonagem def initialize(tipo, nome) @tipo = tipo @nome = nome end end
  • 15.
    Classes em Ruby thiago= Personagem.new(:ator, "Thiago Cifani") marano = Personagem.new(:revisor, "Thiago Marano")
  • 16.
    Classes em Ruby defto_s "#{@nome} é um #{@tipo}" end
  • 17.
    Classes em Ruby defnome @nome end def tipo @tipo end def nome=(value) @nome = value end def tipo=(value) @tipo = value end
  • 18.
  • 19.
    Controle de Acesso classTest class Test public def method1 def method1 end end def method2 protected end def method2 def method3 end end private public :method1 def method3 end protected :method2 private :method2 end end
  • 20.
    Herança Simples class B < A end
  • 21.
    Livros OpenSource ● http://aprendaaprogramar.rubyonrails.pro.br/ ● http://why.nomedojogo.com/
  • 22.
    try { BufferedReader in = new BufferedReader(new FileReader("nome do arquivo")); String str; while (in.ready()) { str = in.readLine(); process(str); } in.close(); } catch (IOException e) { } teste = File.readlines("/home/thiagocifani/Documentos/txt.txt") puts teste
  • 23.
  • 24.
  • 26.
  • 28.
    Rails: o queé ? Framework baseado em Ruby que facilita o desenvolvimento web, fazendo-o com agilidade e produtividade
  • 32.
    “Eles servem maisde 23 milhões de visitantes por mês. A conversão resultou em 20 mil linhas de Ruby ao invés de 120 mil linhas de Java, e mais importante, Facilitou a dificuldade que tinham com manutenção. Eles também finalizaram a escrita do programa com apenas 3 meses com 4 desenvolvedores. Uma vez completo e otimizado o site deles é mais rapido do que antes.”
  • 33.
    Rails instalação ● Sudo apt-get install rubygems ● Sudo gem update –system ● Sudo gem install rails
  • 34.
    Rails - Filosofia ● Convention over Configuration ● DRY - Don't repeat yourself ● KISS – Keep it simple stupid ● Diversão
  • 35.
    Convention over Configuration ● Grande parte do desenvolvimento segue padrões de convenção. ● Ex.: Para o model venda, temos uma tabela no banco de dados chamada vendas. ● Resume-se em menos código e menos repetição.
  • 36.
    Convention over Configuration ● Nomes de Arquivos ● Nomes de Tabelas no BD ● Mapeamentos ● Chaves do BD ● Nome das Classes ● Ambientes
  • 37.
    Don't Repeat Yourself ● Todo código gerado deve ficar apenas em um local, não deve haver repetição de código em outras áreas da aplicação. ● Ex.: Active Record – Não é necessário colocar os códigos de CRUD no modelo, nome das colunas, etc.
  • 38.
    Don't Repeat Yourself development: adapter: sqlite3 database: db/development.sqlite3 pool: 5 timeout: 5000 test: adapter: sqlite3 database: db/test.sqlite3 pool: 5 timeout: 5000 production: adapter: sqlite3 database: db/production.sqlite3 pool: 5 timeout: 5000
  • 39.
    Don't Repeat Yourself ● Gems ● Plugins ● Generators ● Templates ● Partials
  • 40.
    Keep it SimpleStupid ● Simplicidade acima de tudo ● Refatoração ● Testes legíveis ● Código enxuto
  • 41.
    Comandos ● Scaffolding ● Migrations ● script/server ● script/generate model / controller / view ● rake
  • 42.
    MVC ● Model - Parte da aplicação que faz ligação com o banco de dados. ● View – Interface com o usuário. ● Controller – Responsável por receber as requisições feitas pela aplicação e executar as ações necessárias para atender essas requisições. É onde definimos a lógica do funcionamento da aplicação.
  • 43.
    REST ● Consiste em utilizar os métodos HTTP no lugar do nome das ações para rotear a ação correta dentro do Controller. ● Dependendo do método HTTP o Rails encaminha automaticamente para a ação correspondente dentro do Controller.
  • 44.
    REST ● Solicitações com o método: ● GET são encaminhadas para as ações “index” e “show” ● POST são encaminhadas para a ação “create” ● PUT são encaminhadas para a ação “update” ● DELETE são encaminhadas para a ação “destroy”
  • 45.
    Rotas ● Rails não trabalha com URLs bagunçadas e sim Rotas. ● Facilitação na leitura por engines de busca http://www.torrentleech.org/details.php?id=188684
  • 46.
    Facilidades ● Logs ● Ajax ● Javascript ● Jquery ● Prototype e Scriptaculous ● HTML ● Testes Automatizados
  • 47.
    Facilidades ● TDD e BDD ● Cucumber e Rspec ● XP
  • 48.
    Ferramentas Ágeis ● Github - Repositório ● Integração contínua – Cruise Control ● Deployment – Capistrano, Inploy (dcrec1)
  • 49.
    Código PHP <? $email = $_POST['email']; $opcao = $_POST['opcoes']; $db = mysql_connect("localhost","root", ""); $banco = mysql_select_db("teste",$db); if($opcao == "cadastrar"){ $sql = mysql_query("INSERT INTO email (email) value ('$email')"); }else{ $sql = mysql_query("DELETE FROM email where email = '$email'"); } ?>
  • 53.
  • 54.
  • 55.
  • 62.
    Dizem que railsé pouco usado!
  • 71.
    Links ● http://www.nomedojogo.com/ ● http://akitaonrails.com/ ● http://blog.areacriacoes.com.br/ ● http://guides.rubyonrails.org/ ● http://ruby-doc.org/core/ ● http://aprendaaprogramar.rubyonrails.pro.br/ ●
  • 72.
  • 73.
  • 74.
  • 75.
    @thiagocifani cifani.thiago@gmail.com github.com/thiagocifani slideshare.net/thiagocifani