Desenvolvimento Web com  Ruby on Rails Por Júlio Bêtta
Por que Ruby ??? Linguagem dinâmica
Totalmente Orientado a Objetos
Sintaxe flexível
Cross-plataform
Ruby(C),  jRuby(Java), IronRuby(.NET)
Software Livre
Programadores mais felizes =)
Ruby on Rails
Framework web implementado na linguagem Ruby
Desenvolvimento ágil de aplicações web
MVC
Utiliza o conceito Convention over Configuration (CoC)
E muito mais ... Sobre o Ruby on Rails
Principais Banco de Dados Suportados SQlite 3 (padrão)
MySQL
PostgreSQL
Oracle
Microsoft SQL Server Ruby on Rails
Instalação Windows:
http://railsinstaller.org
Linux (Ubuntu):  https://github.com/juliobetta/RoR/tree/master/installation Ruby on Rails Os exemplos a seguir foram testados apenas em ambiente LINUX.
Sintaxe
IRB Programa iniciado na linha de comando que permite a execução de comandos em Ruby com responta em tempo-real. Todos os comandos a seguir podem ser testados utilizando o  irb . Sintaxe
Strings Sintaxe "eu sou uma string" 'Ruby '  +  'on Rails'
Variáveis Não é preciso declarar o tipo: Porém a tipagem no Ruby  é forte: Podemos avaliar expressões dentro de strings com conversão  automática: Sintaxe nome =   "Ruby" versao =   3 nome  =   "Rails "   + versao  (TYPE ERROR) versao =   3 nome  =   "Ruby"   curso  =   " #{nome}  on Rails  #{versao} " versao =   3 nome  =   "Rails "   + versao.to_s
Operações básicas Operadores Sintaxe 5  == ( 2 + 3 ) # igualdade 2  !=  3   # inigualdade  10  >  13  # maior 3   <  10   # menor 5   <=  5   # menor ou igual 5   >=  5   # maior ou igual 1  +  2   # adição 4  –  2   # subtração 2  *  2   # multiplicação 6  /  2   # divisão 15  %  2   # modulo
Controles de fluxo
Maneira usual: Sintaxe idade =   15 if (idade <   16 ) then puts   'que pariu! Você não deveria estar dirigindo.' end
Controles de fluxo
Maneira usual um pouco melhor: Sintaxe idade =   15 if idade   <   16 puts   'Você não deveria estar dirigindo.' end
Controles de fluxo
Isso é ótimo: Sintaxe idade =   15 puts   'Você não deveria estar dirigindo.'  if idade   <   16
Controles de fluxo
Algo diferente: ou: Sintaxe idade =   15 unless idade   >=   16 puts   'Você não deveria estar dirigindo.' end idade =   15 puts   'Você não deveria estar dirigindo.'  unless idade   >=   16
Controles de fluxo
Não me esqueci do else: Famosos operadores ternários: Sintaxe idade =   18 if idade   <   16 puts   'Você não deveria estar dirigindo.' else puts  'Pode seguir!' end idade =   18 puts   idade >= 16 ?   'Pode seguir!' : 'Vai pra casa!'
Controles de fluxo
Loops Sintaxe letras = [ 'a' , 'b' , 'c' , 'd' ] letras.each do |letra| puts letra end for i in 1..10 puts i end 5.times do |n| puts n end 5.upto(10) do puts  'Oi!' end i = 0 while i < 5 puts i i += 1 end
Arrays e Hashes Sintaxe objetos  = [ 'carro' , 'bicicleta' , 'pizza' ] objetos   = %w( teclado mouse livro ) puts objetos[ 0 ] Arrays atributos = { :nome   =>  'Yukihiro' , :sobrenome  =>  'Matsumoto' , :email  =>  'matz@ruby.co.jp ' } puts atributos[ :nome ] Hash
Ruby :symbols
São cadeias de caracteres usualmente utilizados como identificadores. Eles são como strings , porém  reusam o mesmo espaço de memória.
Vejamos: Sintaxe &quot; carro&quot; .object_id => 2953810 &quot; carro &quot; .object_id => 2951340 : carro .object_id => 166418 : carro .object_id => 166418
Métodos (funções) Sintaxe def diga_adeus_para(nome, sobrenome) &quot;Adeus  #{nome} #{sobrenome} ...&quot; end puts diga_adeus_para( &quot;Yukihiro&quot; ,  &quot;Matsumoto&quot; ) puts diga_adeus_para  &quot;Yukihiro&quot; ,  &quot;Matsumoto&quot; Como parênteses neste caso são opcionais, soa mais natural como:
Classes A maneira mais longa: …  e a mais curta: Sintaxe class Pessoa @nome @sobrenome def nome   @nome end def sobrenome   @sobrenome end def nome=(nome)   @nome  = nome end def sobrenome=(sobrenome)   @sobrenome  = sobrenome end end class Pessoa attr_accessor   :nome,   :sobrenome end Define getters e setters class Pessoa attr_reader   :nome,   :sobrenome end Define somente getters class Pessoa attr_writer   :nome,   :sobrenome end Define somente setters
Classes Criar novas instância com o método .new Criar novas instância com o método .new Sintaxe matz =  Pessoa .new matz.nome  =  &quot;Yukihiro&quot;  matz.sobrenome =  &quot;Matsumoto&quot; puts matz.nome puts matz.sobrenome
Classes Herança Sintaxe class Usuario < Pessoa attr_accessor   :nome_usuario,   :senha end matz =  Usuario .new matz.nome  =  &quot;Yukihiro&quot;  matz.sobrenome  =  &quot;Matsumoto&quot; matz.nome_usuario =  &quot;matz&quot; matz.senha    =  &quot;abc123&quot;
Classes As classes são abertas: Sintaxe class Pessoa def initialize(nome, sobrenome) @nome    = nome @sobrenome  = sobrenome  end def to_s &quot; #{@nome} #{@sobrenome} &quot; end end matz =  Pessoa .new  &quot; Yukihiro&quot; ,  &quot; Matsumoto &quot; puts  matz
Mão na massa !!!
Switter Aplicação similar a uma seção do famoso microblog
Exibir usuários e microposts (sweets) Mão na massa Entidades
Switter Estrutura de diretórios gerada automaticamente Mão na massa $  rails new switter
Switter Mão na massa Organiza a aplicação em componentes
Switter Configuração da aplicação Arquivos estáticos Mão na massa
Página Inicial Criando um Controller: No terminal: Mão na massa $  rails generate controller paginas inicio
Página Inicial Arquivos gerados automaticamente na pasta  app Mão na massa $  rails generate controller paginas inicio
Página Inicial Criando uma Action no Controller que acabamos de gerar: Mão na massa class PaginasController < ApplicationController def inicio render  'paginas/inicio' end end app/controllers/paginas_controller.rb <h2> Seja bem-vindo ao Switter!!! </h2> app/views/paginas/inicio.html.erb
Layout padrão Contém a estrutura HTML da aplicação;
A ideia é que as views geradas nos controllers sejam incluídas neste arquivo, através do método  yield . app/views/layouts/application.html.erb Mão na massa < !DOCTYPE   html > <html> <head> <title> Switter </title> <%= stylesheet_link_tag  &quot;application&quot;  %> <%= javascript_include_tag  &quot;application&quot;  %> <%= csrf_meta_tags %> </head> <body> <%=  yield  %> </body> </html>
Rotas Sistema que examina a URL solicitada e determina qual ação deve deve ser executada pela aplicação.  config/routes.rb Mão na massa Switter ::Application.routes.draw do get  'paginas/inicio' end
Inicialização Rails já possui um webserver embutido: Mão na massa $  rails server
Scaffolding Criar model, controller e views para criar, exibir, atualizar e deletar (CRUD) o recurso que especificarmos

