Desenvolvimento na velocidade da luz com Ruby on Rails
19h às 22:40 do dia 22 de outubroMC10SI (LABIN I)
Quem sou eu?
Luiz Carvalho
7 anos de Ruby on Rails10 anos como desenvolvedor
Defensoria Pública do Estado do Tocantins@LuizCarvalhohttp://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 a7 => 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 # 12.2.0 :003 > minha_variavel.class # => Fixnum 2.2.0 :004 > minha_variavel = "uma string" # => "uma string" 2.2.0 :005 > minha_variavel.class # => String
Variáveis
■ Iniciar com letras minúsculas■ Tipagem dinâmica
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 é '+nomeMeu 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' endend
Operadores lógicos
x = true; y = false x and y # => falsex && y # => falsex or y # true x || y # true x and !y # true
unless(x and y) # ! (x and y) puts "yeah"end
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 -vgem -vbundle -vsqlite3 --version
Rails
Filosofia do Rails
Sub-Componentes do Rails
ActionMailerServiço de entrega e recebimento de e-mails
ActiveSupportColeção de classes utilitárias e extenções à standard library.
ActionViewFramework de localização e renderização de templates.
ActiveModelConjunto de interfaces para o Modelo
ActionPackResponsável por receber requisições web, rotas, controllers, action e renderização.
ActiveRecordConecta as classes às tabelas do banco de dados. A ORM do Rails.
PROJETO
30(clientes)x20(basic)x12(meses) = R$ 7200,00
PROJETO
rails new easy_menu
rails generate scaffold item name description value
rake db:createrake db:migrate
item .
- name- description- value
gem ‘pry’
Estrutura
Estrutura
Estrutura
Home
rails g controller home home
#routes.rbroot 'home#home'
Home
item = Item.newitem.name = "X-Tudo"item.description = "Pão, Queijo, Alface, Salsicha, Hamburger, tomate"item.value = "10,00"
Home
Item.allItem.firstItem.lastItem.findItem.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 :categoryCategory has_many :items
i = Item.firsti.category
c = Category.firstc.items
i.category = ci.save
Categorias
Categorias
f.collection_select :category_id, Category.all, :id, :name
Strong Params
def to_snameend
Obrigado