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. –Wellington Carrion “O minimalismo não se refere diretamente ao conceito

    de "pouco", e sim de ampliar a essência do que realmente é importante.”
  2. .DOTFILES • Faça Backup, restaure e sincronize suas 
 preferências

    e apps. • Não perca tempo configurando um computador. • Compartilhe com os amiguinhos.
  3. 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
  4. 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
  5. 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
  6. 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 # ...
  7. Renderizando Views 1 require 'sinatra' 2 3 get '/hello/:name' do

    4 @name = params['name'] 5 erb :hello # Renderiza views/hello.erb 6 end
  8. 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
  9. Gemfile 1 source "https://rubygems.org" 2 3 gem "sinatra" 4 gem

    "activerecord" 5 gem "sinatra-activerecord" 6 gem "rake"
  10. 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
  11. 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
  12. 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