SlideShare uma empresa Scribd logo
1 de 94
Baixar para ler offline
CRASH COURSE
          GUILHERME CARVALHO
             LAILSON BANDEIRA




RUBY
& RAILS
REQUISITOS
Programação

  Orientação a objetos

     Desenvolvimento web
linguagem


   RUBY
ON RAILS    framework web
1995

       Japão

RUBY   Yukihiro
       Matsumoto

       1.9.2 – 1.8.7
DINÂMICA

                         MULTIPARADIGMA




                                                      SINTAXE FLEXÍVEL
       SOFTWARE LIVRE REFLEXIVA




                                                  DUCK
       MULTIPLATAFORMA                    FUNCIONAL
       ORIENTADA A OBJETOS
                                          TIPAGEM FORTE
 INTERPRETADA        EXTENSÍVEL
PLA
PRINCIPLE OF LEAST ASTONISHMENT
“   Ruby is designed to make
    programmers happy.
                        ”MATZ
POR
  RUEXE
       MP
         BY
         LOS
> irb
ruby > 2+1
 => 3
ruby > 3/2 # divisão inteira
 => 1
ruby > 3.0/2 # divisão real
 => 1.5
ruby > 3 > 2
 => true



                    INTERACTIVE RUBY
ruby > "hello".class
 => String
ruby > 1.class
 => Fixnum
ruby > 1.2.class
 => Float
ruby > 1.+(2)
 => 3




                       TUDO É OBJETO
ruby > usuario = "Maria"
 => "Maria"
ruby > "Bem-vindo " + usuario
 => "Bem-vindo Maria"
ruby > "Bem-vindo #{usuario}"
 => "Bem-vindo Maria"
ruby > usuario = nil
 => nil




         VARIÁVEIS E INTERPOLAÇÃO
ruby > numeros = [1,2,3,4]
 => [1, 2, 3, 4]
ruby > linguagens = ['ruby', 'python']
 => ["ruby", "python"]
ruby > mix = [1, 'ruby', 2.5]
 => [1, "ruby", 2.5]
ruby > linguagens[0]
 => "ruby"




                                ARRAYS
ruby > linguagens.sort
 => ["python", "ruby"]
ruby > numeros.shuffle
 => [2, 4, 1, 3]
ruby > mix[10] = 'longe'
 => "longe"
ruby > mix
 => [1, "ruby", 2.5, nil, nil, nil,
nil, nil, nil, nil, "longe"]



                                ARRAYS
ruby > quad = {'dois' => 4, 'tres' => 9}
 => {"dois"=>4, "tres"=>9}
ruby > quad['dois']
 => 4
ruby > quad['quatro'] = 16
 => 16
ruby > quad
 => {"dois"=>4, "tres"=>9, "quatro"=>16}




                                HASHES
ruby > quad['cinco']
 => nil
ruby > quad.size
 => 3
ruby > quad.keys
 => ["dois", "tres", "quatro"]
ruby > quad.values
 => [4, 9, 16]




                                 HASHES
ruby > :norte
 => :norte
ruby > cidades = {:norte =>
'olinda', :sul => 'jaboatão'}
 => {:norte=>"olinda", :sul=>"jaboatão"}
ruby > cidades[:norte]
 => "olinda"
ruby > cidades = {norte: 'olinda', sul:
'jaboatão'} # apenas 1.9
 => {:norte=>"olinda", :sul=>"jaboatão"}


                              SÍMBOLOS
ruby > letras = 'a'..'e'
 => "a".."e"
ruby > letras.include?('c')
 => true
ruby > letras.include?('f')
 => false
ruby > letras.to_a
 => ["a", "b", "c", "d", "e"]




                                RANGES
ruby > regex   = /[a-z]+/
 => /[a-z]+/
ruby > regex   =~ 'cinlug'
 => 0
ruby > regex   =~ '1234'
 => nil
ruby > regex   =~ '1 mais 2 igual a 3'
 => 2




               EXPRESSÕES REGULARES
ruby > cep = /(d{5})-(d{3})/
 => /(d{5})-(d{3})/
ruby > cep =~ '50740-540'
 => 0
ruby > $1
 => "50740"
ruby > cep.match('50740-540')
 => #<MatchData "50740-540"
1:"50740"...



             EXPRESSÕES REGULARES
ruby > a,b = 1,2
 => [1, 2]
ruby > a,b = b,a
 => [2, 1]
ruby > a,b,c = [1,2,3]
 => [1, 2, 3]
ruby > a
 => 1




                         ATRIBUIÇÃO
> ruby nome_do_arquivo.rb
puts "Olá, mundo"
print 'Digite seu nome: '
nome = gets
puts "Olá, #{nome}"




        EXECUTANDO UM PROGRAMA
usuario = 'Maria'
sexo = :feminino
if sexo == :masculino
  saudacao = 'Bem-vindo'
elsif sexo == :feminino
  saudacao = 'Bem-vinda'
else
  saudacao = 'WTF!'
end
puts "#{saudacao} #{usuario}"


                         CONDICIONAIS
usuario = 'Maria'
sexo = :feminino
saudacao = if sexo == :masculino
  'Bem-vindo'
elsif sexo == :feminino
  'Bem-vinda'
else
  'WTF!'
