Crash Course Ruby & Rails

94
RUBY & RAILS CRASH COURSE GUILHERME CARVALHO LAILSON BANDEIRA

description

Palestra ministrada no II Workshop de Software Livre do CInLUG em 25/03/2011. Introdução a Ruby e Rails. Ruby and Rails Introduction from Frevo on Rails User Group, Pernambuco, Brazil.

Transcript of Crash Course Ruby & Rails

Page 1: Crash Course Ruby & Rails

RUBY& RAILS

CRASH COURSEGUILHERME CARVALHO

LAILSON BANDEIRA

Page 2: Crash Course Ruby & Rails

Programação

REQUISITOS

Orientação a objetos

Desenvolvimento web

Page 3: Crash Course Ruby & Rails

RUBYON RAILS

framework web

linguagem

Page 4: Crash Course Ruby & Rails

RUBY1995

Japão

Yukihiro Matsumoto

1.9.2 – 1.8.7

Page 5: Crash Course Ruby & Rails

ORIENTADA A OBJETOSDINÂM

ICA

INTERPRETADA

MULTIPLATAFORMA

TIPAGEM FORTEMU

LTIPA

RADIG

MA

DUCK

SINTA

XE FL

EXÍVE

L

FUNCIONALREFLEXIVASOFTWARE LIVRE

EXTE

NSÍVE

L

Page 6: Crash Course Ruby & Rails

PRINCIPLE OF LEAST ASTONISHMENTPLA

Page 7: Crash Course Ruby & Rails

Ruby is designed to make programmers happy.“

”MATZ

Page 8: Crash Course Ruby & Rails

RUBYPOR EXEMPLOS

Page 9: Crash Course Ruby & Rails

> irbruby > 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

Page 10: Crash Course Ruby & Rails

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

TUDO É OBJETO

Page 11: Crash Course Ruby & Rails

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

Page 12: Crash Course Ruby & Rails

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

Page 13: Crash Course Ruby & Rails

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

Page 14: Crash Course Ruby & Rails

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

Page 15: Crash Course Ruby & Rails

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

HASHES

Page 16: Crash Course Ruby & Rails

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

Page 17: Crash Course Ruby & Rails

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

Page 18: Crash Course Ruby & Rails

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

Page 19: Crash Course Ruby & Rails

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

Page 20: Crash Course Ruby & Rails

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

Page 21: Crash Course Ruby & Rails

> ruby nome_do_arquivo.rbputs "Olá, mundo"print 'Digite seu nome: 'nome = getsputs "Olá, #{nome}"

EXECUTANDO UM PROGRAMA

Page 22: Crash Course Ruby & Rails

usuario = 'Maria'sexo = :femininoif sexo == :masculino saudacao = 'Bem-vindo'elsif sexo == :feminino saudacao = 'Bem-vinda'else saudacao = 'WTF!'endputs "#{saudacao} #{usuario}"

CONDICIONAIS

Page 23: Crash Course Ruby & Rails

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

CONDICIONAIS

Page 24: Crash Course Ruby & Rails

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

CONDICIONAIS

Page 25: Crash Course Ruby & Rails

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

CONDICIONAIS

Page 26: Crash Course Ruby & Rails

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

CONDICIONAIS

Page 27: Crash Course Ruby & Rails

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

CONDICIONAIS

Page 28: Crash Course Ruby & Rails

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

LOOPS

Page 29: Crash Course Ruby & Rails

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

LOOPS

Page 30: Crash Course Ruby & Rails

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

LOOPS

Page 31: Crash Course Ruby & Rails

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

LOOPS

Page 32: Crash Course Ruby & Rails

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

LOOPS

Page 33: Crash Course Ruby & Rails

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

LOOPS

Page 34: Crash Course Ruby & Rails

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

LOOPS

Page 35: Crash Course Ruby & Rails

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

CONSTRUÇÕES FUNCIONAIS

Page 36: Crash Course Ruby & Rails

numeros = [1,2,3,4]soma = numeros.reduce do |memo, n| memo += nendputs soma

