Desenvolvimento Minimalista com Sinatra

Fc9eb764fbfae2be2e66da4f3ce62008?s=47 Sérgio Vilar
September 20, 2015

Desenvolvimento Minimalista com Sinatra

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

Fc9eb764fbfae2be2e66da4f3ce62008?s=128

Sérgio Vilar

September 20, 2015
Tweet

Transcript

  1. 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.”
  2. 8.

    .DOTFILES • Faça Backup, restaure e sincronize suas 
 preferências

    e apps. • Não perca tempo configurando um computador. • Compartilhe com os amiguinhos.
  3. 10.
  4. 11.
  5. 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
  6. 13.
  7. 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
  8. 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
  9. 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 # ...
  10. 29.
  11. 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
  12. 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
  13. 33.

    Gemfile 1 source "https://rubygems.org" 2 3 gem "sinatra" 4 gem

    "activerecord" 5 gem "sinatra-activerecord" 6 gem "rake"
  14. 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
  15. 39.
  16. 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
  17. 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