View
1.049
Download
3
Category
Tags:
Preview:
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.
Citation preview
RUBY& RAILS
CRASH COURSEGUILHERME CARVALHO
LAILSON BANDEIRA
Programação
REQUISITOS
Orientação a objetos
Desenvolvimento web
RUBYON RAILS
framework web
linguagem
RUBY1995
Japão
Yukihiro Matsumoto
1.9.2 – 1.8.7
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
PRINCIPLE OF LEAST ASTONISHMENTPLA
Ruby is designed to make programmers happy.“
”MATZ
RUBYPOR EXEMPLOS
> 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
ruby > "hello".class => String ruby > 1.class => Fixnum ruby > 1.2.class => Floatruby > 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'] => nilruby > 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.rbputs "Olá, mundo"print 'Digite seu nome: 'nome = getsputs "Olá, #{nome}"
EXECUTANDO UM PROGRAMA
usuario = 'Maria'sexo = :femininoif sexo == :masculino saudacao = 'Bem-vindo'elsif sexo == :feminino saudacao = 'Bem-vinda'else saudacao = 'WTF!'endputs "#{saudacao} #{usuario}"
CONDICIONAIS
usuario = 'Maria'sexo = :femininosaudacao = if sexo == :masculino 'Bem-vindo'elsif sexo == :feminino 'Bem-vinda'else 'WTF!'endputs "#{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 = nilif not usuario puts "Sem usuário para cumprimentar"else puts "#{saudacao} #{usuario}"end
CONDICIONAIS
# ...usuario = nilunless usuario puts "Sem usuário para cumprimentar"else puts "#{saudacao} #{usuario}"end
CONDICIONAIS
i = 0while i < 4 puts "Imprimindo linha #{i}..." i += 1end
LOOPS
i = 0until i >= 4 puts "Imprimindo linha #{i}..." i += 1end
LOOPS
4.times do |i| puts "Imprimindo linha #{i}..."end
LOOPS
numeros = [1,2,3,4]numeros.each do |n| puts nend
LOOPS
numeros = [1,2,3,4]for n in numeros puts nend
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**2endputs quad
CONSTRUÇÕES FUNCIONAIS
numeros = [1,2,3,4]soma = numeros.reduce do |memo, n| memo += nendputs soma
CONSTRUÇÕES FUNCIONAIS
numeros = [1,2,3,4]soma = numeros.reduce(&:+)puts soma
CONSTRUÇÕES FUNCIONAIS
def quad(n,e) return n**eendputs quad(3,2)
DEFINIÇÃO DE MÉTODOS
def quad(n,e) n**eendputs quad(3,2)
DEFINIÇÃO DE MÉTODOS
def quad(n,e) n**eendputs quad 3,2
DEFINIÇÃO DE MÉTODOS
def quad(n,e=2) # valor padrão n**eendputs quad 3
DEFINIÇÃO DE MÉTODOS
def fatorial(n) return 1 if n <= 1 n * fatorial(n-1)endputs fatorial(5)
CHAMADA DE MÉTODOS
def imprimir(hash) puts hash.inspectendputs imprimir({'a' => 1, 'b' => 2})
CHAMADA DE MÉTODOS
def imprimir(hash) puts hash.inspectendputs imprimir( 'a' => 1, 'b' => 2 )
CHAMADA DE MÉTODOS
class Usuario def initialize(nome) @nome = nome endendusuario = Usuario.new('lailson')
CLASSES
class Usuario # ... def nome @nome end endusuario = Usuario.new('lailson')puts usuario.nome
CLASSES
class Usuario # ... def nome=(valor) @nome = valor endendusuario = Usuario.new('lailson')usuario.nome = 'Lailson'puts usuario.nome
CLASSES
class Usuario attr_reader :nome attr_writer :nome # ...endusuario = Usuario.new('lailson')usuario.nome = 'Lailson'puts usuario.nome
CLASSES
class Usuario attr_accessor :nome # ...endusuario = Usuario.new('lailson')usuario.nome = 'Lailson'puts usuario.nome
CLASSES
class Usuario attr_accessor :nome, :idade # ... def maior? idade >= 18 endendusuario = Usuario.new('lailson')usuario.idade = 22puts usuario.maior?
CLASSES
class Admin < Usuario def admin? true endendadmin = Admin.new('Lailson')puts admin.nome
HERANÇA
module Autenticacao class Usuario # ... end class Admin < Usuario # ... endendadmin = Autenticacao::Admin.new
MÓDULOS
n = [1,2,3,4]puts n.sum => NoMethodError
CLASSES ABERTAS
class Array def sum self.reduce(&:+) endendn = [1,2,3,4]puts n.sum
CLASSES ABERTAS
> gem install prawnrequire '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
REFERÊNCIAS
THE RUBY PROGRAMMING LANGUAGEDavid Flanagan e Matz“The Hummingbird Book”
REFERÊNCIAS
PROGRAMMING RUBY 1.9Dave Thomas“The Pickaxe Book”
REFERÊNCIAS
THE RUBY WAYHal Fulton
RAILSNA PRATICA
RAILS2004
US, 37signals
David DHH
3.0.5 – 2.3.11
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*
CONFERÊNCIAS
RAILSCONFOXENTE RAILS*
EURUKORUBYCONF
RUBYCONF LATIN AMERICA*
RS ON RAILS*
CONFERENCIA RAILS
GORUCO
EMPRESAS
HASHROCKET
37SIGNALS
THOUGHTWORKS*
PLATAFORMATEC*THOUGHTBOT
ENGINE YARD
GONOW*
TINK*GUAVA*
CAELUM*
SOFTA*
GURUS
GURU-RS
FREVO ON RAILS
CEARÁ ON RAILS
RAILSPI
GURU-SP
RAILSMG
PRINCÍPIOS
DON’T REPEAT YOURSELFDRY
PRINCÍPIOS
CONVENTION OVER CONFIGURATIONCoC
PRINCÍPIOS
KEEP IT STUPIDLY SIMPLEKISS
PRINCÍPIOS
YOU AIN’T GONNA NEED ITYAGNINOT INVENTED HERE SYNDROMENIHSTEST ALL THE FUCKING TIMETATFT
RAILTIES
ACTIVESUPPORT
ACTIVEMODEL
ACTIVERECORD
ACTIONPACK
ACTIONMAILER
ACTIVERESOURCE
FRAM
EWOR
K DE F
RAME
WORK
S
ARQUITETURA
MVCMODEL-VIEW-CONTROLLER
ARQUITETURAVIEW
HTML, CSS, JS,Flash, PDF
CONTROLLERURLs, RotasAções
MODELRegras de negócioBanco 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
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
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)...
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 ...
> 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 atendimentoscreate app/controllers/atendimentos_controller.rbinvoke erbcreate 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
REFERÊNCIAS
AGILE WEB DEVELOPMENT WITH RAILSSam Ruby
REFERÊNCIAS
DESENVOLVIMENTO ÁGIL PARA WEB 2.0Caelum
REFERÊNCIAS
RAILSGUIDESguides.rubyonrails.org
ISTO ÉTUDO, PESSOAL
II WORKSHOP DE SOFTWARE LIVRE CINLUGApresentaçã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
Recommended