Introdução ao Desenvolvimento WEB com Ruby on Rails

  • 1.
    Desenvolvimento Web com Ruby on Rails Por Júlio Bêtta
  • 2.
    Por que Ruby??? Linguagem dinâmica
  • 3.
  • 4.
  • 5.
  • 6.
    Ruby(C), jRuby(Java),IronRuby(.NET)
  • 7.
  • 8.
  • 9.
  • 10.
    Framework web implementadona linguagem Ruby
  • 11.
    Desenvolvimento ágil deaplicações web
  • 12.
  • 13.
    Utiliza o conceitoConvention over Configuration (CoC)
  • 14.
    E muito mais... Sobre o Ruby on Rails
  • 15.
    Principais Banco deDados Suportados SQlite 3 (padrão)
  • 16.
  • 17.
  • 18.
  • 19.
    Microsoft SQL ServerRuby on Rails
  • 20.
  • 21.
  • 22.
    Linux (Ubuntu): https://github.com/juliobetta/RoR/tree/master/installation Ruby on Rails Os exemplos a seguir foram testados apenas em ambiente LINUX.
  • 23.
  • 24.
    IRB Programa iniciadona linha de comando que permite a execução de comandos em Ruby com responta em tempo-real. Todos os comandos a seguir podem ser testados utilizando o irb . Sintaxe
  • 25.
    Strings Sintaxe &quot;eusou uma string&quot; 'Ruby ' + 'on Rails'
  • 26.
    Variáveis Não épreciso declarar o tipo: Porém a tipagem no Ruby é forte: Podemos avaliar expressões dentro de strings com conversão automática: Sintaxe nome = &quot;Ruby&quot; versao = 3 nome = &quot;Rails &quot; + versao (TYPE ERROR) versao = 3 nome = &quot;Ruby&quot; curso = &quot; #{nome} on Rails #{versao} &quot; versao = 3 nome = &quot;Rails &quot; + versao.to_s
  • 27.
    Operações básicas OperadoresSintaxe 5 == ( 2 + 3 ) # igualdade 2 != 3 # inigualdade 10 > 13 # maior 3 < 10 # menor 5 <= 5 # menor ou igual 5 >= 5 # maior ou igual 1 + 2 # adição 4 – 2 # subtração 2 * 2 # multiplicação 6 / 2 # divisão 15 % 2 # modulo
  • 28.
  • 29.
    Maneira usual: Sintaxeidade = 15 if (idade < 16 ) then puts 'que pariu! Você não deveria estar dirigindo.' end
  • 30.
  • 31.
    Maneira usual umpouco melhor: Sintaxe idade = 15 if idade < 16 puts 'Você não deveria estar dirigindo.' end
  • 32.
  • 33.
    Isso é ótimo:Sintaxe idade = 15 puts 'Você não deveria estar dirigindo.' if idade < 16
  • 34.
  • 35.
    Algo diferente: ou:Sintaxe idade = 15 unless idade >= 16 puts 'Você não deveria estar dirigindo.' end idade = 15 puts 'Você não deveria estar dirigindo.' unless idade >= 16
  • 36.
  • 37.
    Não me esquecido else: Famosos operadores ternários: Sintaxe idade = 18 if idade < 16 puts 'Você não deveria estar dirigindo.' else puts 'Pode seguir!' end idade = 18 puts idade >= 16 ? 'Pode seguir!' : 'Vai pra casa!'
  • 38.
  • 39.
    Loops Sintaxe letras= [ 'a' , 'b' , 'c' , 'd' ] letras.each do |letra| puts letra end for i in 1..10 puts i end 5.times do |n| puts n end 5.upto(10) do puts 'Oi!' end i = 0 while i < 5 puts i i += 1 end
  • 40.
    Arrays e HashesSintaxe objetos = [ 'carro' , 'bicicleta' , 'pizza' ] objetos = %w( teclado mouse livro ) puts objetos[ 0 ] Arrays atributos = { :nome => 'Yukihiro' , :sobrenome => 'Matsumoto' , :email => 'matz@ruby.co.jp ' } puts atributos[ :nome ] Hash
  • 41.
  • 42.
    São cadeias decaracteres usualmente utilizados como identificadores. Eles são como strings , porém reusam o mesmo espaço de memória.
  • 43.
    Vejamos: Sintaxe &quot;carro&quot; .object_id => 2953810 &quot; carro &quot; .object_id => 2951340 : carro .object_id => 166418 : carro .object_id => 166418
  • 44.
    Métodos (funções) Sintaxedef diga_adeus_para(nome, sobrenome) &quot;Adeus #{nome} #{sobrenome} ...&quot; end puts diga_adeus_para( &quot;Yukihiro&quot; , &quot;Matsumoto&quot; ) puts diga_adeus_para &quot;Yukihiro&quot; , &quot;Matsumoto&quot; Como parênteses neste caso são opcionais, soa mais natural como:
  • 45.
    Classes A maneiramais longa: … e a mais curta: Sintaxe class Pessoa @nome @sobrenome def nome @nome end def sobrenome @sobrenome end def nome=(nome) @nome = nome end def sobrenome=(sobrenome) @sobrenome = sobrenome end end class Pessoa attr_accessor :nome, :sobrenome end Define getters e setters class Pessoa attr_reader :nome, :sobrenome end Define somente getters class Pessoa attr_writer :nome, :sobrenome end Define somente setters
  • 46.
    Classes Criar novasinstância com o método .new Criar novas instância com o método .new Sintaxe matz = Pessoa .new matz.nome = &quot;Yukihiro&quot; matz.sobrenome = &quot;Matsumoto&quot; puts matz.nome puts matz.sobrenome
  • 47.
    Classes Herança Sintaxeclass Usuario < Pessoa attr_accessor :nome_usuario, :senha end matz = Usuario .new matz.nome = &quot;Yukihiro&quot; matz.sobrenome = &quot;Matsumoto&quot; matz.nome_usuario = &quot;matz&quot; matz.senha = &quot;abc123&quot;
  • 48.
    Classes As classessão abertas: Sintaxe class Pessoa def initialize(nome, sobrenome) @nome = nome @sobrenome = sobrenome end def to_s &quot; #{@nome} #{@sobrenome} &quot; end end matz = Pessoa .new &quot; Yukihiro&quot; , &quot; Matsumoto &quot; puts matz
  • 49.
  • 50.
    Switter Aplicação similara uma seção do famoso microblog
  • 51.
    Exibir usuários emicroposts (sweets) Mão na massa Entidades
  • 52.
    Switter Estrutura dediretórios gerada automaticamente Mão na massa $ rails new switter
  • 53.
    Switter Mão namassa Organiza a aplicação em componentes
  • 54.
    Switter Configuração daaplicação Arquivos estáticos Mão na massa
  • 55.
    Página Inicial Criandoum Controller: No terminal: Mão na massa $ rails generate controller paginas inicio
  • 56.
    Página Inicial Arquivosgerados automaticamente na pasta app Mão na massa $ rails generate controller paginas inicio
  • 57.
    Página Inicial Criandouma Action no Controller que acabamos de gerar: Mão na massa class PaginasController < ApplicationController def inicio render 'paginas/inicio' end end app/controllers/paginas_controller.rb <h2> Seja bem-vindo ao Switter!!! </h2> app/views/paginas/inicio.html.erb
  • 58.
    Layout padrão Contéma estrutura HTML da aplicação;
  • 59.
    A ideia éque as views geradas nos controllers sejam incluídas neste arquivo, através do método yield . app/views/layouts/application.html.erb Mão na massa < !DOCTYPE html > <html> <head> <title> Switter </title> <%= stylesheet_link_tag &quot;application&quot; %> <%= javascript_include_tag &quot;application&quot; %> <%= csrf_meta_tags %> </head> <body> <%= yield %> </body> </html>
  • 60.
    Rotas Sistema queexamina a URL solicitada e determina qual ação deve deve ser executada pela aplicação. config/routes.rb Mão na massa Switter ::Application.routes.draw do get 'paginas/inicio' end
  • 61.
    Inicialização Rails jápossui um webserver embutido: Mão na massa $ rails server
  • 62.
    Scaffolding Criar model,controller e views para criar, exibir, atualizar e deletar (CRUD) o recurso que especificarmos

