Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails

Preview:

Citation preview

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