Setup do Sunspot-rails no Rspec

{ June 23rd, 2010 }


cmilfont

Autor: cmilfont

Tínhamos um problema nos testes unitários por débito técnico [na verdade desleixo mesmo] com o setup do Rspec e Sunspot-rails em determinado projeto. O problema era que mesmo para executar um simples teste unitário, levantávamos o Sunspot no spec_helper.rb.

Resolvi refatorar isso, acabei descobrindo no before/after do Spec::Runner.configure algo que eu não usava e que já existia desde o rspec “1.1.12 / 2009-01-11″, pelo que percebi no changelog.

O que fiz e parece bobo é separar pelo tipo (type) integration a subida de uma instancia real do Sunspot e agora dá para usar a estrutura de Rspec que o Sunspot disponibiliza para meus testes unitários.

#arquivo spec_helper.rb

ENV["RAILS_ENV"] ||= 'test'

require File.expand_path(File.join(File.dirname(__FILE__),'..','config','environment'))

require 'spec/autorun'
require 'spec/rails'
require 'rake'
require 'ruby-debug' unless RUBY_VERSION > '1.9'
require 'sunspot/rails/tasks'
require 'authlogic/test_case'
require 'sunspot/rails/spec_helper'

require 'database_cleaner'

#observe aqui que eu criei uma pasta support porque guardo algumas confs em arquivos contidos nela
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}

Spec::Runner.configure do |config|
  config.use_transactional_fixtures = true
  config.use_instantiated_fixtures = false
  config.fixture_path = RAILS_ROOT + '/spec/fixtures/'

  config.before(:suite) do
    DatabaseCleaner.strategy = :truncation
    DatabaseCleaner.clean_with(:truncation)
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end

  [:model, :helper, :controller].each {|type|
    config.before(:each, :type => type) do
      ::Sunspot.session = ::Sunspot::Rails::StubSessionProxy.new(::Sunspot.session)
    end
    config.after(:each, :type => type) do
      ::Sunspot.session = ::Sunspot.session.original_session
    end
  }

  config.before(:all, :type => :integration) do
    JojobaSunspot.new.start
  end
  config.after(:suite) do
    JojobaSunspot.new.stop
  end

end

Inspirado nesse post, eu adaptei para o código que uso ao subir o sunspot com linha de comando para os testes de integração. Observe no código anterior que importo configurações da pasta support, inclusive a classe JojobaSunspot, usada no after e before de integration.

require "net/http"

class JojobaSunspot

  def start
    @started = Time.now
    up_sunspot if starting
    up
  end

  def stop
    system("sunspot-solr stop --pid-dir=/tmp/pids") unless starting
  end

  private
  def port
    Sunspot::Rails::Server.new.port
  end

  def up_sunspot
    system("sunspot-solr start -p 8981 -d /tmp/solr_data_test --pid-dir=/tmp/pids --log-file=/tmp/solr_log_test.log --log-level=INFO")
  end

  def up
    while starting
      puts "Sunspot server is starting..."
    end
    puts "Sunspot server took #{'%.2f' % (Time.now - @started)} sec. to get up and running. Let's Jojoba!"
  end

  def starting
    begin
      sleep(1)
      request = Net::HTTP.get_response(URI.parse("http://localhost:#{port}/solr/"))
      false
    rescue Errno::ECONNREFUSED
      true
    end
  end

end

Desde que colocamos testes de integração o tempo de execução da bateria subiu muito, provocamos um setup ineficiente e desnecessário para os testes unitários. Fica a dica para quem passar pelo mesmo problema.

Posted in Rails, Rspec, Ruby, Sunspot ~ 1 Comment

Um amigo fez a seguinte pergunta que é muito comum hoje em dia com adoção crescente sobre linguagens dinâmicas, principalmente Ruby:

(…)”A dúvida era essa: Linguagens dinâmicas dão maiores possibilidades de inclusão de erro no código com isso aumentando de forma significativa a refatoração.”(…)

Em conversa com um excelente desenvolvedor aqui no Ceará, Delberto Muniz, ele escreveu a seguinte resposta:

Estava relendo um livro sobre os primórdios da programação e houve um debate semelhante: Os programadores Assembly achavam que programar em Fortan dava maiores possibilidades de erros porquê o programador não tinha total controle sobre o código gerado.

Dez anos depois o pessoal do Fortran falou mal do Algol porquê Algol abstraía demais e o programador não tinha total controle sobre a linguagem.

Aí veio o pessoal do C/C++ dizendo que Java abstraía demais, deixando margens a bugs serem introduzidos nos programas pelo compilador e/ou pela vm ou porquê simplesmente ele não estava alocando/desalocando memória manualmente.

Só mudaram as linguagens – o debate é sempre o mesmo: Se eu aumentar a abstração, meus programadores vão fazer besteira?

Se você está com essa dúvida, sinto muito: Você está nivelando por baixo e/ou não conhece seus desenvolvedores.

