Crash Course Ruby & Rails
Upcoming SlideShare
Loading in...5
×
 

Crash Course Ruby & Rails

on

  • 1,291 views

Palestra ministrada no II Workshop de Software Livre do CInLUG em 25/03/2011. Introdução a Ruby e Rails.

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.

Statistics

Views

Total Views
1,291
Views on SlideShare
1,291
Embed Views
0

Actions

Likes
1
Downloads
33
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Crash Course Ruby & Rails Crash Course Ruby & Rails Presentation Transcript

  • CRASH COURSE GUILHERME CARVALHO LAILSON BANDEIRARUBY& RAILS
  • REQUISITOSProgramação Orientação a objetos Desenvolvimento web
  • linguagem RUBYON RAILS framework web
  • 1995 JapãoRUBY 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
  • PLAPRINCIPLE OF LEAST ASTONISHMENT
  • “ Ruby is designed to make programmers happy. ”MATZ
  • POR RUEXE MP BY LOS
  • > irbruby > 2+1 => 3ruby > 3/2 # divisão inteira => 1ruby > 3.0/2 # divisão real => 1.5ruby > 3 > 2 => true INTERACTIVE RUBY
  • ruby > "hello".class => Stringruby > 1.class => Fixnumruby > 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] => 4ruby > quad[quatro] = 16 => 16ruby > quad => {"dois"=>4, "tres"=>9, "quatro"=>16} HASHES
  • ruby > quad[cinco] => nilruby > quad.size => 3ruby > quad.keys => ["dois", "tres", "quatro"]ruby > quad.values => [4, 9, 16] HASHES
  • ruby > :norte => :norteruby > 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) => trueruby > letras.include?(f) => falseruby > letras.to_a => ["a", "b", "c", "d", "e"] RANGES
  • ruby > regex = /[a-z]+/ => /[a-z]+/ruby > regex =~ cinlug => 0ruby > regex =~ 1234 => nilruby > 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 => 0ruby > $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 = Mariasexo = :femininoif sexo == :masculino saudacao = Bem-vindoelsif sexo == :feminino saudacao = Bem-vindaelse saudacao = WTF!endputs "#{saudacao} #{usuario}" CONDICIONAIS
  • usuario = Mariasexo = :femininosaudacao = if sexo == :masculino Bem-vindoelsif sexo == :feminino Bem-vindaelse WTF!endputs "#{saudacao} #{usuario}" CONDICIONAIS
  • usuario = Mariasexo = :feminino# ...if sexo == :feminino puts "#{saudacao} #{usuario}"end CONDICIONAIS
  • usuario = Mariasexo = :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 endendusuario = Usuario.new(lailson)puts usuario.nome CLASSES
  • class Usuario # ... def nome=(valor) @nome = valor endendusuario = Usuario.new(lailson)usuario.nome = Lailsonputs usuario.nome CLASSES
  • class Usuario attr_reader :nome attr_writer :nome # ...endusuario = Usuario.new(lailson)usuario.nome = Lailsonputs usuario.nome CLASSES
  • class Usuario attr_accessor :nome # ...endusuario = Usuario.new(lailson)usuario.nome = Lailsonputs 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 prawnPrawn::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 RUBYPROGRAMMINGLANGUAGEDavid Flanagan e Matz“The Hummingbird Book” REFERÊNCIAS
  • PROGRAMMINGRUBY 1.9Dave Thomas“The Pickaxe Book” REFERÊNCIAS
  • THE RUBY WAYHal Fulton REFERÊNCIAS
  • RUBY DOC ruby-doc.orgREFERÊNCIAS
  • RAILS API railsapi.comREFERÊNCIAS
  • NA RA PR AT ILS ICA
  • 2004RAILS US, 37signals David DHH 3.0.5 – 2.3.11
  • QUEM USA CRUNCH BASE BLOG BLOGSPITCHFORK MEDIA BE ON THE NET* YELLOW PAGES HULU TWITTER SCRIBDSLIDESHARE BASECAMP JUSTIN TV GENI GOV. BRASILEIRO* ONDE TRABALHAR*
  • CONFERÊNCIAS EURUKO OXENTE RAILS* RUBYCONF GORUCO RAILSCONF CONFERENCIA RAILSRUBYCONF LATIN AMERICA* RS ON RAILS*
  • EMPRESAS GUAVA* THOUGHTWORKS* TINK* THOUGHTBOT PLATAFORMATEC* CAELUM* 37SIGNALS ENGINE YARDHASHROCKET GONOW* SOFTA*
  • GURUS CEARÁ ON RAILS GURU-SP FREVO ON RAILSRAILSMG RAILSPI GURU-RS
  • DRYDON’T REPEAT YOURSELF PRINCÍPIOS
  • CoCCONVENTION OVER CONFIGURATION PRINCÍPIOS
  • KISSKEEP IT STUPIDLY SIMPLE PRINCÍPIOS
  • YAGNI YOU AIN’T GONNA NEED IT NIHS NOT INVENTED HERE SYNDROMETATFT TEST ALL THE FUCKING TIME PRINCÍPIOS
  • FRAMEWORK DE FRAMEWORKS ACTIVE MODEL ACTIVE ACTIVE SUPPORT RECORD RAILTIES ACTIVE ACTION RESOURCE PACK ACTION MAILER
  • ARQUITETURA MVCMODEL-VIEW-CONTROLLER
  • ARQUITETURA HTML, CSS, JS, VIEW Flash, PDF URLs, RotasCONTROLLER 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 mesacodigo:string maximo_pessoas:integerinvoke 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 pedidoatendimento:references descricao:textvalor: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.comALTERNATIVA
  • AGILE WEBDEVELOPMENTWITH RAILSSam Ruby REFERÊNCIAS
  • DESENVOLVIMENTOÁGIL PARA WEB 2.0Caelum REFERÊNCIAS
  • RAILS GUIDES guides.rubyonrails.orgREFERÊNCIAS
  • AKITA ON RAILS akitaonrails.comREFERÊNCIAS
  • RAILSCASTS railscasts.comREFERÊNCIAS
  • PEEPCODE peepcode.comREFERÊ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