end
puts "#{saudacao} #{usuario}"


                         CONDICIONAIS
usuario = 'Maria'
sexo = :feminino
# ...
if sexo == :feminino
  puts "#{saudacao} #{usuario}"
end




                         CONDICIONAIS
usuario = 'Maria'
sexo = :feminino
# ...
puts "#{saudacao} #{usuario}" if sexo
== :feminino




                         CONDICIONAIS
# ...
usuario = nil
if not usuario
  puts "Sem usuário para cumprimentar"
else
  puts "#{saudacao} #{usuario}"
end




                         CONDICIONAIS
# ...
usuario = nil
unless usuario
  puts "Sem usuário para cumprimentar"
else
  puts "#{saudacao} #{usuario}"
end




                         CONDICIONAIS
i = 0
while i < 4
  puts "Imprimindo linha #{i}..."
  i += 1
end




                                    LOOPS
i = 0
until i >= 4
  puts "Imprimindo linha #{i}..."
  i += 1
end




                                    LOOPS
4.times do |i|
  puts "Imprimindo linha #{i}..."
end




                                    LOOPS
numeros = [1,2,3,4]
numeros.each do |n|
  puts n
end




                      LOOPS
numeros = [1,2,3,4]
for n in numeros
  puts n
end




                      LOOPS
cidades = {norte: 'olinda', sul:
'jaboatão'}
cidades.each do |chave,valor|
  puts "ao #{chave} fica #{valor}"
end




                                     LOOPS
cidades = {norte: 'olinda', sul:
'jaboatão'}
for chave, valor in cidades
  puts "ao #{chave} fica #{valor}"
end




                                     LOOPS
numeros = [1,2,3,4]
quad = numeros.map do |n|
  n**2
end
puts quad




          CONSTRUÇÕES FUNCIONAIS
numeros = [1,2,3,4]
soma = numeros.reduce do |memo, n|
  memo += n
end
puts soma




          CONSTRUÇÕES FUNCIONAIS
numeros = [1,2,3,4]
soma = numeros.reduce(&:+)
puts soma




          CONSTRUÇÕES FUNCIONAIS
def quad(n,e)
  return n**e
end
puts quad(3,2)




                 DEFINIÇÃO DE MÉTODOS
def quad(n,e)
  n**e
end
puts quad(3,2)




                 DEFINIÇÃO DE MÉTODOS
def quad(n,e)
  n**e
end
puts quad 3,2




                DEFINIÇÃO DE MÉTODOS
def quad(n,e=2) # valor padrão
  n**e
end
puts quad 3




              DEFINIÇÃO DE MÉTODOS
def fatorial(n)
  return 1 if n <= 1
  n * fatorial(n-1)
end
puts fatorial(5)




              CHAMADA DE MÉTODOS
def imprimir(hash)
  puts hash.inspect
end
puts imprimir({'a' => 1, 'b' => 2})




              CHAMADA DE MÉTODOS
def imprimir(hash)
  puts hash.inspect
end
puts imprimir( 'a' => 1, 'b' => 2 )




              CHAMADA DE MÉTODOS
class Usuario
  def initialize(nome)
    @nome = nome
  end
end
usuario = Usuario.new('lailson')




                               CLASSES
class Usuario
  # ...
  def nome
    @nome
  end
end
usuario = Usuario.new('lailson')
puts usuario.nome




                               CLASSES
class Usuario
  # ...
  def nome=(valor)
    @nome = valor
  end
end
usuario = Usuario.new('lailson')
usuario.nome = 'Lailson'
puts usuario.nome



                               CLASSES
class Usuario
  attr_reader :nome
  attr_writer :nome
  # ...
end
usuario = Usuario.new('lailson')
usuario.nome = 'Lailson'
puts usuario.nome




                               CLASSES
class Usuario
  attr_accessor :nome
  # ...
end
usuario = Usuario.new('lailson')
usuario.nome = 'Lailson'
puts usuario.nome




                               CLASSES
class Usuario
  attr_accessor :nome, :idade
  # ...
  def maior?
    idade >= 18
  end
end
usuario = Usuario.new('lailson')
usuario.idade = 22
puts usuario.maior?


                               CLASSES
class Admin < Usuario
  def admin?
    true
  end
end
admin = Admin.new('Lailson')
puts admin.nome




                               HERANÇA
module Autenticacao
  class Usuario
    # ...
  end
  class Admin < Usuario
    # ...
  end
end
admin = Autenticacao::Admin.new



                              MÓDULOS
n = [1,2,3,4]
puts n.sum
  => NoMethodError




                     CLASSES ABERTAS
class Array
  def sum
    self.reduce(&:+)
  end
end
n = [1,2,3,4]
puts n.sum




                       CLASSES ABERTAS
> gem install prawn
require 'prawn'
Prawn::Document.generate('hello.pdf') do |pdf|
  pdf.text("Hello Prawn!")
end




                                 RUBY GEMS
> gem list
> gem list rails
> gem uninstall rails




                        RUBY GEMS
IMPLEMENTAÇÕES
THE RUBY
PROGRAMMING
LANGUAGE
David Flanagan e Matz
“The Hummingbird Book”




         REFERÊNCIAS
