teius 0.1.0 → 0.5

Sign up to get free protection for your applications and to get access to all the features.
data/ext/extconf.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require 'mkmf'
2
2
 
3
- dir_config('libxml', '/usr/include/libxml2', '/usr/lib');
3
+ dir_config('libxml', '/usr/include/libxml', '/usr/lib');
4
+ dir_config('libxslt', '/usr/include', '/usr/lib');
4
5
  have_library('xml2', 'xmlReadFile')
6
+ have_library('xslt', 'xsltParseStylesheetFile')
5
7
  create_makefile("teius")
data/ext/teius.c CHANGED
@@ -1,20 +1,31 @@
1
+ /* NOTES: possibly call xsltCleanupGlobals() and xmlCleanupParser() at some point */
2
+
1
3
  #include <stdio.h>
2
4
  #include "ruby.h"
3
5
  #include <libxml/parser.h>
4
6
  #include <libxml/tree.h>
5
7
  #include <libxml/xpath.h>
6
8
 
9
+ #include <libxslt/xslt.h>
10
+ #include <libxslt/xsltInternals.h>
11
+ #include <libxslt/transform.h>
12
+ #include <libxslt/xsltutils.h>
13
+
7
14
  static VALUE cParseError;
8
15
  static VALUE cXpathError;
9
16
  static VALUE cNodeNotFound;
10
17
  static VALUE cNodeNotUnique;
11
18
  static VALUE cNode;
12
19
  static VALUE cDocument;
20
+ static VALUE cStylesheet;
13
21
  static ID sRequired;
14
22
  static ID sFirst;
15
23
  static ID sAll;
16
24
  static ID sUnique;
17
25
 
26
+ /* Suppress error messages to stderr */
27
+ static void null_handler(void *ctx, const char *msg, ...) {}
28
+
18
29
  static void doc_free(void *p) {
19
30
  xmlFreeDoc(p);
20
31
  }
@@ -151,7 +162,31 @@ static VALUE node_pointer(VALUE self) {
151
162
  return INT2NUM((int)node);
152
163
  }
153
164
 