CONSTRUÇÕES FUNCIONAIS

Page 37: Crash Course Ruby & Rails

numeros = [1,2,3,4]soma = numeros.reduce(&:+)puts soma

CONSTRUÇÕES FUNCIONAIS

Page 38: Crash Course Ruby & Rails

def quad(n,e) return n**eendputs quad(3,2)

DEFINIÇÃO DE MÉTODOS

Page 39: Crash Course Ruby & Rails

def quad(n,e) n**eendputs quad(3,2)

DEFINIÇÃO DE MÉTODOS

Page 40: Crash Course Ruby & Rails

def quad(n,e) n**eendputs quad 3,2

DEFINIÇÃO DE MÉTODOS

Page 41: Crash Course Ruby & Rails

def quad(n,e=2) # valor padrão n**eendputs quad 3

DEFINIÇÃO DE MÉTODOS

Page 42: Crash Course Ruby & Rails

def fatorial(n) return 1 if n <= 1 n * fatorial(n-1)endputs fatorial(5)

CHAMADA DE MÉTODOS

Page 43: Crash Course Ruby & Rails

def imprimir(hash) puts hash.inspectendputs imprimir({'a' => 1, 'b' => 2})

CHAMADA DE MÉTODOS

Page 44: Crash Course Ruby & Rails

def imprimir(hash) puts hash.inspectendputs imprimir( 'a' => 1, 'b' => 2 )

CHAMADA DE MÉTODOS

Page 45: Crash Course Ruby & Rails

class Usuario def initialize(nome) @nome = nome endendusuario = Usuario.new('lailson')

CLASSES

Page 46: Crash Course Ruby & Rails

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

CLASSES

Page 47: Crash Course Ruby & Rails

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

CLASSES

Page 48: Crash Course Ruby & Rails

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

CLASSES

Page 49: Crash Course Ruby & Rails

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

CLASSES

Page 50: Crash Course Ruby & Rails

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

CLASSES

Page 51: Crash Course Ruby & Rails

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

HERANÇA

Page 52: Crash Course Ruby & Rails

module Autenticacao class Usuario # ... end class Admin < Usuario # ... endendadmin = Autenticacao::Admin.new

MÓDULOS

Page 53: Crash Course Ruby & Rails

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

CLASSES ABERTAS

Page 54: Crash Course Ruby & Rails

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

CLASSES ABERTAS

Page 55: Crash Course Ruby & Rails

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

RUBY GEMS

Page 56: Crash Course Ruby & Rails

> gem list> gem list rails> gem uninstall rails

RUBY GEMS

Page 57: Crash Course Ruby & Rails

IMPLEMENTAÇÕES

Page 58: Crash Course Ruby & Rails

REFERÊNCIAS

THE RUBY PROGRAMMING LANGUAGEDavid Flanagan e Matz“The Hummingbird Book”

Page 59: Crash Course Ruby & Rails

REFERÊNCIAS

PROGRAMMING RUBY 1.9Dave Thomas“The Pickaxe Book”

Page 60: Crash Course Ruby & Rails

REFERÊNCIAS

THE RUBY WAYHal Fulton

Page 61: Crash Course Ruby & Rails

REFERÊNCIAS

RUBY DOCruby-doc.org

Page 62: Crash Course Ruby & Rails

REFERÊNCIAS

RAILS APIrailsapi.com

Page 63: Crash Course Ruby & Rails

RAILSNA PRATICA

Page 64: Crash Course Ruby & Rails

RAILS2004

US, 37signals

David DHH

3.0.5 – 2.3.11

Page 65: Crash Course Ruby & Rails

QUEM USA

SLIDESHARE

YELLOW PAGES

TWITTER SCRIBDHULU

CRUNCH BASE

JUSTIN TV

PITCHFORK MEDIA

GENI

BASECAMP

BLOG BLOGS

GOV. BRASILEIRO*

BE ON THE NET*

ONDE TRABALHAR*

Page 66: Crash Course Ruby & Rails

