$ sudo gem install ZenTest hoe rake-compiler
$ sow stree
require "test/unit"
require "stree"
class TestStree < Test::Unit::TestCase
def test_hello_world
assert_equal 'hello world', Stree.hello_world
end
end
$ tree
.
|-- CHANGELOG.rdoc
|-- Manifest.txt
|-- README.rdoc
|-- Rakefile
|-- ext
| `-- stree
|-- lib
| `-- stree.rb
`-- test
`-- test_stree.rb
require 'rubygems'
require 'hoe'
Hoe.spec 'stree' do
developer('Aaron Patterson', 'aaron@tenderlovemaking.com')
self.readme_file = 'README.rdoc'
self.history_file = 'CHANGELOG.rdoc'
self.extra_rdoc_files = FileList['*.rdoc']
self.extra_dev_deps << ['rake-compiler', '>= 0']
self.spec_extras = { :extensions => ["ext/stree/extconf.rb"] }
Rake::ExtensionTask.new('stree', spec) do |ext|
ext.lib_dir = File.join('lib', 'stree')
end
end
Rake::Task[:test].prerequisites << :compile
require 'autotest/restart'
Autotest.add_hook :initialize do |at|
at.add_mapping(/.*\.c/) do |f, _|
at.files_matching(/test_.*rb$/)
end
end
Autotest.add_hook :run_command do |at|
system "rake clean compile"
end
rake aborted!
Don't know how to build task 'ext/stree/extconf.rb'
require 'mkmf'
create_makefile('stree/stree')
#include <ruby.h>
void Init_stree()
{
VALUE mStree = rb_define_module("Stree");
rb_define_singleton_method(mStree, "hello_world", hello_world, 0);
}
static VALUE hello_world(VALUE mod)
{
return rb_str_new2("hello world");
}
#include <ruby.h>
static VALUE hello_world(VALUE klass)
{
return rb_str_new2("hello world");
}
void Init_stree()
{
VALUE mStree = rb_define_module("Stree");
rb_define_singleton_method(mStree, "hello_world", hello_world, 0);
}
require 'stree/stree'
module Stree
VERSION = '1.0.0'
end
$ tree -I tmp
.
|-- CHANGELOG.rdoc
|-- Manifest.txt
|-- README.rdoc
|-- Rakefile
|-- ext
| `-- stree
| |-- extconf.rb
| `-- stree.c
|-- lib
| |-- stree
| | `-- stree.bundle
| `-- stree.rb
`-- test
`-- test_stree.rb