Crash Course Ruby & Rails

1,142 views
1,091 views

Published on

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.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,142
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
35
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Crash Course Ruby & Rails

  1. 1. CRASH COURSE GUILHERME CARVALHO LAILSON BANDEIRARUBY& RAILS
  2. 2. REQUISITOSProgramação Orientação a objetos Desenvolvimento web
  3. 3. linguagem RUBYON RAILS framework web
  4. 4. 1995 JapãoRUBY Yukihiro Matsumoto 1.9.2 – 1.8.7
  5. 5. DINÂMICA MULTIPARADIGMA SINTAXE FLEXÍVEL SOFTWARE LIVRE REFLEXIVA DUCK MULTIPLATAFORMA FUNCIONAL ORIENTADA A OBJETOS TIPAGEM FORTE INTERPRETADA EXTENSÍVEL
  6. 6. PLAPRINCIPLE OF LEAST ASTONISHMENT
  7. 7. “ Ruby is designed to make programmers happy. ”MATZ
  8. 8. POR RUEXE MP BY LOS
  9. 9. > irbruby > 2+1 => 3ruby > 3/2 # divisão inteira => 1ruby > 3.0/2 # divisão real => 1.5ruby > 3 > 2 => true INTERACTIVE RUBY
  10. 10. ruby > "hello".class => Stringruby > 1.class => Fixnumruby > 1.2.class => Floatruby > 1.+(2) => 3 TUDO É OBJETO
  11. 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. 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. 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. 14. 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
  15. 15. ruby > quad[cinco] => nilruby > quad.size => 3ruby > quad.keys => ["dois", "tres", "quatro"]ruby > quad.values => [4, 9, 16] HASHES
  16. 16. 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
  17. 17. ruby > letras = a..e => "a".."e"ruby > letras.include?(c) => trueruby > letras.include?(f) => falseruby > letras.to_a => ["a", "b", "c", "d", "e"] RANGES
  18. 18. ruby > regex = /[a-z]+/ => /[a-z]+/ruby > regex =~ cinlug => 0ruby > regex =~ 1234 => nilruby > regex =~ 1 mais 2 igual a 3 => 2 EXPRESSÕES REGULARES
  19. 19. 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
  20. 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. 21. > ruby nome_do_arquivo.rbputs "Olá, mundo"print Digite seu nome: nome = getsputs "Olá, #{nome}" EXECUTANDO UM PROGRAMA
  22. 22. usuario = Mariasexo = :femininoif sexo == :masculino saudacao = Bem-vindoelsif sexo == :feminino saudacao = Bem-vindaelse saudacao = WTF!endputs "#{saudacao} #{usuario}" CONDICIONAIS
  23. 23. usuario = Mariasexo = :femininosaudacao = if sexo == :masculino Bem-vindoelsif sexo == :feminino Bem-vindaelse WTF!endputs "#{saudacao} #{usuario}" CONDICIONAIS
  24. 24. usuario = Mariasexo = :feminino# ...if sexo == :feminino puts "#{saudacao} #{usuario}"end CONDICIONAIS
  25. 25. usuario = Mariasexo = :feminino# ...puts "#{saudacao} #{usuario}" if sexo== :feminino CONDICIONAIS
  26. 26. # ...usuario = nilif not usuario puts "Sem usuário para cumprimentar"else puts "#{saudacao} #{usuario}"end CONDICIONAIS
  27. 27. # ...usuario = nilunless usuario puts "Sem usuário para cumprimentar"else puts "#{saudacao} #{usuario}"end CONDICIONAIS
  28. 28. i = 0while i < 4 puts "Imprimindo linha #{i}..." i += 1end LOOPS
  29. 29. i = 0until i >= 4 puts "Imprimindo linha #{i}..." i += 1end LOOPS
  30. 30. 4.times do |i| puts "Imprimindo linha #{i}..."end LOOPS
  31. 31. numeros = [1,2,3,4]numeros.each do |n| puts nend LOOPS
  32. 32. numeros = [1,2,3,4]for n in numeros puts nend LOOPS
  33. 33. cidades = {norte: olinda, sul:jaboatão}cidades.each do |chave,valor| puts "ao #{chave} fica #{valor}"end LOOPS
  34. 34. cidades = {norte: olinda, sul:jaboatão}for chave, valor in cidades puts "ao #{chave} fica #{valor}"end LOOPS
  35. 35. numeros = [1,2,3,4]quad = numeros.map do |n| n**2endputs quad CONSTRUÇÕES FUNCIONAIS
  36. 36. numeros = [1,2,3,4]soma = numeros.reduce do |memo, n| memo += nendputs soma CONSTRUÇÕES FUNCIONAIS
  37. 37. numeros = [1,2,3,4]soma = numeros.reduce(&:+)puts soma CONSTRUÇÕES FUNCIONAIS
  38. 38. def quad(n,e) return n**eendputs quad(3,2) DEFINIÇÃO DE MÉTODOS
  39. 39. def quad(n,e) n**eendputs quad(3,2) DEFINIÇÃO DE MÉTODOS
  40. 40. def quad(n,e) n**eendputs quad 3,2 DEFINIÇÃO DE MÉTODOS
  41. 41. def quad(n,e=2) # valor padrão n**eendputs quad 3 DEFINIÇÃO DE MÉTODOS
  42. 42. def fatorial(n) return 1 if n <= 1 n * fatorial(n-1)endputs fatorial(5) CHAMADA DE MÉTODOS
  43. 43. def imprimir(hash) puts hash.inspectendputs imprimir({a => 1, b => 2}) CHAMADA DE MÉTODOS
  44. 44. def imprimir(hash) puts hash.inspectendputs imprimir( a => 1, b => 2 ) CHAMADA DE MÉTODOS
  45. 45. class Usuario def initialize(nome) @nome = nome endendusuario = Usuario.new(lailson) CLASSES
  46. 46. class Usuario # ... def nome @nome endendusuario = Usuario.new(lailson)puts usuario.nome CLASSES
  47. 47. class Usuario # ... def nome=(valor) @nome = valor endendusuario = Usuario.new(lailson)usuario.nome = Lailsonputs usuario.nome CLASSES
  48. 48. class Usuario attr_reader :nome attr_writer :nome # ...endusuario = Usuario.new(lailson)usuario.nome = Lailsonputs usuario.nome CLASSES
  49. 49. class Usuario attr_accessor :nome # ...endusuario = Usuario.new(lailson)usuario.nome = Lailsonputs usuario.nome CLASSES
  50. 50. class Usuario attr_accessor :nome, :idade # ... def maior? idade >= 18 endendusuario = Usuario.new(lailson)usuario.idade = 22puts usuario.maior? CLASSES
  51. 51. class Admin < Usuario def admin? true endendadmin = Admin.new(Lailson)puts admin.nome HERANÇA
  52. 52. module Autenticacao class Usuario # ... end class Admin < Usuario # ... endendadmin = Autenticacao::Admin.new MÓDULOS
  53. 53. n = [1,2,3,4]puts n.sum => NoMethodError CLASSES ABERTAS
  54. 54. class Array def sum self.reduce(&:+) endendn = [1,2,3,4]puts n.sum CLASSES ABERTAS
  55. 55. > gem install prawnrequire prawnPrawn::Document.generate(hello.pdf) do |pdf| pdf.text("Hello Prawn!")end RUBY GEMS
  56. 56. > gem list> gem list rails> gem uninstall rails RUBY GEMS
  57. 57. IMPLEMENTAÇÕES
  58. 58. THE RUBYPROGRAMMINGLANGUAGEDavid Flanagan e Matz“The Hummingbird Book” REFERÊNCIAS
  59. 59. PROGRAMMINGRUBY 1.9Dave Thomas“The Pickaxe Book” REFERÊNCIAS
  60. 60. THE RUBY WAYHal Fulton REFERÊNCIAS
  61. 61. RUBY DOC ruby-doc.orgREFERÊNCIAS
  62. 62. RAILS API railsapi.comREFERÊNCIAS
  63. 63. NA RA PR AT ILS ICA
  64. 64. 2004RAILS US, 37signals David DHH 3.0.5 – 2.3.11
  65. 65. QUEM USA CRUNCH BASE BLOG BLOGSPITCHFORK MEDIA BE ON THE NET* YELLOW PAGES HULU TWITTER SCRIBDSLIDESHARE BASECAMP JUSTIN TV GENI GOV. BRASILEIRO* ONDE TRABALHAR*
  66. 66. CONFERÊNCIAS EURUKO OXENTE RAILS* RUBYCONF GORUCO RAILSCONF CONFERENCIA RAILSRUBYCONF LATIN AMERICA* RS ON RAILS*
  67. 67. EMPRESAS GUAVA* THOUGHTWORKS* TINK* THOUGHTBOT PLATAFORMATEC* CAELUM* 37SIGNALS ENGINE YARDHASHROCKET GONOW* SOFTA*
  68. 68. GURUS CEARÁ ON RAILS GURU-SP FREVO ON RAILSRAILSMG RAILSPI GURU-RS
  69. 69. DRYDON’T REPEAT YOURSELF PRINCÍPIOS
  70. 70. CoCCONVENTION OVER CONFIGURATION PRINCÍPIOS
  71. 71. KISSKEEP IT STUPIDLY SIMPLE PRINCÍPIOS
  72. 72. YAGNI YOU AIN’T GONNA NEED IT NIHS NOT INVENTED HERE SYNDROMETATFT TEST ALL THE FUCKING TIME PRINCÍPIOS
  73. 73. FRAMEWORK DE FRAMEWORKS ACTIVE MODEL ACTIVE ACTIVE SUPPORT RECORD RAILTIES ACTIVE ACTION RESOURCE PACK ACTION MAILER
  74. 74. ARQUITETURA MVCMODEL-VIEW-CONTROLLER
  75. 75. ARQUITETURA HTML, CSS, JS, VIEW Flash, PDF URLs, RotasCONTROLLER Ações Regras de negócio MODEL Banco de dados
  76. 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. 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. 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. 79. > 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
  80. 80. > rake db:create> rake db:migrate == CreateMesas: migrating ==================================== -- create_table(:mesas) -> 0.0019s == CreateMesas: migrated (0.0023s) =========================== CRIANDO O BANCO
  81. 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. 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. 83. > rails generate controller atendimentos create app/controllers/atendimentos_controller.rb invoke erb create app/views/atendimentos GERANDO CONTROLADORES
  84. 84. > 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
  85. 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
  86. 86. SINATRA sinatrarb.comALTERNATIVA
  87. 87. AGILE WEBDEVELOPMENTWITH RAILSSam Ruby REFERÊNCIAS
  88. 88. DESENVOLVIMENTOÁGIL PARA WEB 2.0Caelum REFERÊNCIAS
  89. 89. RAILS GUIDES guides.rubyonrails.orgREFERÊNCIAS
  90. 90. AKITA ON RAILS akitaonrails.comREFERÊNCIAS
  91. 91. RAILSCASTS railscasts.comREFERÊNCIAS
  92. 92. PEEPCODE peepcode.comREFERÊNCIAS
  93. 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. 94. MAIS UMA COISA… !rev"nrails.com.br

×