SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances

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
 

Tendances (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
 

Plus 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
 

Plus 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
 

Dernier

GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docPauloHenriqueGarciaM
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do séculoBiblioteca UCS
 
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedAula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedJaquelineBertagliaCe
 
3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptxMarlene Cunhada
 
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
 
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfTCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfamarianegodoi
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdfmarlene54545
 
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
 
Poesiamodernismo fase dois. 1930 prosa e poesiapptx
Poesiamodernismo fase dois. 1930 prosa e poesiapptxPoesiamodernismo fase dois. 1930 prosa e poesiapptx
Poesiamodernismo fase dois. 1930 prosa e poesiapptxPabloGabrielKdabra
 
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
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...azulassessoria9
 
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdfAPRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdfgerathird
 
Renascimento Cultural na Idade Moderna PDF
Renascimento Cultural na Idade Moderna PDFRenascimento Cultural na Idade Moderna PDF
Renascimento Cultural na Idade Moderna PDFRafaelaMartins72608
 
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
 
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...DirceuNascimento5
 
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
 
M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxJustinoTeixeira1
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...MariaCristinaSouzaLe1
 
Aula prática JOGO-Regencia-Verbal-e-Nominal.pdf
Aula prática JOGO-Regencia-Verbal-e-Nominal.pdfAula prática JOGO-Regencia-Verbal-e-Nominal.pdf
Aula prática JOGO-Regencia-Verbal-e-Nominal.pdfKarinaSouzaCorreiaAl
 
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
 

Dernier (20)

GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do século
 
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedAula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
 
3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx
 
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
 
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfTCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.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
 
Poesiamodernismo fase dois. 1930 prosa e poesiapptx
Poesiamodernismo fase dois. 1930 prosa e poesiapptxPoesiamodernismo fase dois. 1930 prosa e poesiapptx
Poesiamodernismo fase dois. 1930 prosa e poesiapptx
 
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
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdfAPRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
 
Renascimento Cultural na Idade Moderna PDF
Renascimento Cultural na Idade Moderna PDFRenascimento Cultural na Idade Moderna PDF
Renascimento Cultural na Idade Moderna PDF
 
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
 
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
 
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*
 
M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptx
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
 
Aula prática JOGO-Regencia-Verbal-e-Nominal.pdf
Aula prática JOGO-Regencia-Verbal-e-Nominal.pdfAula prática JOGO-Regencia-Verbal-e-Nominal.pdf
Aula prática JOGO-Regencia-Verbal-e-Nominal.pdf
 
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
 

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