154
- static VALUE parse_file(VALUE self, VALUE rFilename) {
165
+ /* Returns the line number the node starts on */
166
+ static VALUE node_line(VALUE self) {
167
+ xmlNodePtr node = NULL;
168
+ Data_Get_Struct(self, xmlNode, node);
169
+ return INT2NUM(node->line);
170
+ }
171
+
172
+ /* Returns the recursive content of the node in string format */
173
+ static VALUE node_content(VALUE self) {
174
+ xmlNodePtr node = NULL;
175
+ const xmlChar *mem;
176
+ xmlBufferPtr buf;
177
+ int size;
178
+
179
+ Data_Get_Struct(self, xmlNode, node);
180
+ buf = xmlBufferCreate();
181
+ size = xmlNodeDump(buf, node->doc, node, 0, 1);
182
+ mem = xmlBufferContent(buf);
183
+ VALUE rStr = rb_str_new2(mem);
184
+ xmlBufferFree(buf);
185
+
186
+ return rStr;
187
+ }
188
+
189
+ static VALUE document_parse_file(VALUE self, VALUE rFilename) {
155
190
  xmlDocPtr doc = xmlReadFile(StringValuePtr(rFilename), NULL, 0);
156
191
  if (doc == NULL) {
157
192
  xmlErrorPtr err = xmlGetLastError();
@@ -165,7 +200,7 @@ static VALUE parse_file(VALUE self, VALUE rFilename) {
165
200
  return rDoc;
166
201
  }
167
202
 
168
- static VALUE parse_string(VALUE self, VALUE rDocString) {
203
+ static VALUE document_parse_string(VALUE self, VALUE rDocString) {
169
204
  xmlDocPtr doc = xmlReadDoc(StringValuePtr(rDocString), NULL, NULL, 0);
170
205
  if (doc == NULL) {
171
206
  xmlErrorPtr err = xmlGetLastError();
@@ -178,8 +213,8 @@ static VALUE parse_string(VALUE self, VALUE rDocString) {
178
213
  return rDoc;
179
214
  }
180
215
 
181
- static VALUE document_to_s(VALUE self, VALUE rDocString) {
182
- xmlDocPtr doc = NULL;
216
+ static VALUE document_to_s(VALUE self) {
217
+ xmlDocPtr doc = NULL;
183
218
  xmlChar *mem;
184
219
  int size;
185
220
 
@@ -191,9 +226,96 @@ static VALUE document_to_s(VALUE self, VALUE rDocString) {
191
226
  return rStr;
192
227
  }
193
228
 
229
+ static VALUE document_root(VALUE self) {
230
+ xmlDocPtr doc = NULL;
231
+ xmlNodePtr node = NULL;
232
+ VALUE rResult;
233
+
234
+ Data_Get_Struct(self, xmlDoc, doc);
235
+ node = xmlDocGetRootElement(doc);
236
+ rResult = Data_Wrap_Struct(cNode, 0, 0, node);
237
+
238
+ return rResult;
239
+ }
240
+
241
+ /* LibXslt Stuff */
242
+ static void stylesheet_free(void *p) {
243
+ xsltFreeStylesheet(p);
244
+ }
245
+
246
+ static VALUE stylesheet_parse_file(VALUE self, VALUE rFilename) {
247
+ xsltStylesheetPtr xsl = xsltParseStylesheetFile(StringValuePtr(rFilename));
248
+ if (xsl == NULL) {
249
+ xmlErrorPtr err = xmlGetLastError();
250
+ rb_raise(cParseError, "could not parse file %s: %s",
251
+ StringValuePtr(rFilename), err->message);
252
+ }
253
+
254
+ /* Load new document */
255
+ VALUE rStylesheet = Data_Wrap_Struct(cStylesheet, 0, stylesheet_free, xsl);
256
+
257
+ return rStylesheet;
258
+ }
259
+
260
+ static VALUE stylesheet_apply(VALUE self, VALUE rDocument) {
261
+ xsltStylesheetPtr stylesheet = NULL;
262
+ xmlDocPtr doc = NULL, res = NULL;
263
+
264
+ Data_Get_Struct(self, xsltStylesheet, stylesheet);
265
+ Data_Get_Struct(rDocument, xmlDoc, doc);
266
+ res = xsltApplyStylesheet(stylesheet, doc, NULL);
267
+
268
+ VALUE rDoc = Data_Wrap_Struct(cDocument, 0, doc_free, res);
269
+
270
+ return rDoc;
271
+ }
272
+
273
+ static VALUE stylesheet_save_to_file(VALUE self, VALUE rResult, VALUE rFilename) {
274
+ xsltStylesheetPtr stylesheet = NULL;
275
+ xmlDocPtr result = NULL;
276
+ int st;
277
+
278
+ Data_Get_Struct(self, xsltStylesheet, stylesheet);
279
+ Data_Get_Struct(rResult, xmlDoc, result);
280
+
281
+ st = xsltSaveResultToFilename(StringValuePtr(rFilename), result, stylesheet, 0);
282
+ if (st == -1) {
283
+ xmlErrorPtr err = xmlGetLastError();
284
+ rb_raise(rb_eIOError, "could not save stylesheet result file %s: %s",
285
+ StringValuePtr(rFilename), err->message);
286
+ }
287
+
288
+ return Qnil;
289
+ }
290
+
291
+ static VALUE stylesheet_save_to_string(VALUE self, VALUE rResult) {
292
+ xsltStylesheetPtr stylesheet = NULL;
293
+ xmlDocPtr result = NULL;
294
+ int st;
295
+ xmlChar *mem;
296
+ int size;
297
+
298
+ Data_Get_Struct(self, xsltStylesheet, stylesheet);
299
+ Data_Get_Struct(rResult, xmlDoc, result);
300
+
301
+ st = xsltSaveResultToString(&mem, &size, result, stylesheet);
302
+ if (st == -1) {
303
+ xmlErrorPtr err = xmlGetLastError();
304
+ rb_raise(rb_eStandardError, "could not save stylesheet result to string: %s",
305
+ err->message);
306
+ }
307
+ VALUE rStr = rb_str_new2(mem);
308
+ xmlFree(mem);
309
+
310
+ return rStr;
311
+ }
312
+
194
313
  void Init_teius() {
195
314
  /* LIBXML_TEST_VERSION */
196
315
 
316
+ xmlSetGenericErrorFunc(NULL, null_handler);
317
+ xsltSetGenericErrorFunc(NULL, null_handler);
318
+
197
319
  /* Symbols */
198
320
  sRequired = rb_intern("required");
199
321
  sFirst = rb_intern("first");
@@ -220,10 +342,20 @@ void Init_teius() {
220
342
  rb_define_method(cNode, "name", node_name, 0);
221
343
  rb_define_method(cNode, "xpath", node_xpath, 0);
222
344
  rb_define_method(cNode, "pointer", node_pointer, 0);
345
+ rb_define_method(cNode, "line", node_line, 0);
346
+ rb_define_method(cNode, "content", node_content, 0);
223
347
 
224
348
  /* Document */
225
349
  cDocument = rb_define_class_under(mTeius, "Document", cNode);
226
- rb_define_singleton_method(cDocument, "parse_file", parse_file, 1);
227
- rb_define_singleton_method(cDocument, "parse_string", parse_string, 1);
228
- rb_define_method(cNode, "to_s", document_to_s, 0);
350
+ rb_define_singleton_method(cDocument, "parse_file", document_parse_file, 1);
351
+ rb_define_singleton_method(cDocument, "parse_string", document_parse_string, 1);
352
+ rb_define_method(cDocument, "to_s", document_to_s, 0);
353
+ rb_define_method(cDocument, "root", document_root, 0);
354
+
355
+ /* XSL Stylesheet */
356
+ cStylesheet = rb_define_class_under(mTeius, "Stylesheet", cNode);
357
+ rb_define_singleton_method(cStylesheet, "parse_file", stylesheet_parse_file, 1);
358
+ rb_define_method(cStylesheet, "apply", stylesheet_apply, 1);
359
+ rb_define_method(cStylesheet, "save_to_string", stylesheet_save_to_string, 1);
360
+ rb_define_method(cStylesheet, "save_to_file", stylesheet_save_to_file, 2);
229
361
  }
data/lib/teius.rb CHANGED
@@ -1,17 +1,34 @@
1
- require 'teius.so'
1
+ require File.join(File.dirname(__FILE__), '..', 'ext', 'teius.so')
2
2
 
3
3
  module Teius
4
+ class Document
5
+
6
+ def self.content(xml)
7
+ parse_string(xml).content
8
+ end
9
+
10
+ def content
11
+ root.content
12
+ end
13
+ end
14
+
4
15
  class Node
5
16
  def fetch(xpath)
6
- node = find(:unique, xpath, :required => true)
17
+ node = find(:unique, xpath, :required => false)
7
18
  return node ? node.value : nil
8
19
  end
9
20
 
21
+ def [](key)
22
+ attributes[key]
23
+ end
24
+
10
25
  def ==(other)
26
+ return false unless other.kind_of? Node
11
27
  self.pointer == other.pointer
12
28
  end
13
29
 
14
30
  def eql?(other)
31
+ return false unless other.kind_of? Node
15
32
  self.pointer == other.pointer
16
33
  end
17
34
 
@@ -31,5 +48,25 @@ module Teius
31
48
  self.find :all, 'child::*'
32
49
  end
33
50
 
51
+ def to_s
52
+ "#{name}:#{line}"
53
+ end
54
+
55
+ end
56
+
57
+ class Stylesheet
58
+
59
+ # If no filename is provided, will return the result as a String
60
+ def transform(doc, filename = nil)
61
+ result = apply doc
62
+ if filename
63
+ out = save_to_file result, filename # returns nil
64
+ else
65
+ out = save_to_string result
66
+ end
67
+ out
68
+ end
69
+
34
70
  end
71
+
35
72
  end
data/test/input.xml ADDED
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
4
+ <head>
5
+ <title>Test document</title>
6
+ </head>
7
+ <body>
8
+ <h1>Test document</h1>
9
+ <p>This paragraph indicates the rest of the document.</p>
10
+ </body>
11
+ </html>
data/test/teius_test.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
2
2
  require 'test/unit'
3
3
  require 'teius'
4
+ require 'tempfile'
4
5
 
5
6
  class TeiusTest < Test::Unit::TestCase
6
7
  include Teius
@@ -135,4 +136,61 @@ class TeiusTest < Test::Unit::TestCase
135
136
  assert_equal 9, sibs.size
136
137
  end
137
138
 
139
+ def test_xslt
140
+ current_dir = File.dirname(__FILE__)
141
+ test_doc_path = File.join(current_dir, 'input.xml')
142
+ xsl_path = File.join(current_dir, 'test.xsl')
143
+ doc = Document.parse_file test_doc_path
144
+ xsl = Stylesheet.parse_file xsl_path
145
+ assert_no_match %r{menu}, doc.to_s
146
+ assert_match %r{menu}, xsl.transform(doc)
147
+ end
148
+
149
+ def test_xslt_write_to_file
150
+ current_dir = File.dirname(__FILE__)
151
+ test_doc_path = File.join(current_dir, 'input.xml')
152
+ xsl_path = File.join(current_dir, 'test.xsl')
153
+ doc = Document.parse_file test_doc_path
154
+ xsl = Stylesheet.parse_file xsl_path
155
+ Tempfile.open('xslt_test_file') do |tf|
156
+ outpath = tf.path
157
+ xsl.transform doc, outpath
158
+ str = tf.read
159
+ assert_match %r{menu}, str
160
+ end
161
+ end
162
+
163
+ def test_xml_bad_file
164
+ assert_raise(Teius::ParseError) {
165
+ Document.parse_file File.join(File.dirname(__FILE__), 'bogus.xsl')
166
+ }
167
+ end
168
+
169
+ def test_xslt_bad_file
170
+ assert_raise(Teius::ParseError) {
171
+ Stylesheet.parse_file File.join(File.dirname(__FILE__), 'bogus.xsl')
172
+ }
173
+ end
174
+
175
+ def test_root
176
+ root = @doc.root
177
+ assert_equal 'sports-content:2', root.to_s
178
+ end
179
+
180
+ def test_node_content
181
+ node = @doc.find :first, '//team-metadata'
182
+ expected = [ '<team-metadata team-key="l.nfl.com-t.24" alignment="away">',
183
+ ' <name first="Green Bay" last="Packers"/>', '</team-metadata>' ].join "\n"
184
+ assert_equal expected, node.content
185
+ end
186
+
187
+ def test_doc_content
188
+ assert_match /^<sports-content/, @doc.content
189
+ end
190
+
191
+ def test_doc_class_content
192
+ content = Document.content '<library><book/></library>'
193
+ assert_equal "<library>\n <book/>\n</library>", content
194
+ end
195
+
138
196
  end
data/test/test.xsl ADDED
@@ -0,0 +1,27 @@
1
+ <?xml version="1.0"?>
2
+ <xsl:stylesheet version="1.0" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:xdt="http://www.w3.org/2005/02/xpath-datatypes" exclude-result-prefixes="xhtml xsl fn xs xdt">
3
+ <xsl:output method="xml" version="1.0" encoding="UTF-8" doctype-public="-//W3C//DTD XHTML 1.1//EN" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" indent="yes"/>
4
+
5
+ <!-- the identity template -->
6
+ <xsl:template match="@*|node()">
7
+ <xsl:copy>
8
+ <xsl:apply-templates select="@*|node()"/>
9
+ </xsl:copy>
10
+ </xsl:template>
11
+
12
+ <!-- template for the head section. Only needed if we want to change, delete or add nodes. In our case we need it to add a link element pointing to an external CSS stylesheet. -->
13
+ <xsl:template match="xhtml:head">
14
+ <xsl:copy>
15
+ <link rel="StyleSheet" href="xhtml_test.css" type="text/css"/>
16
+ <xsl:apply-templates select="@*|node()"/>
17
+ </xsl:copy>
18
+ </xsl:template>
19
+
20
+ <!-- template for the body section. Only needed if we want to change, delete or add nodes. In our case we need it to add a div element containing a menu of navigation. -->
21
+ <xsl:template match="xhtml:body">
22
+ <xsl:copy>
23
+ <div class="menu"><p><a href="home">Homepage</a> &gt; <strong>Test document</strong></p></div>
24
+ <xsl:apply-templates select="@*|node()"/>
25
+ </xsl:copy>
26
+ </xsl:template>
27
+ </xsl:stylesheet>
metadata CHANGED
@@ -3,11 +3,12 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: teius
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.0
7
- date: 2006-05-05 00:00:00 +02:00
6
+ version: "0.5"
7
+ date: 2006-06-28 00:00:00 +03:00
8
8
  summary: Light-weight Ruby API to LibXML.
9
9
  require_paths:
10
10
  - lib
11
+ - dll
11
12
  email: joshmh@gmail.com
12
13
  homepage: http://teius.rubyforge.org
13
14
  rubyforge_project: teius
@@ -28,17 +29,15 @@ cert_chain:
28
29
  authors:
29
30
  - Joshua Harvey
30
31
  files:
31
- - ext/extconf.rb
32
- - ext/Makefile
33
- - ext/teius.c
34
- - ext/teius.o
35
- - ext/teius.so
36
- - lib/teius.rb
37
- - lib/teius.so
32
+ - test/input.xml
38
33
  - test/teius_test.rb
34
+ - test/test.xsl
39
35
  - xml/xt.3608774-update-mid-event.xml
40
36
  - xml/xt.3608787-update-post-event.xml
41
37
  - doc/LICENCE.txt
38
+ - ext/extconf.rb
39
+ - ext/teius.c
40
+ - lib/teius.rb
42
41
  test_files:
43
42
  - test/teius_test.rb
44
43
  rdoc_options: []
data/ext/Makefile DELETED
@@ -1,138 +0,0 @@
1
-
2
- SHELL = /bin/sh
3
-
4
- #### Start of system configuration section. ####
5
-
6
- srcdir = .
7
- topdir = d:/msys/local/lib/ruby/1.8/i386-mingw32
8
- hdrdir = $(topdir)
9
- VPATH = $(srcdir);$(topdir);$(hdrdir)
10
-
11
- DESTDIR = d:
12
- prefix = $(DESTDIR)/msys/local
13
- exec_prefix = $(DESTDIR)/msys/local
14
- sitedir = $(prefix)/lib/ruby/site_ruby
15
- rubylibdir = $(libdir)/ruby/$(ruby_version)
16
- archdir = $(rubylibdir)/$(arch)
17
- sbindir = $(exec_prefix)/sbin
18
- datadir = $(prefix)/share
19
- includedir = $(prefix)/include
20
- infodir = $(prefix)/info
21
- sysconfdir = $(prefix)/etc
22
- mandir = $(prefix)/man
23
- libdir = $(DESTDIR)/msys/local/lib
24
- sharedstatedir = $(prefix)/com
25
- oldincludedir = $(DESTDIR)/usr/include
26
- sitearchdir = $(sitelibdir)/$(sitearch)
27
- bindir = $(exec_prefix)/bin
28
- localstatedir = $(prefix)/var
29
- sitelibdir = $(sitedir)/$(ruby_version)
30
- libexecdir = $(exec_prefix)/libexec
31
-
32
- CC = gcc
33
- LIBRUBY = lib$(LIBRUBY_SO).a
34
- LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
35
- LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
36
- LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
37
-
38
- CFLAGS = -g -O2
39
- CPPFLAGS = -I. -I$(topdir) -I$(hdrdir) -I$(srcdir) -Id:/msys/local/include/libxml2
40
- CXXFLAGS = $(CFLAGS)
41
- DLDFLAGS = -Wl,--enable-auto-import,--export-all
42
- LDSHARED = gcc -shared -s
43
- AR = ar
44
- EXEEXT = .exe
45
-
46
- RUBY_INSTALL_NAME = ruby
47
- RUBY_SO_NAME = msvcrt-ruby18
48
- arch = i386-mingw32
49
- sitearch = i386-msvcrt
50
- ruby_version = 1.8
51
- ruby = d:/msys/local/bin/ruby
52
- RUBY = $(ruby)
53
- RM = rm -f
54
- MAKEDIRS = mkdir -p
55
- INSTALL = /bin/install -c
56
- INSTALL_PROG = $(INSTALL) -m 0755
57
- INSTALL_DATA = $(INSTALL) -m 644
58
- COPY = cp
59
-
60
- #### End of system configuration section. ####
61
-
62
- preload =
63
-
64
- libpath = d:/msys/local/lib $(libdir)
65
- LIBPATH = -L"d:/msys/local/lib" -L"$(libdir)"
66
- DEFFILE =
67
-
68
- CLEANFILES =
69
- DISTCLEANFILES =
70
-
71
- extout =
72
- extout_prefix =
73
- target_prefix =
74
- LOCAL_LIBS =
75
- LIBS = $(LIBRUBYARG_SHARED) -lxml2 -lwsock32
76
- SRCS = teius.c
77
- OBJS = teius.o
78
- TARGET = teius
79
- DLLIB = $(TARGET).so
80
- STATIC_LIB =
81
-
82
- RUBYCOMMONDIR = $(sitedir)$(target_prefix)
83
- RUBYLIBDIR = $(sitelibdir)$(target_prefix)
84
- RUBYARCHDIR = $(sitearchdir)$(target_prefix)
85
-
86
- TARGET_SO = $(DLLIB)
87
- CLEANLIBS = $(TARGET).so $(TARGET).il? $(TARGET).tds $(TARGET).map
88
- CLEANOBJS = *.o *.a *.s[ol] *.pdb *.exp *.bak
89
-
90
- all: $(DLLIB)
91
- static: $(STATIC_LIB)
92
-
93
- clean:
94
- @-$(RM) $(CLEANLIBS:/=\) $(CLEANOBJS:/=\) $(CLEANFILES:/=\)
95
-
96
- distclean: clean
97
- @-$(RM) Makefile extconf.h conftest.* mkmf.log
98
- @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES:/=\)
99
-
100
- realclean: distclean
101
- install: install-so install-rb
102
-
103
- install-so: $(RUBYARCHDIR)
104
- install-so: $(RUBYARCHDIR)/$(DLLIB)
105
- $(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
106
- $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
107
- install-rb: pre-install-rb install-rb-default
108
- install-rb-default: pre-install-rb-default
109
- pre-install-rb: Makefile
110
- pre-install-rb-default: Makefile
111
- $(RUBYARCHDIR):
112
- $(MAKEDIRS) $@
113
-
114
- site-install: site-install-so site-install-rb
115
- site-install-so: install-so
116
- site-install-rb: install-rb
117
-
118
- .SUFFIXES: .c .m .cc .cxx .cpp .o
119
-
120
- .cc.o:
121
- $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
122
-
123
- .cxx.o:
124
- $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
125
-
126
- .cpp.o:
127
- $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
128
-
129
- .c.o:
130
- $(CC) $(CFLAGS) $(CPPFLAGS) -c $<
131
-
132
- $(DLLIB): $(OBJS)
133
- @-$(RM) $@
134
- $(LDSHARED) $(DLDFLAGS) $(LIBPATH) -o $@ $(OBJS) $(LOCAL_LIBS) $(LIBS)
135
-
136
-
137
-
138
- $(OBJS): ruby.h defines.h
data/ext/teius.o DELETED
Binary file
data/ext/teius.so DELETED
Binary file
data/lib/teius.so DELETED
Binary file