domingo, 3 de agosto de 2014

"Service oriented design with ruby and rails" fix para o capítulo 1

Postado por DoctorRu (Will)

Atualmente estou lendo o livro Service oriented design with ruby do Paul Dix, apesar de ainda estar no primeiro capítulo o livro parece ser ótimo porém por ser de 2010 está desatualizado em alguns aspectos principalmente no que tange ao RSpec.

Amazon

Ao realizar os testes ocorrem diversos erros e "warnings" dada a novas versões do Ruby e gems utilizadas, atualizei a sintaxe necessária e inclui um parâmetro de configuração do ActiveRecord que resolvem os problemas do primeiro capitulo.

A atualização mais importante é a inclusão desta linha no arquivo services.rb
ActiveRecord::Base.include_root_in_json = true
Com isto o nome do Hash gerado pelo JSON.parse é incluido na saída JSON, caso contrário ao tentar executar a seguinte linha:
attributes = JSON.parse(last_response.body)["user"]
Ocorrerá uma falha de teste pois o Hash retorna apenas os atributos:
{"id":1,"name":"paul","email":"paul@pauldix.net","bio":"rubyist"}
Quando o esperado é:
{"user":{"id":1,"name":"paul","email":"paul@pauldix.net","bio":"rubyist"}}
As outras alterações são referentes a sintaxe do RSpec, abaixo alguns exemplos na versão antiga e na versão atualizada do arquivo rspec/services_spec.rb
      # Old
      last_response.should be_ok
      attributes = JSON.parse(last_response.body)["user"]
      attributes["name"].should == "paul"

      # New
      expect(last_response).to be_ok
      attributes = JSON.parse(last_response.body)["user"]
      expect(attributes["name"]).to eq "paul"


      # Old
      last_response.should be_ok
      attributes = JSON.parse(last_response.body)["user"]
      attributes.should_not have_key("password")

      # New      
      expect(last_response).to be_ok
      attributes = JSON.parse(last_response.body)["user"]
      expect(attributes).not_to have_key("password")  

 
      # Old
      last_response.status.should == 404
  
      # New
      expect(last_response.status).to eq 404

Estou disponibilizado o código completo no meu GitHub 

0 comentários :

Postar um comentário