PROGRAMMING
RUBY 1.9
Dave Thomas
“The Pickaxe Book”




         REFERÊNCIAS
THE RUBY WAY
Hal Fulton




      REFERÊNCIAS
RUBY DOC
  ruby-doc.org




REFERÊNCIAS
RAILS API
  railsapi.com




REFERÊNCIAS
NA
   RA
 PR
    AT
       ILS
    ICA
2004




RAILS
        US, 37signals

        David DHH

        3.0.5 – 2.3.11
QUEM USA
                   CRUNCH BASE           BLOG BLOGS
PITCHFORK MEDIA

           BE ON THE NET*      YELLOW PAGES
 HULU
                  TWITTER             SCRIBD
SLIDESHARE
                    BASECAMP      JUSTIN TV
    GENI
            GOV. BRASILEIRO*
                               ONDE TRABALHAR*
CONFERÊNCIAS
             EURUKO
 OXENTE RAILS*        RUBYCONF

 GORUCO   RAILSCONF
                          CONFERENCIA RAILS
RUBYCONF LATIN AMERICA*
                      RS ON RAILS*
EMPRESAS
       GUAVA*            THOUGHTWORKS*
                TINK*
 THOUGHTBOT
                        PLATAFORMATEC*
  CAELUM*    37SIGNALS        ENGINE YARD

HASHROCKET                 GONOW*
                SOFTA*
GURUS
  CEARÁ ON RAILS
                   GURU-SP
          FREVO ON RAILS
RAILSMG              RAILSPI
           GURU-RS
DRY
DON’T REPEAT YOURSELF

                    PRINCÍPIOS
CoC
CONVENTION OVER CONFIGURATION

                    PRINCÍPIOS
KISS
KEEP IT STUPIDLY SIMPLE

                     PRINCÍPIOS
YAGNI    YOU AIN’T GONNA NEED IT

 NIHS NOT INVENTED HERE SYNDROME

TATFT TEST ALL THE FUCKING TIME

                        PRINCÍPIOS
FRAMEWORK DE FRAMEWORKS
                                     ACTIVE
                                     MODEL

                           ACTIVE               ACTIVE
                          SUPPORT               RECORD

                                     RAILTIES

                           ACTIVE               ACTION
                          RESOURCE               PACK

                                     ACTION
                                     MAILER
ARQUITETURA

     MVC
MODEL-VIEW-CONTROLLER
ARQUITETURA
             HTML, CSS, JS,
   VIEW
             Flash, PDF

             URLs, Rotas
CONTROLLER
             Ações

             Regras de negócio
  MODEL
             Banco de dados
> rails new taverna
  create
  create README
  create Rakefile
  create config.ru
  create .gitignore
  create Gemfile
  create app
  create app/controllers/appli...



                         CRIANDO APP
> ls -l taverna
  -rw-r--r--    1   foo   bar    743   Mar   25   15:39   Gemfile
  -rw-r--r--    1   foo   bar   9126   Mar   25   15:39   README
  -rw-r--r--    1   foo   bar    267   Mar   25   15:39   Rakefile
  drwxr-xr-x    7   foo   bar    238   Mar   25   15:39   app
  drwxr-xr-x   10   foo   bar    340   Mar   25   15:39   config
  -rw-r--r--    1   foo   bar    157   Mar   25   15:39   config.ru
  drwxr-xr-x    3   foo   bar    102   Mar   25   15:39   db
  drwxr-xr-x    3   foo   bar    102   Mar   25   15:39   doc
  drwxr-xr-x    3   foo   bar    102   Mar   25   15:39   lib
  drwxr-xr-x    6   foo   bar    204   Mar   25   15:39   log
  drwxr-xr-x   11   foo   bar    374   Mar   25   15:39   public
  drwxr-xr-x    3   foo   bar    102   Mar   25   15:39   script
  drwxr-xr-x    8   foo   bar    272   Mar   25   15:39   test
  drwxr-xr-x    6   foo   bar    204   Mar   25   15:39   tmp
  drwxr-xr-x    3   foo   bar    102   Mar   25   15:39   vendor




                                                             ESTRUTURA
> bundle
  Using rake (0.8.7)
  Using abstract (1.0.0)
  Using activesupport (3.0.4)
  Using builder (2.1.2)
  Using i18n (0.5.0)
  Using activemodel (3.0.4)
  Using erubis (2.6.6)
  Installing rack (1.2.2)...



        RESOLVENDO DEPENDÊNCIAS
> rails generate scaffold mesa
codigo:string maximo_pessoas:integer
invoke active_record
 create   db/migrate/20110324004301_create_mesas.rb
 create   app/models/mesa.rb
 invoke   test_unit
 create     test/unit/mesa_test.rb
 create     test/fixtures/mesas.yml
 ...




                       PRIMEIRO CADASTRO
> rake db:create
> rake db:migrate
  == CreateMesas: migrating ====================================
  -- create_table(:mesas)
     -> 0.0019s
  == CreateMesas: migrated (0.0023s) ===========================




                                 CRIANDO O BANCO
> rails server
 => Booting WEBrick
 => Rails 3.0.5 application starting in
    development on http://0.0.0.0:3000
 => Call with -d to detach
 => Ctrl-C to shutdown server




                    INICIANDO O SERVIDOR
