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

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. DESENVOLVIMENTO MINIMALISTA Com Sinatra

  2. DESENVOLVIMENTO MINIMALISTA Com Sinatra

  3. SÉRGIO VILAR Software Engineer @ HackHands

  4. O QUE É MINIMALISMO?

  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.”
  6. AMBIENTE
 MINIMALISTA !

  7. COMO FOCAR NO QUE IMPORTA? • Setup mínimo • Ambiente

    de desenvolvimento portátil
  8. .DOTFILES • Faça Backup, restaure e sincronize suas 
 preferências

    e apps. • Não perca tempo configurando um computador. • Compartilhe com os amiguinhos.
  9. dotfiles.github.io COMEÇANDO HOJE

  10. AMBIENTE
 PORTÁTIL • Virtualização com Vagrant • Containers com Docker

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

    • Ambientes prontos como Cloud9 ou semelhante
  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
  13. None
  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
  15. $ docker-compose up

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

  17. COMO ESCREVER UMA APLICAÇÃO MINIMALISTA?

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

    "
  19. MICROFRAMEWORKS 
 SÃO ÓTIMOS PARA: • Sites • APIs •

    Aplicações web
  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
  21. Mas também não escreva tudo nas rotas… ಠ_ಠ

  22. Crie classes para regra de negócio #

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

  24. COMEÇANDO COM SINATRA EM 3 PASSOS

  25. $ gem install sinatra

  26. hi.rb 
 1 require 'sinatra' 2 3 get '/hi' do

    4 "Hello World!" 5 end
  27. $ ruby hi.rb

  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 # ...
  29. Lidando com parâmetros 1 require 'sinatra' 2 3 get '/hello/:name'

    do 4 "Hello #{params['name']}!" 5 end
  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
  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
  32. SINATRA COM ACTIVERECORD https://github.com/janko-m/sinatra-activerecord

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

    "activerecord" 5 gem "sinatra-activerecord" 6 gem "rake"
  34. models/user.rb 1 class User < ActiveRecord::Base 2 validates_presence_of :name 3

    end
  35. REST COM SINATRA

  36. $ gem install sinatra-rest

  37. hi.rb 1 require 'sinatra' 2 require 'sinatra/activerecord' 3 require_relative './models/user'

    4 5 rest User, :renderer => :erb
  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
  39. TESTANDO

  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
  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
  42. $ bundle exec rspec spec

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