SlideShare una empresa de Scribd logo
1 de 51
Desenvolvimento na
velocidade da luz com
Ruby on Rails
19h às 22:40 do dia 22 de outubro
MC10SI (LABIN I)
Quem sou eu?
Luiz Carvalho
7 anos de Ruby on Rails
10 anos como desenvolvedor
Defensoria Pública do Estado do Tocantins
@LuizCarvalho
http://luizcarvalho.com
luizcarvalho.com/cursos.html!
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
2.2.0 :001 > puts "hello word!"
hello word!
=> nil
2.2.0 :002 > a = 7
=> 7
2.2.0 :003 > puts a
7
=> nil
2.2.0 :004 > Time.now
=> 2015-10-19 09:09:21 -0300
IRB
[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
[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
Métodos
Classes
Classes
2.2.0 :001 > minha_variavel = 1 #=> 1
2.2.0 :002 > puts 1 # 1
2.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
Variáveis e Escopos
Escopo
val local
@val de instância
@@val de classe
$val Global
2.2.0 :001 > 1.class
=> Fixnum
2.2.0 :002 > 1.0.class
=> Float
2.2.0 :003 > 11111111111111111111111111111111111.class
=> Bignum
Números
Booleanos
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
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 é '+nome
Meu nome é Luiz
String
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
[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
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
[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
[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
[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
[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
Blocos
Blocos
IF
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'
end
end
Operadores lógicos
x = true; y = false
x and y # => false
x && y # => false
x or y # true
x || y # true
x and !y # true
unless(x and y) # ! (x and y)
puts "yeah"
end
Quer saber mais?
● http://ruby-doc.org/
● https://www.codecademy.com/pt/tracks/ruby
● http://why.carlosbrando.com/
● https://www.ruby-lang.org/pt/
“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
Instalações
rails -v
gem -v
bundle -v
sqlite3 --version
Rails
Filosofia do Rails
Sub-Componentes do Rails
ActionMailer
Serviço de entrega e recebimento
de e-mails
ActiveSupport
Coleção de classes utilitárias e
extenções à standard library.
ActionView
Framework de localização e
renderização de templates.
ActiveModel
Conjunto de interfaces para o
Modelo
ActionPack
Responsável por receber
requisições web, rotas, controllers,
action e renderização.
ActiveRecord
Conecta as classes às tabelas do
banco de dados. A ORM do Rails.
PROJETO
30(clientes)x20(basic)x12(meses) = R$ 7200,00
PROJETO
rails new easy_menu
rails generate scaffold item name
description value
rake db:create
rake db:migrate
item .
- name
- description
- value
gem ‘pry’
Estrutura
Estrutura
Estrutura
Home
rails g controller home home
#routes.rb
root 'home#home'
Home
item = Item.new
item.name = "X-Tudo"
item.description = "Pão, Queijo, Alface, Salsicha,
Hamburger, tomate"
item.value = "10,00"
Home
Item.all
Item.first
Item.last
Item.find
Item.where
Home
Extras
<div class="logo">
<%= image_tag 'logo.png' %>
</div>
http_basic_authenticate_with name: "admin", password:
"admin", except: :index
Categorias
rails g scaffold category name description
rake db:migrate
(cadastro)
rails g migration add_category_id_to_items
category_id:integer
Categorias
Item belongs_to :category
Category has_many :items
i = Item.first
i.category
c = Category.first
c.items
i.category = c
i.save
Categorias
Categorias
f.collection_select :category_id, Category.all, :id, :name
Strong Params
def to_s
name
end
Obrigado

Más contenido relacionado

La actualidad más candente

Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasNode.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasRodrigo Branas
 
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleepCurso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleepLoiane Groner
 
JavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamentoJavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamentoRicardo Valeriano
 
[Curso Java Basico] Aula 68: Threads: Interface Runnable
[Curso Java Basico] Aula 68: Threads: Interface Runnable[Curso Java Basico] Aula 68: Threads: Interface Runnable
[Curso Java Basico] Aula 68: Threads: Interface RunnableLoiane Groner
 
Apresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriverApresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriverRafael Lima
 
Introdução a python módulo b
Introdução a python   módulo bIntrodução a python   módulo b
Introdução a python módulo bJader Gabriel
 

La actualidad más candente (11)

Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasNode.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleepCurso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
 
Python Class
Python ClassPython Class
Python Class
 
JavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamentoJavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamento
 
[Curso Java Basico] Aula 68: Threads: Interface Runnable
[Curso Java Basico] Aula 68: Threads: Interface Runnable[Curso Java Basico] Aula 68: Threads: Interface Runnable
[Curso Java Basico] Aula 68: Threads: Interface Runnable
 
Apresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriverApresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriver
 
Asterisk
AsteriskAsterisk
Asterisk
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 
Introdução a python módulo b
Introdução a python   módulo bIntrodução a python   módulo b
Introdução a python módulo b
 
Php curl - Coleta de dados na web
Php curl - Coleta de dados na webPhp curl - Coleta de dados na web
Php curl - Coleta de dados na web
 

Más de Luiz Carvalho

Palestra Online: Quanto custa um app para sua empresa?
Palestra Online: Quanto custa um app para sua empresa?Palestra Online: Quanto custa um app para sua empresa?
Palestra Online: Quanto custa um app para sua empresa?Luiz Carvalho
 
Comunidade Startup Tocantins 2019
Comunidade Startup Tocantins 2019 Comunidade Startup Tocantins 2019
Comunidade Startup Tocantins 2019 Luiz Carvalho
 
Chatbots e a nova era das aplicações móveis - Congresso Internacional de CIT
Chatbots e a nova era das aplicações móveis - Congresso Internacional de CITChatbots e a nova era das aplicações móveis - Congresso Internacional de CIT
Chatbots e a nova era das aplicações móveis - Congresso Internacional de CITLuiz Carvalho
 
Chatbots e a revolução digital
Chatbots e a revolução digitalChatbots e a revolução digital
Chatbots e a revolução digitalLuiz Carvalho
 
Movimento startup Tocantins [Araguaína]
Movimento startup Tocantins [Araguaína]Movimento startup Tocantins [Araguaína]
Movimento startup Tocantins [Araguaína]Luiz Carvalho
 
Apresentação Parlo Startup Day 2017 Palmas
Apresentação Parlo Startup Day 2017 PalmasApresentação Parlo Startup Day 2017 Palmas
Apresentação Parlo Startup Day 2017 PalmasLuiz Carvalho
 
Chatbots: A nova era das aplicações móveis
Chatbots:  A nova era das aplicações móveis Chatbots:  A nova era das aplicações móveis
Chatbots: A nova era das aplicações móveis Luiz Carvalho
 
Minicurso: Como criar chatbots
Minicurso: Como criar chatbotsMinicurso: Como criar chatbots
Minicurso: Como criar chatbotsLuiz Carvalho
 
Chatbot - A nova era das aplicações móveis
Chatbot  - A nova era das aplicações móveisChatbot  - A nova era das aplicações móveis
Chatbot - A nova era das aplicações móveisLuiz Carvalho
 
Curso de Introdução ao Android Básico
Curso de Introdução ao Android BásicoCurso de Introdução ao Android Básico
Curso de Introdução ao Android BásicoLuiz Carvalho
 
Palestra: Movimento Startup Tocantins
Palestra: Movimento Startup TocantinsPalestra: Movimento Startup Tocantins
Palestra: Movimento Startup TocantinsLuiz Carvalho
 
Rails: Porque programar deve ser divertido
Rails: Porque programar deve ser divertidoRails: Porque programar deve ser divertido
Rails: Porque programar deve ser divertidoLuiz Carvalho
 
Ruby On Rails: Por que sua Startup deve usar?
Ruby On Rails: Por que sua Startup deve usar?Ruby On Rails: Por que sua Startup deve usar?
Ruby On Rails: Por que sua Startup deve usar?Luiz Carvalho
 

Más de Luiz Carvalho (15)

Palestra Online: Quanto custa um app para sua empresa?
Palestra Online: Quanto custa um app para sua empresa?Palestra Online: Quanto custa um app para sua empresa?
Palestra Online: Quanto custa um app para sua empresa?
 
Comunidade Startup Tocantins 2019
Comunidade Startup Tocantins 2019 Comunidade Startup Tocantins 2019
Comunidade Startup Tocantins 2019
 
Chatbots e a nova era das aplicações móveis - Congresso Internacional de CIT
Chatbots e a nova era das aplicações móveis - Congresso Internacional de CITChatbots e a nova era das aplicações móveis - Congresso Internacional de CIT
Chatbots e a nova era das aplicações móveis - Congresso Internacional de CIT
 
Chatbots e a revolução digital
Chatbots e a revolução digitalChatbots e a revolução digital
Chatbots e a revolução digital
 
Movimento startup Tocantins [Araguaína]
Movimento startup Tocantins [Araguaína]Movimento startup Tocantins [Araguaína]
Movimento startup Tocantins [Araguaína]
 
Apresentação Parlo Startup Day 2017 Palmas
Apresentação Parlo Startup Day 2017 PalmasApresentação Parlo Startup Day 2017 Palmas
Apresentação Parlo Startup Day 2017 Palmas
 
Chatbots: A nova era das aplicações móveis
Chatbots:  A nova era das aplicações móveis Chatbots:  A nova era das aplicações móveis
Chatbots: A nova era das aplicações móveis
 
Minicurso: Como criar chatbots
Minicurso: Como criar chatbotsMinicurso: Como criar chatbots
Minicurso: Como criar chatbots
 
Chatbot - A nova era das aplicações móveis
Chatbot  - A nova era das aplicações móveisChatbot  - A nova era das aplicações móveis
Chatbot - A nova era das aplicações móveis
 
Curso de Introdução ao Android Básico
Curso de Introdução ao Android BásicoCurso de Introdução ao Android Básico
Curso de Introdução ao Android Básico
 
Palestra: Movimento Startup Tocantins
Palestra: Movimento Startup TocantinsPalestra: Movimento Startup Tocantins
Palestra: Movimento Startup Tocantins
 
Rails: Porque programar deve ser divertido
Rails: Porque programar deve ser divertidoRails: Porque programar deve ser divertido
Rails: Porque programar deve ser divertido
 
Ruby On Rails: Por que sua Startup deve usar?
Ruby On Rails: Por que sua Startup deve usar?Ruby On Rails: Por que sua Startup deve usar?
Ruby On Rails: Por que sua Startup deve usar?
 
Droido - imprensa
Droido - imprensaDroido - imprensa
Droido - imprensa
 
Droido
DroidoDroido
Droido
 

Último

Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2Maria Teresa Thomaz
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxMarcosLemes28
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxLeonardoGabriel65
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPaulaYaraDaasPedro
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxTailsonSantos1
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...HELENO FAVACHO
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...andreiavys
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxAntonioVieira539017
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxLuizHenriquedeAlmeid6
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeitotatianehilda
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*Viviane Moreiras
 
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfTCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfamarianegodoi
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptssuser2b53fe
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffNarlaAquino
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfcomercial400681
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAssuser2ad38b
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxandrenespoli3
 

Último (20)

Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptx
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfTCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
 

Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

  • 1. Desenvolvimento na velocidade da luz com Ruby on Rails 19h às 22:40 do dia 22 de outubro MC10SI (LABIN I)
  • 2. Quem sou eu? Luiz Carvalho 7 anos de Ruby on Rails 10 anos como desenvolvedor Defensoria Pública do Estado do Tocantins @LuizCarvalho http://luizcarvalho.com
  • 4.
  • 5. 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
  • 6. 2.2.0 :001 > puts "hello word!" hello word! => nil 2.2.0 :002 > a = 7 => 7 2.2.0 :003 > puts a 7 => nil 2.2.0 :004 > Time.now => 2015-10-19 09:09:21 -0300 IRB
  • 7. [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
  • 8. [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
  • 12. 2.2.0 :001 > minha_variavel = 1 #=> 1 2.2.0 :002 > puts 1 # 1 2.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
  • 13. Variáveis e Escopos Escopo val local @val de instância @@val de classe $val Global
  • 14. 2.2.0 :001 > 1.class => Fixnum 2.2.0 :002 > 1.0.class => Float 2.2.0 :003 > 11111111111111111111111111111111111.class => Bignum Números
  • 16. 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
  • 17. 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 é '+nome Meu nome é Luiz String
  • 18. 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
  • 19. [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
  • 20. 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
  • 21. [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
  • 22. [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
  • 23. [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
  • 24. [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
  • 27. IF
  • 28. 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' end end
  • 29. Operadores lógicos x = true; y = false x and y # => false x && y # => false x or y # true x || y # true x and !y # true unless(x and y) # ! (x and y) puts "yeah" end
  • 30. Quer saber mais? ● http://ruby-doc.org/ ● https://www.codecademy.com/pt/tracks/ruby ● http://why.carlosbrando.com/ ● https://www.ruby-lang.org/pt/
  • 31.
  • 32. “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
  • 33. Instalações rails -v gem -v bundle -v sqlite3 --version
  • 34. Rails
  • 36. Sub-Componentes do Rails ActionMailer Serviço de entrega e recebimento de e-mails ActiveSupport Coleção de classes utilitárias e extenções à standard library. ActionView Framework de localização e renderização de templates. ActiveModel Conjunto de interfaces para o Modelo ActionPack Responsável por receber requisições web, rotas, controllers, action e renderização. ActiveRecord Conecta as classes às tabelas do banco de dados. A ORM do Rails.
  • 38. PROJETO rails new easy_menu rails generate scaffold item name description value rake db:create rake db:migrate item . - name - description - value gem ‘pry’
  • 42. Home rails g controller home home #routes.rb root 'home#home'
  • 43. Home item = Item.new item.name = "X-Tudo" item.description = "Pão, Queijo, Alface, Salsicha, Hamburger, tomate" item.value = "10,00"
  • 45. Home
  • 46. Extras <div class="logo"> <%= image_tag 'logo.png' %> </div> http_basic_authenticate_with name: "admin", password: "admin", except: :index
  • 47. Categorias rails g scaffold category name description rake db:migrate (cadastro) rails g migration add_category_id_to_items category_id:integer
  • 48. Categorias Item belongs_to :category Category has_many :items i = Item.first i.category c = Category.first c.items i.category = c i.save
  • 50. Categorias f.collection_select :category_id, Category.all, :id, :name Strong Params def to_s name end