> rails generate model atendimento
  invoke active_record
  create   db/migrate/20110325145014_create_aten...
  create   app/models/atendimento.rb
  invoke   test_unit
  create     test/unit/atendimento_test.rb
  create     test/fixtures/atendimentos.yml




                        GERANDO MODELOS
> rails generate controller atendimentos
  create app/controllers/atendimentos_controller.rb
  invoke erb
  create   app/views/atendimentos




             GERANDO CONTROLADORES
> rails generate model pedido
atendimento:references descricao:text
valor:decimal
  invoke active_record
  create   db/migrate/20110325145215_create_pedi...
  create   app/models/pedido.rb
  invoke   test_unit
  create     test/unit/pedido_test.rb
  create     test/fixtures/pedidos.yml




                          GERANDO PEDIDOS
> rails generate controller pedidos
  create   app/controllers/pedidos_controller.rb
  invoke   erb
  create     app/views/pedidos
  invoke   test_unit
  create     test/functional/pedidos_controller_t...
  invoke   helper
  create     app/helpers/pedidos_helper.rb
  invoke     test_unit
  create       test/unit/helpers/pedidos_helper_t...




                           GERANDO PEDIDOS
SINATRA
  sinatrarb.com




ALTERNATIVA
AGILE WEB
DEVELOPMENT
WITH RAILS
Sam Ruby




      REFERÊNCIAS
DESENVOLVIMENTO
ÁGIL PARA WEB 2.0
Caelum




         REFERÊNCIAS
RAILS
  GUIDES
  guides.rubyonrails.org




REFERÊNCIAS
AKITA
  ON RAILS
  akitaonrails.com




REFERÊNCIAS
RAILSCASTS
  railscasts.com




REFERÊNCIAS
PEEPCODE
  peepcode.com




REFERÊNCIAS
ISTO É
TUDO, PESSOAL
      II WORKSHOP DE SOFTWARE LIVRE CINLUG
      Apresentação feita por Guilherme Carvalho e Lailson Bandeira, em 25 de
      março de 2011, disponível em http://www.slideshare.net/frevoonrails. Slides
      criados no Keynote com as fontes League Gothic, Arimo, Copse e Inconsolata.
MAIS UMA COISA…

 !rev"nrails.com.br

Mais conteúdo relacionado

Destaque

Ruby (nem tão) Básico
Ruby (nem tão) BásicoRuby (nem tão) Básico
Ruby (nem tão) BásicoFrevo on Rails
 
Introdução ao Ruby on Rails
Introdução ao Ruby on RailsIntrodução ao Ruby on Rails
Introdução ao Ruby on RailsJuan Maiz
 
Dando os primeiros passos com rails
Dando os primeiros passos com railsDando os primeiros passos com rails
Dando os primeiros passos com railsMarcos Sousa
 
What is-google-adwords
What is-google-adwordsWhat is-google-adwords
What is-google-adwordsAnthony Greene
 
O que vem por aí com Rails 3
O que vem por aí com Rails 3O que vem por aí com Rails 3
O que vem por aí com Rails 3Frevo on Rails
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Railsousli07
 

Destaque (6)

Ruby (nem tão) Básico
Ruby (nem tão) BásicoRuby (nem tão) Básico
Ruby (nem tão) Básico
 
Introdução ao Ruby on Rails
Introdução ao Ruby on RailsIntrodução ao Ruby on Rails
Introdução ao Ruby on Rails
 
Dando os primeiros passos com rails
Dando os primeiros passos com railsDando os primeiros passos com rails
Dando os primeiros passos com rails
 
What is-google-adwords
What is-google-adwordsWhat is-google-adwords
What is-google-adwords
 
O que vem por aí com Rails 3
O que vem por aí com Rails 3O que vem por aí com Rails 3
O que vem por aí com Rails 3
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 

Semelhante a Crash Course Ruby & Rails

Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosGregorio Kusowski
 
Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)
Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)
Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)Julio Betta
 
Quick introduction to Ruby on Rails
Quick introduction to Ruby on RailsQuick introduction to Ruby on Rails
Quick introduction to Ruby on RailsWhitesmith
 
Ruby and Rails intro
Ruby and Rails introRuby and Rails intro
Ruby and Rails introNuno Silva
 
Ruby para programadores PHP
Ruby para programadores PHPRuby para programadores PHP
Ruby para programadores PHPJuan Maiz
 
Ruby para-programadores-php
Ruby para-programadores-phpRuby para-programadores-php
Ruby para-programadores-phpJuan Maiz
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9Nando Vieira
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsJulio Betta
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao rubyFrancis Wagner
 
Shell Tips and Tricks for sysadmin
Shell Tips and Tricks for sysadminShell Tips and Tricks for sysadmin
Shell Tips and Tricks for sysadminMagno Torres
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011JogosUnisinos
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valorKinn Julião
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUACândido Sales Gomes
 

Semelhante a Crash Course Ruby & Rails (20)

Minicurso Ruby on Rails
Minicurso Ruby on RailsMinicurso Ruby on Rails
Minicurso Ruby on Rails
 
Ruby
RubyRuby
Ruby
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanos
 
Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)
Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)
Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)
 
Quick introduction to Ruby on Rails
Quick introduction to Ruby on RailsQuick introduction to Ruby on Rails
Quick introduction to Ruby on Rails
 
