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

Crash Course Ruby & Rails

  • 1.
    CRASH COURSE GUILHERME CARVALHO LAILSON BANDEIRA RUBY & RAILS
  • 2.
    REQUISITOS Programação Orientaçãoa 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.
  • 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 whilei < 4 puts "Imprimindo linha #{i}..." i += 1 end LOOPS
  • 29.
    i = 0 untili >= 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.eachdo |n| puts n end LOOPS
  • 32.
    numeros = [1,2,3,4] forn 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] putsn.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 installprawn 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
  • 57.
  • 58.
    THE RUBY PROGRAMMING LANGUAGE David Flanagane Matz “The Hummingbird Book” REFERÊNCIAS
  • 59.
    PROGRAMMING RUBY 1.9 Dave Thomas “ThePickaxe Book” REFERÊNCIAS
  • 60.
    THE RUBY WAY HalFulton 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
  • 69.
  • 70.
  • 71.
    KISS KEEP IT STUPIDLYSIMPLE 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 newtaverna create create README create Rakefile create config.ru create .gitignore create Gemfile create app create app/controllers/appli... CRIANDO APP
  • 77.
    > ls -ltaverna -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 generatescaffold 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 generatemodel 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 generatecontroller atendimentos create app/controllers/atendimentos_controller.rb invoke erb create app/views/atendimentos GERANDO CONTROLADORES
  • 84.
    > rails generatemodel 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 generatecontroller 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
  • 86.
  • 87.
  • 88.
    DESENVOLVIMENTO ÁGIL PARA WEB2.0 Caelum REFERÊNCIAS
  • 89.
    RAILS GUIDES guides.rubyonrails.org REFERÊNCIAS
  • 90.
    AKITA ONRAILS akitaonrails.com REFERÊNCIAS
  • 91.
  • 92.
  • 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