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 Slide

  2. DESENVOLVIMENTO
    MINIMALISTA
    Com Sinatra

    View Slide

  3. SÉRGIO VILAR
    Software Engineer @ HackHands

    View Slide

  4. O QUE É
    MINIMALISMO?

    View 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 Slide

  6. AMBIENTE

    MINIMALISTA
    !

    View Slide

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

    View 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 Slide

  9. dotfiles.github.io
    COMEÇANDO HOJE

    View Slide

  10. AMBIENTE

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

    View Slide

  11. AMBIENTE

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

    View 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 Slide

  13. View Slide

  14. 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 Slide

  15. $ docker-compose up

    View Slide

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

    View Slide

  17. COMO ESCREVER UMA
    APLICAÇÃO MINIMALISTA?

    View Slide

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

    View Slide

  19. MICROFRAMEWORKS 

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

    View Slide

  20. 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 Slide

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

    View Slide

  22. Crie classes para regra
    de negócio
    #

    View Slide

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

    View Slide

  24. COMEÇANDO COM
    SINATRA EM 3 PASSOS

    View Slide

  25. $ gem install sinatra

    View Slide

  26. hi.rb

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

    View Slide

  27. $ ruby hi.rb

    View Slide

  28. 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 Slide

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

    View Slide

  30. 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 Slide

  31. 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

  35. REST COM SINATRA

    View Slide

  36. $ gem install sinatra-rest

    View Slide

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

    View Slide

  38. 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 Slide

  39. TESTANDO

    View Slide

  40. 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 Slide

  41. 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 Slide

  42. $ bundle exec rspec spec

    View Slide

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

    View Slide