Ruby and Rails intro
Ruby and Rails introRuby and Rails intro
Ruby and Rails intro
 
Introducao rubyonrails
Introducao rubyonrailsIntroducao rubyonrails
Introducao rubyonrails
 
Palestra Ruby
Palestra RubyPalestra Ruby
Palestra Ruby
 
Ruby para programadores PHP
Ruby para programadores PHPRuby para programadores PHP
Ruby para programadores PHP
 
Ruby para-programadores-php
Ruby para-programadores-phpRuby para-programadores-php
Ruby para-programadores-php
 
Ruby learning
Ruby learningRuby learning
Ruby learning
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on Rails
 
Aprendendo ruby
Aprendendo rubyAprendendo ruby
Aprendendo ruby
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao ruby
 
Aula 1
Aula 1Aula 1
Aula 1
 
Shell Tips and Tricks for sysadmin
Shell Tips and Tricks for sysadminShell Tips and Tricks for sysadmin
Shell Tips and Tricks for sysadmin
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
 

Mais de Frevo on Rails

Ruby e o Mundo Mágico dos Unicórnios
Ruby e o Mundo Mágico dos UnicórniosRuby e o Mundo Mágico dos Unicórnios
Ruby e o Mundo Mágico dos UnicórniosFrevo on Rails
 
As aventuras psicodélicas de Guilherme no mundo open source
As aventuras psicodélicas de Guilherme no mundo open sourceAs aventuras psicodélicas de Guilherme no mundo open source
As aventuras psicodélicas de Guilherme no mundo open sourceFrevo on Rails
 
Introducao a Ruby on Rails
Introducao a Ruby on RailsIntroducao a Ruby on Rails
Introducao a Ruby on RailsFrevo on Rails
 
Apresentacao institucional Frevo on Rails
Apresentacao institucional Frevo on RailsApresentacao institucional Frevo on Rails
Apresentacao institucional Frevo on RailsFrevo on Rails
 
Programação GUI com jRuby
Programação GUI com jRubyProgramação GUI com jRuby
Programação GUI com jRubyFrevo on Rails
 
WebApps minimalistas com Sinatra
WebApps minimalistas com SinatraWebApps minimalistas com Sinatra
WebApps minimalistas com SinatraFrevo on Rails
 
The elements of User Experience
The elements of User ExperienceThe elements of User Experience
The elements of User ExperienceFrevo on Rails
 
jcheck: validações client-side sem dores
jcheck: validações client-side sem doresjcheck: validações client-side sem dores
jcheck: validações client-side sem doresFrevo on Rails
 
Resolvendo problemas de dependências com o Bundler
Resolvendo problemas de dependências com o BundlerResolvendo problemas de dependências com o Bundler
Resolvendo problemas de dependências com o BundlerFrevo on Rails
 

Mais de Frevo on Rails (14)

Ruby e o Mundo Mágico dos Unicórnios
Ruby e o Mundo Mágico dos UnicórniosRuby e o Mundo Mágico dos Unicórnios
Ruby e o Mundo Mágico dos Unicórnios
 
As aventuras psicodélicas de Guilherme no mundo open source
As aventuras psicodélicas de Guilherme no mundo open sourceAs aventuras psicodélicas de Guilherme no mundo open source
As aventuras psicodélicas de Guilherme no mundo open source
 
Introducao a Ruby on Rails
Introducao a Ruby on RailsIntroducao a Ruby on Rails
Introducao a Ruby on Rails
 
Event machine
Event machineEvent machine
Event machine
 
Apresentacao institucional Frevo on Rails
Apresentacao institucional Frevo on RailsApresentacao institucional Frevo on Rails
Apresentacao institucional Frevo on Rails
 
Programação GUI com jRuby
Programação GUI com jRubyProgramação GUI com jRuby
Programação GUI com jRuby
 
awesome_nested_fields
awesome_nested_fieldsawesome_nested_fields
awesome_nested_fields
 
WebApps minimalistas com Sinatra
WebApps minimalistas com SinatraWebApps minimalistas com Sinatra
WebApps minimalistas com Sinatra
 
The elements of User Experience
The elements of User ExperienceThe elements of User Experience
The elements of User Experience
 
jcheck: validações client-side sem dores
jcheck: validações client-side sem doresjcheck: validações client-side sem dores
jcheck: validações client-side sem dores
 
Perfil da Comunidade
Perfil da ComunidadePerfil da Comunidade
Perfil da Comunidade
 
Resolvendo problemas de dependências com o Bundler
Resolvendo problemas de dependências com o BundlerResolvendo problemas de dependências com o Bundler
Resolvendo problemas de dependências com o Bundler
 
Introdução a Ruby
Introdução a RubyIntrodução a Ruby
Introdução a Ruby
 
Regras do Coding Dojo
Regras do Coding DojoRegras do Coding Dojo
Regras do Coding Dojo
 

