SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

Mais procurados

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
Rodrigo Branas
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
Eng. Carlos Eduardo Ferreiro Corrêa
 
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
Loiane Groner
 
Python Class
Python ClassPython Class
Python Class
Romualdo Andre
 
JavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamentoJavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamento
Ricardo 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 Runnable
Loiane 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 webdriver
Rafael Lima
 
Asterisk
AsteriskAsterisk
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
antonio sérgio nogueira
 
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
 
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
Luis Gustavo Almeida
 

Mais procurados (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
 

Mais 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 CIT
Luiz Carvalho
 
Chatbots e a revolução digital
Chatbots e a revolução digitalChatbots e a revolução digital
Chatbots e a revolução digital
Luiz 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 Palmas
Luiz 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 chatbots
Luiz 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óveis
Luiz 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ásico
Luiz Carvalho
 
Palestra: Movimento Startup Tocantins
Palestra: Movimento Startup TocantinsPalestra: Movimento Startup Tocantins
Palestra: Movimento Startup Tocantins
Luiz Carvalho
 
Rails: Porque programar deve ser divertido
Rails: Porque programar deve ser divertidoRails: Porque programar deve ser divertido
Rails: Porque programar deve ser divertido
Luiz 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
 
Droido
DroidoDroido

Mais 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

Caça-palavras ortografia M antes de P e B.
Caça-palavras    ortografia M antes de P e B.Caça-palavras    ortografia M antes de P e B.
Caça-palavras ortografia M antes de P e B.
Mary Alvarenga
 
Memorial do convento slides- português 2023
Memorial do convento slides- português 2023Memorial do convento slides- português 2023
Memorial do convento slides- português 2023
MatildeBrites
 
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdfProjeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
Bibliotecas Infante D. Henrique
 
Unificação da Itália e a formação da Alemanha
Unificação da Itália e a formação da AlemanhaUnificação da Itália e a formação da Alemanha
Unificação da Itália e a formação da Alemanha
Acrópole - História & Educação
 
Slides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptx
Slides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptxSlides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptx
Slides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptx
LuizHenriquedeAlmeid6
 
Caça-palavras - ortografia S, SS, X, C e Z
Caça-palavras - ortografia  S, SS, X, C e ZCaça-palavras - ortografia  S, SS, X, C e Z
Caça-palavras - ortografia S, SS, X, C e Z
Mary Alvarenga
 
DeClara n.º 76 MAIO 2024, o jornal digital do Agrupamento de Escolas Clara de...
DeClara n.º 76 MAIO 2024, o jornal digital do Agrupamento de Escolas Clara de...DeClara n.º 76 MAIO 2024, o jornal digital do Agrupamento de Escolas Clara de...
DeClara n.º 76 MAIO 2024, o jornal digital do Agrupamento de Escolas Clara de...
IsabelPereira2010
 
ptoposta curricular de geografia.da educação de jovens a e adultos
ptoposta curricular de geografia.da educação de jovens a e adultosptoposta curricular de geografia.da educação de jovens a e adultos
ptoposta curricular de geografia.da educação de jovens a e adultos
Escola Municipal Jesus Cristo
 
O autismo me ensinou - Letícia Butterfield.pdf
O autismo me ensinou - Letícia Butterfield.pdfO autismo me ensinou - Letícia Butterfield.pdf
O autismo me ensinou - Letícia Butterfield.pdf
Letícia Butterfield
 
Atividade - Letra da música "Tem Que Sorrir" - Jorge e Mateus
Atividade - Letra da música "Tem Que Sorrir"  - Jorge e MateusAtividade - Letra da música "Tem Que Sorrir"  - Jorge e Mateus
Atividade - Letra da música "Tem Que Sorrir" - Jorge e Mateus
Mary Alvarenga
 
Aula01 - ensino médio - (Filosofia).pptx
Aula01 - ensino médio - (Filosofia).pptxAula01 - ensino médio - (Filosofia).pptx
Aula01 - ensino médio - (Filosofia).pptx
kdn15710
 
O sentimento nacional brasiliero, segundo o historiador Jose Murlo de Carvalho
O sentimento nacional brasiliero, segundo o historiador Jose Murlo de CarvalhoO sentimento nacional brasiliero, segundo o historiador Jose Murlo de Carvalho
O sentimento nacional brasiliero, segundo o historiador Jose Murlo de Carvalho
analuisasesso
 
Slides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptx
Slides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptxSlides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptx
Slides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptx
LuizHenriquedeAlmeid6
 
PROVA FINAL Filosofia e Educação Cristã.ppt
PROVA FINAL Filosofia e Educação Cristã.pptPROVA FINAL Filosofia e Educação Cristã.ppt
PROVA FINAL Filosofia e Educação Cristã.ppt
betokg
 
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
CrislaineSouzaSantos
 
Aula 2 - 6º HIS - Formas de registro da história e da produção do conheciment...
Aula 2 - 6º HIS - Formas de registro da história e da produção do conheciment...Aula 2 - 6º HIS - Formas de registro da história e da produção do conheciment...
Aula 2 - 6º HIS - Formas de registro da história e da produção do conheciment...
Luana Neres
 
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdfAPOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
RenanSilva991968
 
Manejo de feridas - Classificação e cuidados.
Manejo de feridas - Classificação e cuidados.Manejo de feridas - Classificação e cuidados.
Manejo de feridas - Classificação e cuidados.
RafaelNeves651350
 
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdfCaderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
enpfilosofiaufu
 
LIÇÃO 9 - ORDENANÇAS PARA UMA VIDA DE SANTIFICAÇÃO.pptx
LIÇÃO 9 - ORDENANÇAS PARA UMA VIDA DE SANTIFICAÇÃO.pptxLIÇÃO 9 - ORDENANÇAS PARA UMA VIDA DE SANTIFICAÇÃO.pptx
LIÇÃO 9 - ORDENANÇAS PARA UMA VIDA DE SANTIFICAÇÃO.pptx
WelidaFreitas1
 

Último (20)

Caça-palavras ortografia M antes de P e B.
Caça-palavras    ortografia M antes de P e B.Caça-palavras    ortografia M antes de P e B.
Caça-palavras ortografia M antes de P e B.
 
Memorial do convento slides- português 2023
Memorial do convento slides- português 2023Memorial do convento slides- português 2023
Memorial do convento slides- português 2023
 
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdfProjeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
 
Unificação da Itália e a formação da Alemanha
Unificação da Itália e a formação da AlemanhaUnificação da Itália e a formação da Alemanha
Unificação da Itália e a formação da Alemanha
 
Slides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptx
Slides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptxSlides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptx
Slides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptx
 
Caça-palavras - ortografia S, SS, X, C e Z
Caça-palavras - ortografia  S, SS, X, C e ZCaça-palavras - ortografia  S, SS, X, C e Z
Caça-palavras - ortografia S, SS, X, C e Z
 
DeClara n.º 76 MAIO 2024, o jornal digital do Agrupamento de Escolas Clara de...
DeClara n.º 76 MAIO 2024, o jornal digital do Agrupamento de Escolas Clara de...DeClara n.º 76 MAIO 2024, o jornal digital do Agrupamento de Escolas Clara de...
DeClara n.º 76 MAIO 2024, o jornal digital do Agrupamento de Escolas Clara de...
 
ptoposta curricular de geografia.da educação de jovens a e adultos
ptoposta curricular de geografia.da educação de jovens a e adultosptoposta curricular de geografia.da educação de jovens a e adultos
ptoposta curricular de geografia.da educação de jovens a e adultos
 
O autismo me ensinou - Letícia Butterfield.pdf
O autismo me ensinou - Letícia Butterfield.pdfO autismo me ensinou - Letícia Butterfield.pdf
O autismo me ensinou - Letícia Butterfield.pdf
 
Atividade - Letra da música "Tem Que Sorrir" - Jorge e Mateus
Atividade - Letra da música "Tem Que Sorrir"  - Jorge e MateusAtividade - Letra da música "Tem Que Sorrir"  - Jorge e Mateus
Atividade - Letra da música "Tem Que Sorrir" - Jorge e Mateus
 
Aula01 - ensino médio - (Filosofia).pptx
Aula01 - ensino médio - (Filosofia).pptxAula01 - ensino médio - (Filosofia).pptx
Aula01 - ensino médio - (Filosofia).pptx
 
O sentimento nacional brasiliero, segundo o historiador Jose Murlo de Carvalho
O sentimento nacional brasiliero, segundo o historiador Jose Murlo de CarvalhoO sentimento nacional brasiliero, segundo o historiador Jose Murlo de Carvalho
O sentimento nacional brasiliero, segundo o historiador Jose Murlo de Carvalho
 
Slides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptx
Slides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptxSlides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptx
Slides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptx
 
PROVA FINAL Filosofia e Educação Cristã.ppt
PROVA FINAL Filosofia e Educação Cristã.pptPROVA FINAL Filosofia e Educação Cristã.ppt
PROVA FINAL Filosofia e Educação Cristã.ppt
 
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
 
Aula 2 - 6º HIS - Formas de registro da história e da produção do conheciment...
Aula 2 - 6º HIS - Formas de registro da história e da produção do conheciment...Aula 2 - 6º HIS - Formas de registro da história e da produção do conheciment...
Aula 2 - 6º HIS - Formas de registro da história e da produção do conheciment...
 
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdfAPOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
 
Manejo de feridas - Classificação e cuidados.
Manejo de feridas - Classificação e cuidados.Manejo de feridas - Classificação e cuidados.
Manejo de feridas - Classificação e cuidados.
 
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdfCaderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
 
LIÇÃO 9 - ORDENANÇAS PARA UMA VIDA DE SANTIFICAÇÃO.pptx
LIÇÃO 9 - ORDENANÇAS PARA UMA VIDA DE SANTIFICAÇÃO.pptxLIÇÃO 9 - ORDENANÇAS PARA UMA VIDA DE SANTIFICAÇÃO.pptx
LIÇÃO 9 - ORDENANÇAS PARA UMA VIDA DE SANTIFICAÇÃO.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