CONFERÊNCIAS

RAILSCONFOXENTE RAILS*

EURUKORUBYCONF

RUBYCONF LATIN AMERICA*

RS ON RAILS*

CONFERENCIA RAILS

GORUCO

Page 67: Crash Course Ruby & Rails

EMPRESAS

HASHROCKET

37SIGNALS

THOUGHTWORKS*

PLATAFORMATEC*THOUGHTBOT

ENGINE YARD

GONOW*

TINK*GUAVA*

CAELUM*

SOFTA*

Page 68: Crash Course Ruby & Rails

GURUS

GURU-RS

FREVO ON RAILS

CEARÁ ON RAILS

RAILSPI

GURU-SP

RAILSMG

Page 69: Crash Course Ruby & Rails

PRINCÍPIOS

DON’T REPEAT YOURSELFDRY

Page 70: Crash Course Ruby & Rails

PRINCÍPIOS

CONVENTION OVER CONFIGURATIONCoC

Page 71: Crash Course Ruby & Rails

PRINCÍPIOS

KEEP IT STUPIDLY SIMPLEKISS

Page 72: Crash Course Ruby & Rails

PRINCÍPIOS

YOU AIN’T GONNA NEED ITYAGNINOT INVENTED HERE SYNDROMENIHSTEST ALL THE FUCKING TIMETATFT

Page 73: Crash Course Ruby & Rails

RAILTIES

ACTIVESUPPORT

ACTIVEMODEL

ACTIVERECORD

ACTIONPACK

ACTIONMAILER

ACTIVERESOURCE

FRAM

EWOR

K DE F

RAME

WORK

S

Page 74: Crash Course Ruby & Rails

ARQUITETURA

MVCMODEL-VIEW-CONTROLLER

Page 75: Crash Course Ruby & Rails

ARQUITETURAVIEW

HTML, CSS, JS,Flash, PDF

CONTROLLERURLs, RotasAções

MODELRegras de negócioBanco de dados

Page 76: Crash Course Ruby & Rails

> rails new taverna create create README create Rakefile create config.ru create .gitignore create Gemfile create app create app/controllers/appli...

CRIANDO APP

Page 77: Crash Course Ruby & Rails

ESTRUTURA

> 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

Page 78: Crash Course Ruby & Rails

RESOLVENDO DEPENDÊNCIAS

> 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)...

Page 79: Crash Course Ruby & Rails

PRIMEIRO CADASTRO

> 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 ...

Page 80: Crash Course Ruby & Rails

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

CRIANDO O BANCO

Page 81: Crash Course Ruby & Rails

> 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

Page 82: Crash Course Ruby & Rails

> 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

Page 83: Crash Course Ruby & Rails

> rails generate controller atendimentoscreate app/controllers/atendimentos_controller.rbinvoke erbcreate app/views/atendimentos

GERANDO CONTROLADORES

Page 84: Crash Course Ruby & Rails

> 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

Page 85: Crash Course Ruby & Rails

> 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

Page 86: Crash Course Ruby & Rails

ALTERNATIVA

SINATRAsinatrarb.com

Page 87: Crash Course Ruby & Rails

REFERÊNCIAS

AGILE WEB DEVELOPMENT WITH RAILSSam Ruby

Page 88: Crash Course Ruby & Rails

REFERÊNCIAS

DESENVOLVIMENTO ÁGIL PARA WEB 2.0Caelum

Page 89: Crash Course Ruby & Rails

REFERÊNCIAS

RAILSGUIDESguides.rubyonrails.org

Page 90: Crash Course Ruby & Rails

REFERÊNCIAS

AKITAON RAILSakitaonrails.com

Page 91: Crash Course Ruby & Rails

REFERÊNCIAS

RAILSCASTSrailscasts.com

Page 92: Crash Course Ruby & Rails

REFERÊNCIAS

PEEPCODEpeepcode.com

Page 94: Crash Course Ruby & Rails

MAIS UMA COISA…

!rev"nrails.com.br