Ruby on Rails Fullstack

APRESENTAÇÕES

  • Eu
  • Ruby On Rails

A IDEIA

  • Compartilhar minha experiência
  • "Minicurso"
  • Montar um site com Rails
  • Aprender ensinando

O QUE ESPERAR

  • Livecodes
  • Slides
  • Exercícios
  • BUGS
  • BUGS
  • BUGS

O QUE NÃO ESPERAR

  • Uma aula convencional
  • Um professor pós-doc em RoR

EMENTA

  • Aula 1 - Apresentação + Ruby (básico) + tools
  • Aula 2 - Ruby (avançado)
  • Aulas 3 e 4 - POO + MVC
  • Aula 5 - BD em Ruby
  • Aula 6 - Front End (HTML / CSS)
  • Aula 7 - Front End (JavaScript)
  • Aula 8 - Rails (Parte 1)
  • Aulas 9 e 10 - Projetos

SETUP

  • Text Editor
  • Package manager
  • Terminal top
  • Git & GitHub
  • Ruby
  • Instruções aqui (choose your fighter)

Ruby

Sintaxe Básica

Variáveis


# Sem 'var', sem tipo (int, char, etc.), sem ';'

nome  = "Rafael"
idade = 21
money = 31.50
arr   = ['1', 2, 3.0]
bool  = false
rang  = (1..100)
nulo  = nil

# Para saber o tipo da variável... '.class'

nome.class   #=> String
idade.class  #=> Integer
money.class  #=> Float
arr.class    #=> Array
true.class   #=> TrueClass
bool.class   #=> FalseClass
nil.class    #=> NilClass
rang.class   #=> Range

"Tudo é um objeto"

Métodos


# def nome_do_metodo (parametros)
#    codigo
# end

def greet(name)
    return 'Hello, ' + name + '!'
end

puts greet('World')    #=> 'Hello, World!'

INPUTS & OUTPUTS


def greet(name)
    return 'Hello, ' + name + '!'
end


# Pega um input do usuário -> 'gets.chomp'

name = gets.chomp


# Imprime algo na tela -> 'puts'

puts greet(name)


# Imprime o exato 'objeto' -> p

p [9, 1, '2', nil, false]

IF / ELSIF / ELSE


# Jeito completo

if condition
    # code if condition is true
elsif other_condition
    # code if other_condition is true
else
    # code if condition and other_condition are false
end

# Ternário

condition ? code_if_true : code_if_false

# One line if

code_to_do if condition

# if not == unless

code_to_do unless condition

CASE / WHEN


# Múltiplos elsif's? Melhor usar case when

case variable
    when condition_1
        # code when variable == condition_1
    when condition_2, condition_3
        # code when variable == condition_2 || variable == condition_3
    when condition_4
        # code when variable == condition_4
    else
        # code when variable didn't match any condition
end  

LOOPS (WHILE / UNTIL)


# Repita o código até a condição se tornar falsa

while condition
    # code_to_repeat
end


# Repita o código até a condição se tornar verdadeira

until !condition
    # code_to_repeat
end

LOOPS (FOR)


# Repita o código 10 vezes

for var in 1..10    #=> (1..10) == 1,2,3,4,5,6,7,8,9,10 (Range from 1 to 10)
    # code_to_repeat
end


# Repita o código para cada uma das posições da array

metallica = ["James", "Lars", "Robert", "Kirk"]

for name in metallica
    puts "#{name} rocks!"
end

# Resultado do 2º for:
James rocks!
Lars rocks!
Robert rocks!
Kirk rocks!

RSpec

You can never write enough

RSpec

  • Ferramenta para escrever testes em Ruby
  • Iremos usar para fazer os exercícios
  • Test Driven Development (TDD) mindset

Ideia básica

  • Require 'arquivo'
  • Describe
  • Context
  • It
  • expect

Nosso primeiro teste

# spec/hello_world_spec.rb

# Podemos requerir o arquivo lib/hello_world.rb da seguinte forma
require 'hello_world'

# Por convenção (apenas), ao escrevermos testes sobre um método específico,
# encapsulamos tudo dentro de um "describe '#nome_do_metodo'", assim:
describe '#hello_world' do

    # "it" é a palavra-chave para descrever o que iremos testar e fazer o teste
    # em si
    it 'Should say "Hello, World!" if no arguments are passed' do
        # expect é o que o RSpec irá sinalizar (no terminal) se passou como esperado
        # ou não
        expect( hello_world ).to eq("Hello World!")
    end

    it 'Should say "Hello, #{name}!" if a name is passed' do
        expect( hello_world('Rafa').to eq("Hello Rafa!")
    end
end

Rubocop

Keep it nice, keep it clean

Melhores práticas de código com Rubocop

  • Linter (analisador sintático)
  • Código limpo e mais organizado
  • Simples de configurar
    • Em uma linha
    • Em um arquivo
    • Em um projeto
    • No terminal

Executando o Rubocop

$ rubocop

Rake

Does Ruby stuff for you

O Rakefile que vamos utilizar

# rubocop:disable all

require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(:spec)

desc 'Look for style guide offenses in your code'
task :rubocop do
  sh 'rubocop --format simple || true'
end

task default: [:rubocop, :spec]

Estrutura do nosso diretório

  • lib
    • foo.rb
    • bar.rb
  • spec
    • foo_spec.rb
    • bar_spec.rb
  • Rakefile
Made with Slides.com