summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Maunz <andreas@maunz.de>2012-03-29 10:43:26 +0200
committerAndreas Maunz <andreas@maunz.de>2012-03-29 10:43:26 +0200
commita0d99ccf4d2120dff26b2625a4bc1f5eca350f2b (patch)
tree1739cc22344450bcd9bafc298b709cf538f6c047
first commit
-rw-r--r--README.md14
-rw-r--r--Rakefile8
-rw-r--r--ext/openbabel/Makefile8
-rw-r--r--ext/openbabel/extconf.rb27
-rw-r--r--lib/openbabel.rb1
-rw-r--r--openbabel-0.0.1.gembin0 -> 3584 bytes
-rw-r--r--openbabel-2.3.1.gembin0 -> 4096 bytes
-rw-r--r--openbabel.gemspec17
-rw-r--r--test/test_openbabel.rb21
9 files changed, 96 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..a86dbc3
--- /dev/null
+++ b/README.md
@@ -0,0 +1,14 @@
+# openbabel gem
+
+GEM for [OpenBabel](http://openbabel.sf.net), a chemical library by Noel O'Boyle and others.
+
+openbabel gem has been tested with ruby 1.9. It only compiles on POSIX systems and requires:
+
+ * cmake
+ * curl
+ * tar, sed, make (those should be present anyway)
+
+## Install
+gem install openbabel
+
+It downloads the sources, compiles the ruby bindings and installs them. Check out [http://cs.maunz.de](http://cs.maunz.de) for more information.
diff --git a/Rakefile b/Rakefile
new file mode 100644
index 0000000..debc11c
--- /dev/null
+++ b/Rakefile
@@ -0,0 +1,8 @@
+require 'rake/testtask'
+
+Rake::TestTask.new do |t|
+ t.libs << 'test'
+end
+
+desc "Run tests"
+task :default => :test
diff --git a/ext/openbabel/Makefile b/ext/openbabel/Makefile
new file mode 100644
index 0000000..581ad59
--- /dev/null
+++ b/ext/openbabel/Makefile
@@ -0,0 +1,8 @@
+.PHONY: openbabel.so
+openbabel.so:
+ chmod 755 openbabel.so
+
+.PHONY: install
+install:
+ mkdir -p ../../lib/openbabel
+ mv openbabel.so ../../lib/openbabel
diff --git a/ext/openbabel/extconf.rb b/ext/openbabel/extconf.rb
new file mode 100644
index 0000000..4b6189c
--- /dev/null
+++ b/ext/openbabel/extconf.rb
@@ -0,0 +1,27 @@
+require 'fileutils'
+require 'tmpdir'
+
+ob_num_ver="2.3.1"
+ob_ver="openbabel-"+ob_num_ver
+
+main_dir = Dir.mktmpdir
+ob_main_dir=main_dir+"/"+ob_ver
+ob_bindings_dir=ob_main_dir+"/scripts/ruby"
+
+begin
+ Dir.chdir main_dir do
+ FileUtils.rm_rf ob_main_dir
+ `curl -L -d use_mirror=netcologne "http://downloads.sourceforge.net/project/openbabel/openbabel/#{ob_num_ver}/openbabel-#{ob_num_ver}.tar.gz" | tar xz`
+ end
+ Dir.chdir ob_main_dir do
+ `cmake #{ob_main_dir}`
+ end
+ Dir.chdir ob_bindings_dir do
+ `sed -i 's/Init_OpenBabel/Init_openbabel/g' *cpp`
+ require './extconf.rb'
+ `make`
+ end
+ FileUtils.cp(ob_bindings_dir+"/openbabel.so", "./")
+ensure
+ FileUtils.remove_entry_secure main_dir
+end
diff --git a/lib/openbabel.rb b/lib/openbabel.rb
new file mode 100644
index 0000000..1d53401
--- /dev/null
+++ b/lib/openbabel.rb
@@ -0,0 +1 @@
+require 'openbabel/openbabel'
diff --git a/openbabel-0.0.1.gem b/openbabel-0.0.1.gem
new file mode 100644
index 0000000..a9098c9
--- /dev/null
+++ b/openbabel-0.0.1.gem
Binary files differ
diff --git a/openbabel-2.3.1.gem b/openbabel-2.3.1.gem
new file mode 100644
index 0000000..706f164
--- /dev/null
+++ b/openbabel-2.3.1.gem
Binary files differ
diff --git a/openbabel.gemspec b/openbabel.gemspec
new file mode 100644
index 0000000..9409965
--- /dev/null
+++ b/openbabel.gemspec
@@ -0,0 +1,17 @@
+Gem::Specification.new do |s|
+ s.name = "openbabel"
+ s.version = "2.3.1"
+
+ s.authors = ["Andreas Maunz"]
+ s.date = %q{2012-04-03}
+ s.description = %q{OpenBabel as a GEM}
+ s.email = %q{andreas@maunz.de}
+ s.homepage = %q{http://cs.maunz.de}
+ s.require_paths = ["lib"]
+ s.rubygems_version = %q{1.6.2}
+ s.summary = %q{OpenBabel!}
+ s.test_files = ["test/test_openbabel.rb"]
+
+ s.files = ["Rakefile", "lib/openbabel.rb", "ext/openbabel/Makefile"]
+ s.extensions = ['ext/openbabel/extconf.rb']
+end
diff --git a/test/test_openbabel.rb b/test/test_openbabel.rb
new file mode 100644
index 0000000..40f0cf9
--- /dev/null
+++ b/test/test_openbabel.rb
@@ -0,0 +1,21 @@
+require 'test/unit'
+require 'openbabel'
+include OpenBabel
+
+class OBTest < Test::Unit::TestCase
+ def test_obmol
+ # Code from http://goo.gl/9H1LZ
+
+ smi2mol = OBConversion.new
+ smi2mol.set_in_format("smi")
+
+ mol = OBMol.new
+ smi2mol.read_string(mol, 'CC(C)CCCC(C)C1CCC2C1(CCC3C2CC=C4C3(CCC(C4)O)C)C') # cholesterol, no chirality
+ mol.add_hydrogens
+
+ assert_equal(mol.num_atoms, 74)
+ assert_in_delta(mol.get_mol_wt, 386.65, 0.1)
+ assert_equal(mol.get_formula, "C27H46O")
+
+ end
+end