Crash Course Ruby & Rails

  • 1. CRASH COURSE GUILHERME CARVALHO LAILSON BANDEIRA RUBY & RAILS
  • 2. REQUISITOS Programação Orientação a objetos Desenvolvimento web
  • 3. linguagem RUBY ON RAILS framework web
  • 4. 1995 Japão RUBY Yukihiro Matsumoto 1.9.2 – 1.8.7
  • 5. DINÂMICA MULTIPARADIGMA SINTAXE FLEXÍVEL SOFTWARE LIVRE REFLEXIVA DUCK MULTIPLATAFORMA FUNCIONAL ORIENTADA A OBJETOS TIPAGEM FORTE INTERPRETADA EXTENSÍVEL
  • 6. PLA PRINCIPLE OF LEAST ASTONISHMENT
  • 7. Ruby is designed to make programmers happy. ”MATZ
  • 8. POR RUEXE MP BY LOS
  • 9. > irb ruby > 2+1 => 3 ruby > 3/2 # divisão inteira => 1 ruby > 3.0/2 # divisão real => 1.5 ruby > 3 > 2 => true INTERACTIVE RUBY
  • 10. ruby > "hello".class => String ruby > 1.class => Fixnum ruby > 1.2.class => Float ruby > 1.+(2) => 3 TUDO É OBJETO
  • 11. ruby > usuario = "Maria" => "Maria" ruby > "Bem-vindo " + usuario => "Bem-vindo Maria" ruby > "Bem-vindo #{usuario}" => "Bem-vindo Maria" ruby > usuario = nil => nil VARIÁVEIS E INTERPOLAÇÃO
  • 12. ruby > numeros = [1,2,3,4] => [1, 2, 3, 4] ruby > linguagens = ['ruby', 'python'] => ["ruby", "python"] ruby > mix = [1, 'ruby', 2.5] => [1, "ruby", 2.5] ruby > linguagens[0] => "ruby" ARRAYS
  • 13. ruby > linguagens.sort => ["python", "ruby"] ruby > numeros.shuffle => [2, 4, 1, 3] ruby > mix[10] = 'longe' => "longe" ruby > mix => [1, "ruby", 2.5, nil, nil, nil, nil, nil, nil, nil, "longe"] ARRAYS
  • 14. ruby > quad = {'dois' => 4, 'tres' => 9} => {"dois"=>4, "tres"=>9} ruby > quad['dois'] => 4 ruby > quad['quatro'] = 16 => 16 ruby > quad => {"dois"=>4, "tres"=>9, "quatro"=>16} HASHES
  • 15. ruby > quad['cinco'] => nil ruby > quad.size => 3 ruby > quad.keys => ["dois", "tres", "quatro"] ruby > quad.values => [4, 9, 16] HASHES
  • 16. ruby > :norte => :norte ruby > cidades = {:norte => 'olinda', :sul => 'jaboatão'} => {:norte=>"olinda", :sul=>"jaboatão"} ruby > cidades[:norte] => "olinda" ruby > cidades = {norte: 'olinda', sul: 'jaboatão'} # apenas 1.9 => {:norte=>"olinda", :sul=>"jaboatão"} SÍMBOLOS
  • 17. ruby > letras = 'a'..'e' => "a".."e" ruby > letras.include?('c') => true ruby > letras.include?('f') => false ruby > letras.to_a => ["a", "b", "c", "d", "e"] RANGES
  • 18. ruby > regex = /[a-z]+/ => /[a-z]+/ ruby > regex =~ 'cinlug' => 0 ruby > regex =~ '1234' => nil ruby > regex =~ '1 mais 2 igual a 3' => 2 EXPRESSÕES REGULARES
  • 19. ruby > cep = /(d{5})-(d{3})/ => /(d{5})-(d{3})/ ruby > cep =~ '50740-540' => 0 ruby > $1 => "50740" ruby > cep.match('50740-540') => #<MatchData "50740-540" 1:"50740"... EXPRESSÕES REGULARES
  • 20. ruby > a,b = 1,2 => [1, 2] ruby > a,b = b,a => [2, 1] ruby > a,b,c = [1,2,3] => [1, 2, 3] ruby > a => 1 ATRIBUIÇÃO
  • 21. > ruby nome_do_arquivo.rb puts "Olá, mundo" print 'Digite seu nome: ' nome = gets puts "Olá, #{nome}" EXECUTANDO UM PROGRAMA
  • 22. usuario = 'Maria' sexo = :feminino if sexo == :masculino saudacao = 'Bem-vindo' elsif sexo == :feminino saudacao = 'Bem-vinda' else saudacao = 'WTF!' end puts "#{saudacao} #{usuario}" CONDICIONAIS
  • 23. usuario = 'Maria' sexo = :feminino saudacao = if sexo == :masculino 'Bem-vindo' elsif sexo == :feminino 'Bem-vinda' else 'WTF!' end puts "#{saudacao} #{usuario}" CONDICIONAIS
  • 24. usuario = 'Maria' sexo = :feminino # ... if sexo == :feminino puts "#{saudacao} #{usuario}" end CONDICIONAIS
  • 25. usuario = 'Maria' sexo = :feminino # ... puts "#{saudacao} #{usuario}" if sexo == :feminino CONDICIONAIS
  • 26. # ... usuario = nil if not usuario puts "Sem usuário para cumprimentar" else puts "#{saudacao} #{usuario}" end CONDICIONAIS
  • 27. # ... usuario = nil unless usuario puts "Sem usuário para cumprimentar" else puts "#{saudacao} #{usuario}" end CONDICIONAIS
  • 28. i = 0 while i < 4 puts "Imprimindo linha #{i}..." i += 1 end LOOPS
  • 29. i = 0 until i >= 4 puts "Imprimindo linha #{i}..." i += 1 end LOOPS
  • 30. 4.times do |i| puts "Imprimindo linha #{i}..." end LOOPS
  • 31. numeros = [1,2,3,4] numeros.each do |n| puts n end LOOPS
  • 32. numeros = [1,2,3,4] for n in numeros puts n end LOOPS
  • 33. cidades = {norte: 'olinda', sul: 'jaboatão'} cidades.each do |chave,valor| puts "ao #{chave} fica #{valor}" end LOOPS
  • 34. cidades = {norte: 'olinda', sul: 'jaboatão'} for chave, valor in cidades puts "ao #{chave} fica #{valor}" end LOOPS
  • 35. numeros = [1,2,3,4] quad = numeros.map do |n| n**2 end puts quad CONSTRUÇÕES FUNCIONAIS
  • 36. numeros = [1,2,3,4] soma = numeros.reduce do |memo, n| memo += n end puts soma CONSTRUÇÕES FUNCIONAIS
  • 37. numeros = [1,2,3,4] soma = numeros.reduce(&:+) puts soma CONSTRUÇÕES FUNCIONAIS
  • 38. def quad(n,e) return n**e end puts quad(3,2) DEFINIÇÃO DE MÉTODOS
  • 39. def quad(n,e) n**e end puts quad(3,2) DEFINIÇÃO DE MÉTODOS
  • 40. def quad(n,e) n**e end puts quad 3,2 DEFINIÇÃO DE MÉTODOS
  • 41. def quad(n,e=2) # valor padrão n**e end puts quad 3 DEFINIÇÃO DE MÉTODOS
  • 42. def fatorial(n) return 1 if n <= 1 n * fatorial(n-1) end puts fatorial(5) CHAMADA DE MÉTODOS
  • 43. def imprimir(hash) puts hash.inspect end puts imprimir({'a' => 1, 'b' => 2}) CHAMADA DE MÉTODOS
  • 44. def imprimir(hash) puts hash.inspect end puts imprimir( 'a' => 1, 'b' => 2 ) CHAMADA DE MÉTODOS
  • 45. class Usuario def initialize(nome) @nome = nome end end usuario = Usuario.new('lailson') CLASSES
  • 46. class Usuario # ... def nome @nome end end usuario = Usuario.new('lailson') puts usuario.nome CLASSES
  • 47. class Usuario # ... def nome=(valor) @nome = valor end end usuario = Usuario.new('lailson') usuario.nome = 'Lailson' puts usuario.nome CLASSES
  • 48. class Usuario attr_reader :nome attr_writer :nome # ... end usuario = Usuario.new('lailson') usuario.nome = 'Lailson' puts usuario.nome CLASSES
  • 49. class Usuario attr_accessor :nome # ... end usuario = Usuario.new('lailson') usuario.nome = 'Lailson' puts usuario.nome CLASSES
  • 50. class Usuario attr_accessor :nome, :idade # ... def maior? idade >= 18 end end usuario = Usuario.new('lailson') usuario.idade = 22 puts usuario.maior? CLASSES
  • 51. class Admin < Usuario def admin? true end end admin = Admin.new('Lailson') puts admin.nome HERANÇA
  • 52. module Autenticacao class Usuario # ... end class Admin < Usuario # ... end end admin = Autenticacao::Admin.new MÓDULOS
  • 53. n = [1,2,3,4] puts n.sum => NoMethodError CLASSES ABERTAS
  • 54. class Array def sum self.reduce(&:+) end end n = [1,2,3,4] puts n.sum CLASSES ABERTAS
  • 55. > gem install prawn require 'prawn' Prawn::Document.generate('hello.pdf') do |pdf| pdf.text("Hello Prawn!") end RUBY GEMS
  • 56. > gem list > gem list rails > gem uninstall rails RUBY GEMS
  • 58. THE RUBY PROGRAMMING LANGUAGE David Flanagan e Matz “The Hummingbird Book” REFERÊNCIAS
  • 59. PROGRAMMING RUBY 1.9 Dave Thomas “The Pickaxe Book” REFERÊNCIAS
  • 60. THE RUBY WAY Hal Fulton REFERÊNCIAS
  • 61. RUBY DOC ruby-doc.org REFERÊNCIAS
  • 62. RAILS API railsapi.com REFERÊNCIAS
  • 63. NA RA PR AT ILS ICA
  • 64. 2004 RAILS US, 37signals David DHH 3.0.5 – 2.3.11
  • 65. QUEM USA CRUNCH BASE BLOG BLOGS PITCHFORK MEDIA BE ON THE NET* YELLOW PAGES HULU TWITTER SCRIBD SLIDESHARE BASECAMP JUSTIN TV GENI GOV. BRASILEIRO* ONDE TRABALHAR*
  • 66. CONFERÊNCIAS EURUKO OXENTE RAILS* RUBYCONF GORUCO RAILSCONF CONFERENCIA RAILS RUBYCONF LATIN AMERICA* RS ON RAILS*
  • 67. EMPRESAS GUAVA* THOUGHTWORKS* TINK* THOUGHTBOT PLATAFORMATEC* CAELUM* 37SIGNALS ENGINE YARD HASHROCKET GONOW* SOFTA*
  • 68. GURUS CEARÁ ON RAILS GURU-SP FREVO ON RAILS RAILSMG RAILSPI GURU-RS
  • 71. KISS KEEP IT STUPIDLY SIMPLE PRINCÍPIOS
  • 72. YAGNI YOU AIN’T GONNA NEED IT NIHS NOT INVENTED HERE SYNDROME TATFT TEST ALL THE FUCKING TIME PRINCÍPIOS
  • 73. FRAMEWORK DE FRAMEWORKS ACTIVE MODEL ACTIVE ACTIVE SUPPORT RECORD RAILTIES ACTIVE ACTION RESOURCE PACK ACTION MAILER
  • 74. ARQUITETURA MVC MODEL-VIEW-CONTROLLER
  • 75. ARQUITETURA HTML, CSS, JS, VIEW Flash, PDF URLs, Rotas CONTROLLER Ações Regras de negócio MODEL Banco de dados
  • 76. > rails new taverna create create README create Rakefile create config.ru create .gitignore create Gemfile create app create app/controllers/appli... CRIANDO APP
  • 77. > ls -l taverna -rw-r--r-- 1 foo bar 743 Mar 25 15:39 Gemfile -rw-r--r-- 1 foo bar 9126 Mar 25 15:39 README -rw-r--r-- 1 foo bar 267 Mar 25 15:39 Rakefile drwxr-xr-x 7 foo bar 238 Mar 25 15:39 app drwxr-xr-x 10 foo bar 340 Mar 25 15:39 config -rw-r--r-- 1 foo bar 157 Mar 25 15:39 config.ru drwxr-xr-x 3 foo bar 102 Mar 25 15:39 db drwxr-xr-x 3 foo bar 102 Mar 25 15:39 doc drwxr-xr-x 3 foo bar 102 Mar 25 15:39 lib drwxr-xr-x 6 foo bar 204 Mar 25 15:39 log drwxr-xr-x 11 foo bar 374 Mar 25 15:39 public drwxr-xr-x 3 foo bar 102 Mar 25 15:39 script drwxr-xr-x 8 foo bar 272 Mar 25 15:39 test drwxr-xr-x 6 foo bar 204 Mar 25 15:39 tmp drwxr-xr-x 3 foo bar 102 Mar 25 15:39 vendor ESTRUTURA
  • 78. > bundle Using rake (0.8.7) Using abstract (1.0.0) Using activesupport (3.0.4) Using builder (2.1.2) Using i18n (0.5.0) Using activemodel (3.0.4) Using erubis (2.6.6) Installing rack (1.2.2)... RESOLVENDO DEPENDÊNCIAS
  • 79. > rails generate scaffold mesa codigo:string maximo_pessoas:integer invoke active_record create db/migrate/20110324004301_create_mesas.rb create app/models/mesa.rb invoke test_unit create test/unit/mesa_test.rb create test/fixtures/mesas.yml ... PRIMEIRO CADASTRO
  • 80. > rake db:create > rake db:migrate == CreateMesas: migrating ==================================== -- create_table(:mesas) -> 0.0019s == CreateMesas: migrated (0.0023s) =========================== CRIANDO O BANCO
  • 81. > rails server => Booting WEBrick => Rails 3.0.5 application starting in development on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server INICIANDO O SERVIDOR
  • 82. > rails generate model atendimento invoke active_record create db/migrate/20110325145014_create_aten... create app/models/atendimento.rb invoke test_unit create test/unit/atendimento_test.rb create test/fixtures/atendimentos.yml GERANDO MODELOS
  • 83. > rails generate controller atendimentos create app/controllers/atendimentos_controller.rb invoke erb create app/views/atendimentos GERANDO CONTROLADORES
  • 84. > rails generate model pedido atendimento:references descricao:text valor:decimal invoke active_record create db/migrate/20110325145215_create_pedi... create app/models/pedido.rb invoke test_unit create test/unit/pedido_test.rb create test/fixtures/pedidos.yml GERANDO PEDIDOS
  • 85. > rails generate controller pedidos create app/controllers/pedidos_controller.rb invoke erb create app/views/pedidos invoke test_unit create test/functional/pedidos_controller_t... invoke helper create app/helpers/pedidos_helper.rb invoke test_unit create test/unit/helpers/pedidos_helper_t... GERANDO PEDIDOS
  • 88. DESENVOLVIMENTO ÁGIL PARA WEB 2.0 Caelum REFERÊNCIAS
  • 89. RAILS GUIDES guides.rubyonrails.org REFERÊNCIAS
  • 90. AKITA ON RAILS akitaonrails.com REFERÊNCIAS
  • 93. ISTO É TUDO, PESSOAL II WORKSHOP DE SOFTWARE LIVRE CINLUG Apresentação feita por Guilherme Carvalho e Lailson Bandeira, em 25 de março de 2011, disponível em http://www.slideshare.net/frevoonrails. Slides criados no Keynote com as fontes League Gothic, Arimo, Copse e Inconsolata.
  • 94. MAIS UMA COISA… !rev"nrails.com.br