Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Desenvolvimento Minimalista com Sinatra

Sérgio Vilar
September 20, 2015

Desenvolvimento Minimalista com Sinatra

Conjunto de boas práticas e dicas de como ter um setup mais minimaista

Sérgio Vilar

September 20, 2015
Tweet

More Decks by Sérgio Vilar

Other Decks in Programming

Transcript

  1. DESENVOLVIMENTO
    MINIMALISTA
    Com Sinatra

    View full-size slide

  2. DESENVOLVIMENTO
    MINIMALISTA
    Com Sinatra

    View full-size slide

  3. SÉRGIO VILAR
    Software Engineer @ HackHands

    View full-size slide

  4. O QUE É
    MINIMALISMO?

    View full-size slide

  5. –Wellington Carrion
    “O minimalismo não se refere diretamente ao
    conceito de "pouco", e sim de ampliar a essência
    do que realmente é importante.”

    View full-size slide

  6. AMBIENTE

    MINIMALISTA
    !

    View full-size slide

  7. COMO FOCAR
    NO QUE IMPORTA?
    • Setup mínimo
    • Ambiente de desenvolvimento portátil

    View full-size slide

  8. .DOTFILES
    • Faça Backup, restaure e sincronize suas 

    preferências e apps.
    • Não perca tempo configurando um computador.
    • Compartilhe com os amiguinhos.

    View full-size slide

  9. dotfiles.github.io
    COMEÇANDO HOJE

    View full-size slide

  10. AMBIENTE

    PORTÁTIL
    • Virtualização com Vagrant
    • Containers com Docker
    • Ambientes prontos como Cloud9 ou semelhante

    View full-size slide

  11. AMBIENTE

    PORTÁTIL
    • Virtualização com Vagrant
    • Containers com Docker
    • Ambientes prontos como Cloud9 ou semelhante

    View full-size slide

  12. DOCKER
    • Baseado em Containers
    • Fornece comunicação simples entre Containers
    • Aplicação pode ser levantada/provisionada com
    apenas um comando
    • Imagens já prontas em hub.docker.com
    • Instala apenas o necessário do SO

    View full-size slide

  13. docker-compose.yml
    1 sinatra:
    2 image: erikap/ruby-sinatra
    3 ports:
    4 - 80:80
    5 volumes:
    6 - .:/usr/src/app
    7 environment:
    8 - MAIN_APP_FILE=app.rb

    View full-size slide

  14. $ docker-compose up

    View full-size slide

  15. COMEÇANDO HOJE
    http://docker.io
    http://vagrantup.com
    http://c9.io

    View full-size slide

  16. COMO ESCREVER UMA
    APLICAÇÃO MINIMALISTA?

    View full-size slide

  17. Você não precisa de um
    caminhão pra carregar uma
    formiga
    "

    View full-size slide

  18. MICROFRAMEWORKS 

    SÃO ÓTIMOS PARA:
    • Sites
    • APIs
    • Aplicações web

    View full-size slide

  19. PORQUE
    MICROFRAMEWORKS?
    • Abordagem minimalista
    • Fornecem apenas o necessário para tratar requisições
    HTTP e entregar respostas (renderizar templates).
    • Não te força a desenvolver dentro de uma forma
    específica = liberdade!
    • Te permite usar qualquer biblioteca

    View full-size slide

  20. Mas também não
    escreva tudo nas rotas…
    ಠ_ಠ

    View full-size slide

  21. Crie classes para regra
    de negócio
    #

    View full-size slide

  22. SRP: Princípio da
    Responsabilidade Única
    $

    View full-size slide

  23. COMEÇANDO COM
    SINATRA EM 3 PASSOS

    View full-size slide

  24. $ gem install sinatra

    View full-size slide

  25. hi.rb

    1 require 'sinatra'
    2
    3 get '/hi' do
    4 "Hello World!"
    5 end

    View full-size slide

  26. $ ruby hi.rb

    View full-size slide

  27. Lidando com requisições HTTP
    1 require 'sinatra'
    2
    3 get '/hi' do
    4 "Hello World!"
    5 end
    6
    7 post '/world' do
    8 "Hello World!"
    9 end
    10
    11 put '/hello' do
    12 "Hello World!"
    13 end
    14
    15 # ...

    View full-size slide

  28. Lidando com parâmetros
    1 require 'sinatra'
    2
    3 get '/hello/:name' do
    4 "Hello #{params['name']}!"
    5 end

    View full-size slide

  29. Renderizando Views
    1 require 'sinatra'
    2
    3 get '/hello/:name' do
    4 @name = params['name']
    5 erb :hello # Renderiza views/hello.erb
    6 end

    View full-size slide

  30. Redirecionamentos
    1 require 'sinatra'
    2
    3 get '/hello/:name' do
    4 redirect "/hi/#{params['name']}"
    5 end
    6
    7 get '/hi/:name' do
    8 @name = params['name']
    9 erb :hello # Renderiza views/hello.erb
    10 end

    View full-size slide

  31. SINATRA COM
    ACTIVERECORD
    https://github.com/janko-m/sinatra-activerecord

    View full-size slide

  32. Gemfile
    1 source "https://rubygems.org"
    2
    3 gem "sinatra"
    4 gem "activerecord"
    5 gem "sinatra-activerecord"
    6 gem "rake"

    View full-size slide

  33. models/user.rb
    1 class User < ActiveRecord::Base
    2 validates_presence_of :name
    3 end

    View full-size slide

  34. REST COM SINATRA

    View full-size slide

  35. $ gem install sinatra-rest

    View full-size slide

  36. hi.rb
    1 require 'sinatra'
    2 require 'sinatra/activerecord'
    3 require_relative './models/user'
    4
    5 rest User, :renderer => :erb

    View full-size slide

  37. Equivalente:
    1 require 'sinatra'
    2 require 'sinatra/activerecord'
    3 require_relative './models/user'
    4
    5 get '/user' do
    6 @people = User.all
    7 erb :"user/index", options
    8 end
    9
    10 put '/user/:id' do
    11 @person = User.find_by_id(params[:id])
    12 redirect url_for_user_show(@person), 'user updated'
    13 end
    14
    15 # Demais rotas do REST

    View full-size slide

  38. spec/spec_helper.rb
    1 ENV['RACK_ENV'] = 'test'
    2
    3 require 'rspec'
    4 require 'rack/test'
    5
    6 require_relative '../app'
    7
    8 RSpec.configure do |conf|
    9 conf.include Rack::Test::Methods
    10 end

    View full-size slide

  39. spec/user_spec.rb
    1 require 'spec_helper'
    2
    3 describe User do
    4
    5 def app
    6 Sinatra::Application
    7 end
    8
    9 it "Cadastra um usuário" do
    10 post '/user', :name => 'Sergio'
    11 expect(last_response.redirect?).to be_truthy
    12 user = User.last
    13 expect(user.name).to eq('Sergio')
    14 end
    15
    16 end

    View full-size slide

  40. $ bundle exec rspec spec

    View full-size slide

  41. VALEU!
    vilar.cc
    twitter.com/feelsen
    github.com/sergiovilar

    View full-size slide