Notas do Editor

  • #5 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #6 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #7 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #12 Notação comum para a maioria das linguagens de programação
  • #14 Explicar o que significa sintax sugar
  • #15 Ajuda na leitura do código
  • #16 Tenta aproximar a liguagem de programação com a linguagem natural
  • #19 Muito utilizados como parametros. No Rails, as requisições HTTP vem em forma de hash
  • #20 Enfim, são construções muito simples que tornam o código mais legível e mais eficiente ao mesmo tempo.
  • #21 Não é preciso especificar o tipo de cada parametro. A palavra-chave return é opcional, pois o valor retornado de um método em ruby é a ultima expressão executada.
  • #22 @ na frente da variavel indica que é variável de instância. As variáveis de instancia são privadas por padrao, não sendo possível a criacao de variaveis publicas. attr_accessor gera as variáveis de instância, getters e setters.
  • #23 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #24 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #25 Prática muito utilizada no Rails.
  • #27 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #28 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #29 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #30 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #31 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #32 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #33 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #34 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #35 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #36 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #37 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #38 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #39 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #40 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #41 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #42 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #43 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #44 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #45 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #46 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #47 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #48 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #49 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #50 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #51 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #52 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #53 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #54 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #55 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #56 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #57 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #58 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #59 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • #60 Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço