51
Desenvolvimento na velocidade da luz com Ruby on Rails 19h às 22:40 do dia 22 de outubro MC10SI (LABIN I)

Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Embed Size (px)

Citation preview

Page 1: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Desenvolvimento na velocidade da luz com Ruby on Rails

19h às 22:40 do dia 22 de outubroMC10SI (LABIN I)

Page 2: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Quem sou eu?

Luiz Carvalho

7 anos de Ruby on Rails10 anos como desenvolvedor

Defensoria Pública do Estado do Tocantins@LuizCarvalhohttp://luizcarvalho.com

Page 3: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

luizcarvalho.com/cursos.html!

Page 4: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails
Page 5: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Instalação

■sudo apt-get install ruby irb■rvm (

http://www.akitaonrails.com/2015/01/28/ruby-e-rails-no-ubuntu-14-04-lts-trusty-tahr )

> ruby -v> irb

Page 6: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

2.2.0 :001 > puts "hello word!"hello word! => nil 2.2.0 :002 > a = 7 => 7 2.2.0 :003 > puts a7 => nil 2.2.0 :004 > Time.now => 2015-10-19 09:09:21 -0300

IRB

Page 7: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

[1] pry(main)> "a".class=> String[2] pry(main)> 1.class=> Fixnum[3] pry(main)> Fixnum.class=> Class[4] pry(main)> Class.class=> Class

Ruby OO

Page 8: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

[5] pry(main)> 1.methods=> [:to_s,:inspect,:+,:-,:*,:/, ...][6] pry(main)> 1.methods.class=> Array[7] pry(main)> 1.methods.methods=> [:inspect, :to_s, :to_a, :to_h, :to_ary, :frozen?,...]

Ruby OO

Page 9: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Métodos

Page 10: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Classes

Page 11: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Classes

Page 12: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

2.2.0 :001 > minha_variavel = 1 #=> 1 2.2.0 :002 > puts 1 # 12.2.0 :003 > minha_variavel.class # => Fixnum 2.2.0 :004 > minha_variavel = "uma string" # => "uma string" 2.2.0 :005 > minha_variavel.class # => String

Variáveis

■ Iniciar com letras minúsculas■ Tipagem dinâmica

Page 13: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Variáveis e Escopos

Escopo

val local

@val de instância

@@val de classe

$val Global

Page 14: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

2.2.0 :001 > 1.class => Fixnum 2.2.0 :002 > 1.0.class => Float 2.2.0 :003 > 11111111111111111111111111111111111.class => Bignum

Números

Page 15: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Booleanos

Page 16: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

2.2.0 :001 > "curso ruby".class # => String 2.2.0 :002 > 'curso ruby'.class # => String 2.2.0 :003 > 'curso \n ruby' # => "curso \\n ruby" 2.2.0 :004 > "curso \n ruby" # => "curso \n ruby" 2.2.0 :005 > puts "curso \n ruby"curso ruby => nil 2.2.0 :006 > puts 'curso \n ruby'curso \n ruby

String

Page 17: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

2.2.0 :001 > nome = "Luiz" => "Luiz" 2.2.0 :002 > puts "Meu nome é #{nome}"Meu nome é Luiz => nil 2.2.0 :003 > puts 'Meu nome é #{nome}'Meu nome é #{nome} => nil 2.2.0 :004 > puts 'Meu nome é '+nomeMeu nome é Luiz

String

Page 18: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

2.2.0 :002 > "Luna Moon Rider".reverse # => "rediR nooM anuL" 2.2.0 :003 > "Luna Moon Rider".upcase # => "LUNA MOON RIDER" 2.2.0 :005 > "Luna Moon Rider".ljust(55, "*") => "Luna Moon Rider****************************************" 2.2.0 :006 > "Luna Moon Rider"[0,4] # => "Luna" 2.2.0 :007 > "Luna Moon Rider"[5] # => "M" 2.2.0 :008 > "Luna Moon Rider".split(' ') # => ["Luna", "Moon", "Rider"] 2.2.0 :010 > "Luna Moon Rider".match(/(R.*)/)[0] # => "Rider" 2.2.0 :011 > "Luna Moon Rider".next # => "Luna Moon Rides"

String

Page 19: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

[1] pry(main)> "nome".object_id=> 26635140[2] pry(main)> "nome".object_id=> 26512920[3] pry(main)> :nome.object_id=> 2433628[4] pry(main)> :nome.object_id=> 2433628

Simbolos

Page 20: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

2.2.0 :017 > CONTANTE = 'Constantes podem ser alteradas' => "Constantes podem ser alteradas" 2.2.0 :018 > CONTANTE = 'mas o Ruby reclama disso'(irb):18: warning: already initialized constant CONTANTE(irb):17: warning: previous definition of CONTANTE was here => "mas o Ruby reclama disso"

Constantes

Page 21: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

[1] pry(main)> heroes = ['Pudge', 'Invoker', 'Lina']=> ["Pudge", "Invoker", "Lina"][2] pry(main)> heroes[0]=> "Pudge"[3] pry(main)> heroes[2]=> "Lina"[4] pry(main)> heroes[3]=> nil

Array

Page 22: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

[5] pry(main)> heroes[3] = ['mepoo1', 'mepoo2', 'mepoo3']=> ["mepoo1", "mepoo2", "mepoo3"][6] pry(main)> heroes=> ["Pudge", "Invoker", "Lina", ["mepoo1", "mepoo2", "mepoo3"]][7] pry(main)> heroes[4] = 1=> 1[8] pry(main)> heroes[5] = Fixnum=> Fixnum[9] pry(main)> heroes=> ["Pudge", "Invoker", "Lina", ["mepoo1", "mepoo2", "mepoo3"], 1, Fixnum]

Array

Page 23: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

[1] pry(main)> old = {:axe=> 'Axe', :abba=> 'Abbadon', :storm=> 'Storm' }=> {:axe=>"Axe", :abba=>"Abbadon", :storm=>"Storm"}[2] pry(main)> novo = {axe: 'Axe', abba: 'Abbadon', storm: 'Storm' }=> {:axe=>"Axe", :abba=>"Abbadon", :storm=>"Storm"}[3] pry(main)> novo = {1: 'Axe', 2: 'Abbadon', 3: 'Storm' }SyntaxError: unexpected ',', expecting end-of-input[4] pry(main)> old = {1=> 'Axe', 2=> 'Abbadon', 3=> 'Storm' }=> {1=>"Axe", 2=>"Abbadon", 3=>"Storm"}

Hash

Page 24: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

[1] pry(main)> hash = {axe: 'Axe', abba: 'Abbadon', storm: 'Storm' }=> {:axe=>"Axe", :abba=>"Abbadon", :storm=>"Storm"}[2] pry(main)> hash[:abba]=> "Abbadon"[3] pry(main)> hash[:axe]=> "Axe"[4] pry(main)> hash[:lina]=> nil [5] pry(main)> hash[:lina] = "Lina"=> {:axe=>"Axe", :abba=>"Abbadon", :storm=>"Storm", :lina=>"Lina"}

Hash

Page 25: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Blocos

Page 26: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Blocos

Page 27: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

IF

Page 28: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Case When (switch case)

def menu2 puts "Digite um número: " STDOUT.flush

opcao = gets.chomp.to_i

case opcao when 1 puts 'Opção 1' when 2 puts 'Opção 2' when 3..9 puts 'Opção de 3 a 9' else puts 'Opção inválida' endend

Page 29: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Operadores lógicos

x = true; y = false x and y # => falsex && y # => falsex or y # true x || y # true x and !y # true

unless(x and y) # ! (x and y) puts "yeah"end

Page 30: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Quer saber mais?

● http://ruby-doc.org/● https://www.codecademy.com/pt/tracks/ruby

● http://why.carlosbrando.com/● https://www.ruby-lang.org/pt/

Page 31: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails
Page 32: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

“Ruby on Rails é um framework open-source otimizado para felicidade programador e produtividade sustentável. Ele permite escrever código bonito, favorecendo convenção sobre configuração.” – Site do Rails

ROR

Page 33: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Instalações

rails -vgem -vbundle -vsqlite3 --version

Page 34: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Rails

Page 35: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Filosofia do Rails

Page 36: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Sub-Componentes do Rails

ActionMailerServiço de entrega e recebimento de e-mails

ActiveSupportColeção de classes utilitárias e extenções à standard library.

ActionViewFramework de localização e renderização de templates.

ActiveModelConjunto de interfaces para o Modelo

ActionPackResponsável por receber requisições web, rotas, controllers, action e renderização.

ActiveRecordConecta as classes às tabelas do banco de dados. A ORM do Rails.

Page 37: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

PROJETO

30(clientes)x20(basic)x12(meses) = R$ 7200,00

Page 38: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

PROJETO

rails new easy_menu

rails generate scaffold item name description value

rake db:createrake db:migrate

item .

- name- description- value

gem ‘pry’

Page 39: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Estrutura

Page 40: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Estrutura

Page 41: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Estrutura

Page 42: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Home

rails g controller home home

#routes.rbroot 'home#home'

Page 43: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Home

item = Item.newitem.name = "X-Tudo"item.description = "Pão, Queijo, Alface, Salsicha, Hamburger, tomate"item.value = "10,00"

Page 44: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Home

Item.allItem.firstItem.lastItem.findItem.where

Page 45: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Home

Page 46: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Extras

<div class="logo"> <%= image_tag 'logo.png' %></div>

http_basic_authenticate_with name: "admin", password: "admin", except: :index

Page 47: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Categorias

rails g scaffold category name description

rake db:migrate(cadastro)

rails g migration add_category_id_to_items category_id:integer

Page 48: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Categorias

Item belongs_to :categoryCategory has_many :items

i = Item.firsti.category

c = Category.firstc.items

i.category = ci.save

Page 49: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Categorias

Page 50: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Categorias

f.collection_select :category_id, Category.all, :id, :name

Strong Params

def to_snameend

Page 51: Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Obrigado