2012-03-30 12 views
5

C uzantısı içeren bir mücevher yazıyorum. Genellikle bir mücevher yazdığım zaman, TDD'nin bir sürecini takip ediyorum, nerede başarısız bir spec yazacağım ve kodlar geçene kadar kod üzerinde çalışacağım vs ...C uzantıları ile bir rubygem geliştirirken, Rspec ile yerel olarak nasıl test edersiniz?

"ext/mygem" deki C uzantımla /mygem.c "ve gemspec'in" uzantıları "nda yapılandırılmış geçerli bir extconf.rb, özellikleri nasıl çalıştırabilirim ve hala C uzantım yüklü mü? C kodunda değişiklik yaptığımda, kodu yeniden derlemek için hangi adımları atmam gerekiyor?

Bu muhtemelen aptalca bir sorudur, ancak gemimin geliştirme kaynak ağacının içinden 'bundle install' yazarak herhangi bir yerel uzantı oluşturmaz. ruby ext/mygem/extconf.rb'u manuel olarak çalıştırdığımda bir Makefile (tüm projenin kökünde) alıyorum ve daha sonra make çalıştırdığımda, paylaşılan bir nesne (yine, tüm projenin kökünde) alıyorum. Yanlış iş akışını takip etmeliyim, çünkü .so'nun lib/altına yerleştirilmesi gerektiğini anlıyorum. Geliştirme sırasında bunu elle yapmam gerekmiyor mu?

Ve sonra var benim Spec yardımcı için

$: << File.dirname(__FILE__) + '/../ext' 

ekle

cevap

4

Sonunda gitti çözüm üzerinde github, tırmık-derleyici kullanmaktı:

https://github.com/luislavena/rake-compiler

Sadece derleme (README belgelenmiştir) yapmak için bir tırmık görev eklemek, daha sonra yapmak 'spec' görevi (ler) bu inşa aşamasına bağlıdır.

4

o 'doğru' yolu olup olmadığını bilmiyorum ama geçmişte yaptık yolu

olduğunu Yani

require 'rspec/core/rake_task' 

RSpec::Core::RakeTask.new('spec') 
task :build do 
    Dir.chdir('ext') do 
    output = `ruby extconf.rb` 
    raise output unless $? == 0 
    output = `make` 
    raise output unless $? == 0 
    end 
end 

task :spec => :build 

rake spec gibi görünen bir rakefile benim her biri için c kodunu oluşturan zaman, dahili kütüphane ile mevcut /. Yükleme yolundaki değişiklik, bu kopyanın yüklenmesini sağlar. Bu github repo, bunu göstermektedir.

+1

Teşekkürler :) Github'da "rake-compile" bulduğumu yayınlamak için buraya geliyordum. Temel olarak onu bir geliştirme bağımlılığı olarak eklersiniz, sonra Rakefile'inizde hangi uzantıların oluşturulacağını anlatabilirsiniz. Extconf.rb dosyasını çalıştırır, daha sonra lib ve temizlemeyi kopyalar. https://github.com/luislavena/rake-compiler – d11wtq

+0

+1 hepsi aynı olsa;) – d11wtq

İlgili konular