Posted in Engenharia de Software, Linguagens, Rails, Ruby, mercado ~ 9 Comments

Retrospectiva 2009

{ December 28th, 2009 }


cmilfont

Autor: cmilfont

Jornal OPOVO  (Foto: IGOR DE MELO)
Fonte: Jornal OPOVO

Esse foi um bom ano, iniciei 2009 abrindo outra empresa e saindo da Triadworks que continua Triad (com o Carlos Átila, além do Handerson Frota e o Rafael Ponte) e agora parceira e amiga.

Minha empresa, a Milfont Consulting foi o profissionalismo de algo que eu já vinha fazendo há algum tempo: Mentoring, treinamento e coaching em desenvolvimento de software, só que agora focado em XP e um nicho específico de linguagem, Ruby. Sobre Rails eu vou fazer um post a parte, sobre o mercado local e meus projetos.

Dois clientes em especial marcaram o ano da Milfont Consulting, o Grupo Tubform que vem montando um dos maiores projetos em Rails no Brasil que tenho notícia e o Grupo Fortes que lançou recentemente o F2RH, um portal gratuito para empresas e profissionais que desejam contratar e serem contratados respectivamente. Claro que meus antigos clientes continuam com atenção especial, mas já estão bem maduros em seus sistemas e processos o que me alegra enormemente e me dão aquela satisfação profissional que é motivo para continuar o trabalho que estamos fazendo.

Em relação à comunidade de desenvolvimento de software começamos (eu e Igo Coelho) o ano criando um grupo de discussões sobre XP exclusivamente do Ceará, o XPCE, do qual explico os motivos nesse post. Depois convidamos o Henrique Landim e por último o Francisco Barroso para se tornarem coordenadores.

Curso Caelum em Fortaleza - agosto 2009 on Twitpic

Em agosto realizamos o Maré de Agilidade Fortaleza, que nos deu uma boa perspectiva de como fazer um evento, aprendemos muito com os erros cometidos e vamos para 2010 agora com profissionalismo. Nesse mesmo evento nós formamos a primeiro turma da Caelum em Fortaleza, aos trancos e barrancos conseguimos trazer o Fábio Kung para nos ensinar um Rails de qualidade. Agradeço a Caelum e principalmente ao Paulo Silveira por nos ter presenteado com a vinda do Fábio Kung, que é um dos melhores profissionais do mundo e conseguiu impressionar profissionais com anos de mercado e alguns com mais de um ano em Rails mesmo sendo um curso básico. Em 2010 vamos tentar trazer a Caelum mais vezes.

Não daria para citar todos os amigos e profissionais envolvidos nesses eventos da XPCE, mas agradeço o desprendimento de todos vocês, quem nos acompanha sabe o esforço e dedicação que todos fizeram.

Share photos on twitter with Twitpic

Esse ano li cerca de 20 livros para um projeto de pesquisa que estou escrevendo, além de alguns livros técnicos. Fui muito ao cinema para assistir desenhos e filmes de ação com meu filho mas tive pouco tempo para escrever como eu gostaria. Ouvi pouco rock esse ano, já que passo o tempo quase todo em clientes e não dá para voce botar fones de ouvidos quando trabalhamos com consultoria.

Tempo de correr

Em Setembro eu comecei um desafio do jornal OPOVO a convite do jornalista Hamilton Nogueira para sair do sedentarismo e fazer uma corrida de 5 km. Como não nego uma boa briga, além de topar eu aumentei para 10 km, se vamos morrer pelo menos vamos com classe. O resultado foi que fiz a prova da Unifor, 10 km, em 1:16 aproximadamente.

Campeão on Twitpic

Essa saída do sedentarismo foi graças ao acompanhamento do preparador físico Pedro Sena (Quality Assessoria) que teve muita paciência e profissionalismo para suportar minha agenda um pouco fora do convencional. Essa saga vou publicar com mais calma em outro post.

treino de Jiujitsu na Gautama um tempo atrás on Twitpic

Com um bom preparo físico o rendimento é outro, você consegue trabalhar e se divertir melhor. Até dores nas costas devido à obesidade eu já tinha, cheguei a pesar 110 kg.

Meus objetivos para o próximo ano com essa reviravolta  como atleta é correr uma meia maratona (que pretendo ser a do RJ no meio do ano) e voltar ao Jiujitsu que é meu esporte favorito. Até dei um treino em uma academia lá em Iguatu onde meu irmão treina. Em termos de esporte esse ano marcou meu renascimento.

Em termos familiar nunca estivemos tão bem, esposa amada (Renata Milfont) e filho saudável que #asgatapira. Feliz ano-novo para todos vocês e que 2010 seja melhor do que foi esse ano.

Família on Twitpic

Posted in Maré de Agilidade, Rails, Ruby, offtopic, palestras, xpce ~ 5 Comments