ffi-expat 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/LICENSE +21 -0
  2. data/README.md +54 -0
  3. data/lib/ffi/expat.rb +250 -0
  4. data/test/fixtures/sample.xml +120 -0
  5. metadata +83 -0
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2010 Scott Chacon
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,54 @@
1
+ ffi-expat
2
+ =========
3
+
4
+ ffi-expat is a Ruby FFI wrapper for the expat XML parsing library.
5
+
6
+ Installation
7
+ ============
8
+
9
+ [sudo] gem install ffi-zlib
10
+
11
+ SAMPLE USAGE
12
+ ============
13
+
14
+ ffi-expat is a thin wrapper around the expat calls so using ffi-expat in Ruby is similar to the way you would use expat in C (modulo the obious language specifics).
15
+
16
+ Here's a simple example which counts the number of each start tags:
17
+
18
+ require "rubygems"
19
+ require "ffi/expat"
20
+
21
+ class Handler
22
+ attr_reader :starts
23
+ def initialize
24
+ @starts = Hash.new
25
+ end
26
+ def start_elem(parser, tag, attrs)
27
+ if @starts.has_key?(tag)
28
+ @starts[tag] += 1
29
+ else
30
+ @starts[tag] = 1
31
+ end
32
+ end
33
+ end
34
+
35
+ xml = File.read("test.xml")
36
+ handler = Handler.new
37
+ parser = FFI::Expat.XML_ParserCreate(nil)
38
+ FFI::Expat.XML_SetStartElementHandler(parser, handler.method(:start_elem))
39
+ FFI::Expat.XML_Parse(parser, xml, xml.length, true)
40
+ FFI::Expat.XML_ParserFree(parser)
41
+
42
+ handler.starts.each do |tag, count|
43
+ puts "#{tag}: #{count}"
44
+ end
45
+
46
+ AUTHORS
47
+ ==============
48
+
49
+ Luc Heinrich <luc@honk-honk.com>
50
+
51
+ LICENSE
52
+ ==============
53
+
54
+ MIT.
@@ -0,0 +1,250 @@
1
+ require "ffi"
2
+
3
+ # =============================================================================
4
+
5
+ module FFI::Expat
6
+ extend FFI::Library
7
+ ffi_lib "expat"
8
+
9
+ # -------------------------------------------------------------------------
10
+
11
+ typedef :pointer, :XML_Parser
12
+
13
+ # -------------------------------------------------------------------------
14
+
15
+ enum :XML_Status, [ :XML_STATUS_ERROR,
16
+ :XML_STATUS_OK,
17
+ :XML_STATUS_SUSPENDED]
18
+
19
+ enum :XML_Error, [ :XML_ERROR_NONE,
20
+ :XML_ERROR_NO_MEMORY,
21
+ :XML_ERROR_SYNTAX,
22
+ :XML_ERROR_NO_ELEMENTS,
23
+ :XML_ERROR_INVALID_TOKEN,
24
+ :XML_ERROR_UNCLOSED_TOKEN,
25
+ :XML_ERROR_PARTIAL_CHAR,
26
+ :XML_ERROR_TAG_MISMATCH,
27
+ :XML_ERROR_DUPLICATE_ATTRIBUTE,
28
+ :XML_ERROR_JUNK_AFTER_DOC_ELEMENT,
29
+ :XML_ERROR_PARAM_ENTITY_REF,
30
+ :XML_ERROR_UNDEFINED_ENTITY,
31
+ :XML_ERROR_RECURSIVE_ENTITY_REF,
32
+ :XML_ERROR_ASYNC_ENTITY,
33
+ :XML_ERROR_BAD_CHAR_REF,
34
+ :XML_ERROR_BINARY_ENTITY_REF,
35
+ :XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF,
36
+ :XML_ERROR_MISPLACED_XML_PI,
37
+ :XML_ERROR_UNKNOWN_ENCODING,
38
+ :XML_ERROR_INCORRECT_ENCODING,
39
+ :XML_ERROR_UNCLOSED_CDATA_SECTION,
40
+ :XML_ERROR_EXTERNAL_ENTITY_HANDLING,
41
+ :XML_ERROR_NOT_STANDALONE,
42
+ :XML_ERROR_UNEXPECTED_STATE,
43
+ :XML_ERROR_ENTITY_DECLARED_IN_PE,
44
+ :XML_ERROR_FEATURE_REQUIRES_XML_DTD,
45
+ :XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING,
46
+ # Added in 1.95.7
47
+ :XML_ERROR_UNBOUND_PREFIX,
48
+ # Added in 1.95.8.
49
+ :XML_ERROR_UNDECLARING_PREFIX,
50
+ :XML_ERROR_INCOMPLETE_PE,
51
+ :XML_ERROR_XML_DECL,
52
+ :XML_ERROR_TEXT_DECL,
53
+ :XML_ERROR_PUBLICID,
54
+ :XML_ERROR_SUSPENDED,
55
+ :XML_ERROR_NOT_SUSPENDED,
56
+ :XML_ERROR_ABORTED,
57
+ :XML_ERROR_FINISHED,
58
+ :XML_ERROR_SUSPEND_PE,
59
+ # Added in 2.0
60
+ :XML_ERROR_RESERVED_PREFIX_XML,
61
+ :XML_ERROR_RESERVED_PREFIX_XMLNS,
62
+ :XML_ERROR_RESERVED_NAMESPACE_URI ]
63
+
64
+ # -------------------------------------------------------------------------
65
+
66
+ enum :XML_Content_Type, [ :XML_CTYPE_EMPTY, 1,
67
+ :XML_CTYPE_ANY,
68
+ :XML_CTYPE_MIXED,
69
+ :XML_CTYPE_NAME,
70
+ :XML_CTYPE_CHOICE,
71
+ :XML_CTYPE_SEQ ]
72
+
73
+ enum :XML_Content_Quant, [ :XML_CQUANT_NONE,
74
+ :XML_CQUANT_OPT,
75
+ :XML_CQUANT_REP,
76
+ :XML_CQUANT_PLUS ]
77
+
78
+ class XML_Content < FFI::Struct
79
+ layout :type, :XML_Content_Type,
80
+ :quant, :XML_Content_Quant,
81
+ :name, :string,
82
+ :numchildren, :int,
83
+ :children, :pointer
84
+ end
85
+
86
+ attach_function :XML_ParserCreate, [:string], :XML_Parser
87
+ attach_function :XML_ParserCreateNS, [:string, :char], :XML_Parser
88
+ attach_function :XML_ParserReset, [:XML_Parser, :string], :bool
89
+
90
+ callback :XML_ElementDeclHandler, [:pointer, :string, XML_Content], :void
91
+ attach_function :XML_SetElementDeclHandler, [:XML_Parser, :XML_ElementDeclHandler], :void
92
+
93
+ callback :XML_AttlistDeclHandler, [:pointer, :string, :string, :string, :string, :int], :void
94
+ attach_function :XML_SetAttlistDeclHandler, [:XML_Parser, :XML_AttlistDeclHandler], :void
95
+
96
+ callback :XML_XmlDeclHandler, [:pointer, :string, :string, :int], :void
97
+ attach_function :XML_SetXmlDeclHandler, [:XML_Parser, :XML_XmlDeclHandler], :void
98
+
99
+ callback :XML_Encoding_convert, [:pointer, :string], :int
100
+ callback :XML_Encoding_release, [:pointer], :void
101
+ class XML_Encoding < FFI::Struct
102
+ layout :map, [:char, 256],
103
+ :data, :pointer,
104
+ :convert, :XML_Encoding_convert,
105
+ :release, :XML_Encoding_release
106
+ end
107
+
108
+ callback :XML_StartElementHandler, [:pointer, :string, :pointer], :void
109
+ callback :XML_EndElementHandler, [:pointer, :string], :void
110
+ attach_function :XML_SetElementHandler, [:XML_Parser, :XML_StartElementHandler, :XML_EndElementHandler], :void
111
+ attach_function :XML_SetStartElementHandler, [:XML_Parser, :XML_StartElementHandler], :void
112
+ attach_function :XML_SetEndElementHandler, [:XML_Parser, :XML_EndElementHandler], :void
113
+ attach_function :XML_GetSpecifiedAttributeCount, [:XML_Parser], :int
114
+ attach_function :XML_GetIdAttributeIndex, [:XML_Parser], :int
115
+
116
+ callback :XML_CharacterDataHandler, [:pointer, :pointer, :int], :void
117
+ attach_function :XML_SetCharacterDataHandler, [:XML_Parser, :XML_CharacterDataHandler], :void
118
+
119
+ callback :XML_ProcessingInstructionHandler, [:pointer, :string, :string], :void
120
+ attach_function :XML_SetProcessingInstructionHandler, [:XML_Parser, :XML_ProcessingInstructionHandler], :void
121
+
122
+ callback :XML_CommentHandler, [:pointer, :string], :void
123
+ attach_function :XML_SetCommentHandler, [:XML_Parser, :XML_CommentHandler], :void
124
+
125
+ callback :XML_StartCdataSectionHandler, [:pointer], :void
126
+ callback :XML_EndCdataSectionHandler, [:pointer], :void
127
+ attach_function :XML_SetCdataSectionHandler, [:XML_Parser, :XML_StartCdataSectionHandler, :XML_EndCdataSectionHandler], :void
128
+ attach_function :XML_SetStartCdataSectionHandler, [:XML_Parser, :XML_StartCdataSectionHandler], :void
129
+ attach_function :XML_SetEndCdataSectionHandler, [:XML_Parser, :XML_EndCdataSectionHandler], :void
130
+
131
+ callback :XML_DefaultHandler, [:pointer, :pointer, :int], :void
132
+ attach_function :XML_SetDefaultHandler, [:XML_Parser, :XML_DefaultHandler], :void
133
+ attach_function :XML_SetDefaultHandlerExpand, [:XML_Parser, :XML_DefaultHandler], :void
134
+
135
+ callback :XML_StartDoctypeDeclHandler, [:pointer, :string, :string, :string, :int], :void
136
+ callback :XML_EndDoctypeDeclHandler, [:pointer, :pointer], :void
137
+ attach_function :XML_SetDoctypeDeclHandler, [:XML_Parser, :XML_StartDoctypeDeclHandler, :XML_EndDoctypeDeclHandler], :void
138
+ attach_function :XML_SetStartDoctypeDeclHandler, [:XML_Parser, :XML_StartDoctypeDeclHandler], :void
139
+ attach_function :XML_SetEndDoctypeDeclHandler, [:XML_Parser, :XML_EndDoctypeDeclHandler], :void
140
+
141
+ callback :XML_EntityDeclHandler, [:pointer, :string, :int, :pointer, :int, :string, :string, :string, :string], :void
142
+ attach_function :XML_SetEntityDeclHandler, [:XML_Parser, :XML_EntityDeclHandler], :void
143
+
144
+ callback :XML_NotationDeclHandler, [:pointer, :string, :string, :string, :string], :void
145
+ attach_function :XML_SetNotationDeclHandler, [:XML_Parser, :XML_NotationDeclHandler], :void
146
+
147
+ callback :XML_StartNamespaceDeclHandler, [:pointer, :string, :string], :void
148
+ callback :XML_EndNamespaceDeclHandler, [:pointer, :string], :void
149
+ attach_function :XML_SetNamespaceDeclHandler, [:XML_Parser, :XML_StartNamespaceDeclHandler, :XML_EndNamespaceDeclHandler], :void
150
+ attach_function :XML_SetStartNamespaceDeclHandler, [:XML_Parser, :XML_StartNamespaceDeclHandler], :void
151
+ attach_function :XML_SetEndNamespaceDeclHandler, [:XML_Parser, :XML_EndNamespaceDeclHandler], :void
152
+
153
+ callback :XML_NotStandaloneHandler, [:pointer], :void
154
+ attach_function :XML_SetNotStandaloneHandler, [:XML_Parser, :XML_NotStandaloneHandler], :void
155
+
156
+ callback :XML_ExternalEntityRefHandler, [:pointer, :string, :string, :string, :string], :void
157
+ attach_function :XML_SetExternalEntityRefHandler, [:XML_Parser, :XML_ExternalEntityRefHandler], :void
158
+
159
+ callback :XML_SkippedEntityHandler, [:pointer, :string, :int], :void
160
+ attach_function :XML_SetExternalEntityRefHandlerArg, [:XML_Parser, :pointer], :void
161
+ attach_function :XML_SetSkippedEntityHandler, [:XML_Parser, :XML_SkippedEntityHandler], :void
162
+
163
+ callback :XML_UnknownEncodingHandler, [:pointer, :string, XML_Encoding], :int
164
+ attach_function :XML_SetUnknownEncodingHandler, [:XML_Parser, :XML_UnknownEncodingHandler, :pointer], :void
165
+
166
+ # -------------------------------------------------------------------------
167
+
168
+ attach_function :XML_DefaultCurrent, [:XML_Parser], :void
169
+ attach_function :XML_SetReturnNSTriplet, [:XML_Parser, :int], :void
170
+ attach_function :XML_SetUserData, [:XML_Parser, :pointer], :void
171
+ attach_function :XML_SetEncoding, [:XML_Parser, :string], :XML_Status
172
+ attach_function :XML_UseParserAsHandlerArg, [:XML_Parser], :void
173
+ attach_function :XML_UseForeignDTD, [:XML_Parser, :bool], :XML_Error
174
+ attach_function :XML_SetBase, [:XML_Parser, :string], :XML_Status
175
+ attach_function :XML_GetBase, [:XML_Parser], :string
176
+
177
+ # -------------------------------------------------------------------------
178
+
179
+ attach_function :XML_Parse, [:XML_Parser, :pointer, :int, :bool], :XML_Status
180
+ attach_function :XML_GetBuffer, [:XML_Parser, :int], :pointer
181
+ attach_function :XML_ParseBuffer, [:XML_Parser, :int, :int], :XML_Status
182
+ attach_function :XML_StopParser, [:XML_Parser, :bool], :XML_Status
183
+ attach_function :XML_ResumeParser, [:XML_Parser], :XML_Status
184
+
185
+ enum :XML_Parsing, [:XML_INITIALIZED, :XML_PARSING, :XML_FINISHED, :XML_SUSPENDED]
186
+ class XML_ParsingStatus < FFI::Struct
187
+ layout :parsing, :XML_Parsing,
188
+ :finalBuffer, :bool
189
+ end
190
+ attach_function :XML_GetParsingStatus, [:XML_Parser, :buffer_out], :void
191
+
192
+ # -------------------------------------------------------------------------
193
+
194
+ enum :XML_ParamEntityParsing, [:XML_PARAM_ENTITY_PARSING_NEVER, :XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, :XML_PARAM_ENTITY_PARSING_ALWAYS]
195
+
196
+ attach_function :XML_ExternalEntityParserCreate, [:XML_Parser, :string, :string], :XML_Parser
197
+ attach_function :XML_SetParamEntityParsing, [:XML_Parser, :XML_ParamEntityParsing], :int
198
+
199
+ # -------------------------------------------------------------------------
200
+
201
+ attach_function :XML_GetErrorCode, [:XML_Parser], :XML_Error
202
+ attach_function :XML_GetCurrentLineNumber, [:XML_Parser], :ulong
203
+ attach_function :XML_GetCurrentColumnNumber, [:XML_Parser], :ulong
204
+ attach_function :XML_GetCurrentByteIndex, [:XML_Parser], :ulong
205
+ attach_function :XML_GetCurrentByteCount, [:XML_Parser], :int
206
+ attach_function :XML_GetInputContext, [:XML_Parser, :buffer_out, :buffer_out], :pointer
207
+
208
+ # -------------------------------------------------------------------------
209
+
210
+ attach_function :XML_FreeContentModel, [:XML_Parser, :pointer], :void
211
+ attach_function :XML_ParserFree, [:XML_Parser], :void
212
+ attach_function :XML_ErrorString, [:XML_Error], :string
213
+
214
+ # -------------------------------------------------------------------------
215
+
216
+ class XML_Expat_Version < FFI::Struct
217
+ layout :major, :int,
218
+ :minor, :int,
219
+ :micro, :int
220
+ end
221
+
222
+ attach_function :XML_ExpatVersion, [ ], :string
223
+ attach_function :XML_ExpatVersionInfo, [ ], XML_Expat_Version.by_value
224
+
225
+ # -------------------------------------------------------------------------
226
+
227
+ enum :XML_FeatureEnum, [:XML_FEATURE_END,
228
+ :XML_FEATURE_UNICODE,
229
+ :XML_FEATURE_UNICODE_WCHAR_T,
230
+ :XML_FEATURE_DTD,
231
+ :XML_FEATURE_CONTEXT_BYTES,
232
+ :XML_FEATURE_MIN_SIZE,
233
+ :XML_FEATURE_SIZEOF_XML_CHAR,
234
+ :XML_FEATURE_SIZEOF_XML_LCHAR,
235
+ :XML_FEATURE_NS,
236
+ :XML_FEATURE_LARGE_SIZE ]
237
+
238
+ class XML_Feature < FFI::Struct
239
+ layout :feature, :XML_FeatureEnum,
240
+ :name, :string,
241
+ :value, :long
242
+ end
243
+
244
+ attach_function :XML_GetFeatureList, [ ], :pointer
245
+
246
+ # -------------------------------------------------------------------------
247
+
248
+ end
249
+
250
+ # =============================================================================
@@ -0,0 +1,120 @@
1
+ <?xml version="1.0"?>
2
+ <catalog>
3
+ <book id="bk101">
4
+ <author>Gambardella, Matthew</author>
5
+ <title>XML Developer's Guide</title>
6
+ <genre>Computer</genre>
7
+ <price>44.95</price>
8
+ <publish_date>2000-10-01</publish_date>
9
+ <description>An in-depth look at creating applications
10
+ with XML.</description>
11
+ </book>
12
+ <book id="bk102">
13
+ <author>Ralls, Kim</author>
14
+ <title>Midnight Rain</title>
15
+ <genre>Fantasy</genre>
16
+ <price>5.95</price>
17
+ <publish_date>2000-12-16</publish_date>
18
+ <description>A former architect battles corporate zombies,
19
+ an evil sorceress, and her own childhood to become queen
20
+ of the world.</description>
21
+ </book>
22
+ <book id="bk103">
23
+ <author>Corets, Eva</author>
24
+ <title>Maeve Ascendant</title>
25
+ <genre>Fantasy</genre>
26
+ <price>5.95</price>
27
+ <publish_date>2000-11-17</publish_date>
28
+ <description>After the collapse of a nanotechnology
29
+ society in England, the young survivors lay the
30
+ foundation for a new society.</description>
31
+ </book>
32
+ <book id="bk104">
33
+ <author>Corets, Eva</author>
34
+ <title>Oberon's Legacy</title>
35
+ <genre>Fantasy</genre>
36
+ <price>5.95</price>
37
+ <publish_date>2001-03-10</publish_date>
38
+ <description>In post-apocalypse England, the mysterious
39
+ agent known only as Oberon helps to create a new life
40
+ for the inhabitants of London. Sequel to Maeve
41
+ Ascendant.</description>
42
+ </book>
43
+ <book id="bk105">
44
+ <author>Corets, Eva</author>
45
+ <title>The Sundered Grail</title>
46
+ <genre>Fantasy</genre>
47
+ <price>5.95</price>
48
+ <publish_date>2001-09-10</publish_date>
49
+ <description>The two daughters of Maeve, half-sisters,
50
+ battle one another for control of England. Sequel to
51
+ Oberon's Legacy.</description>
52
+ </book>
53
+ <book id="bk106">
54
+ <author>Randall, Cynthia</author>
55
+ <title>Lover Birds</title>
56
+ <genre>Romance</genre>
57
+ <price>4.95</price>
58
+ <publish_date>2000-09-02</publish_date>
59
+ <description>When Carla meets Paul at an ornithology
60
+ conference, tempers fly as feathers get ruffled.</description>
61
+ </book>
62
+ <book id="bk107">
63
+ <author>Thurman, Paula</author>
64
+ <title>Splish Splash</title>
65
+ <genre>Romance</genre>
66
+ <price>4.95</price>
67
+ <publish_date>2000-11-02</publish_date>
68
+ <description>A deep sea diver finds true love twenty
69
+ thousand leagues beneath the sea.</description>
70
+ </book>
71
+ <book id="bk108">
72
+ <author>Knorr, Stefan</author>
73
+ <title>Creepy Crawlies</title>
74
+ <genre>Horror</genre>
75
+ <price>4.95</price>
76
+ <publish_date>2000-12-06</publish_date>
77
+ <description>An anthology of horror stories about roaches,
78
+ centipedes, scorpions and other insects.</description>
79
+ </book>
80
+ <book id="bk109">
81
+ <author>Kress, Peter</author>
82
+ <title>Paradox Lost</title>
83
+ <genre>Science Fiction</genre>
84
+ <price>6.95</price>
85
+ <publish_date>2000-11-02</publish_date>
86
+ <description>After an inadvertant trip through a Heisenberg
87
+ Uncertainty Device, James Salway discovers the problems
88
+ of being quantum.</description>
89
+ </book>
90
+ <book id="bk110">
91
+ <author>O'Brien, Tim</author>
92
+ <title>Microsoft .NET: The Programming Bible</title>
93
+ <genre>Computer</genre>
94
+ <price>36.95</price>
95
+ <publish_date>2000-12-09</publish_date>
96
+ <description>Microsoft's .NET initiative is explored in
97
+ detail in this deep programmer's reference.</description>
98
+ </book>
99
+ <book id="bk111">
100
+ <author>O'Brien, Tim</author>
101
+ <title>MSXML3: A Comprehensive Guide</title>
102
+ <genre>Computer</genre>
103
+ <price>36.95</price>
104
+ <publish_date>2000-12-01</publish_date>
105
+ <description>The Microsoft MSXML3 parser is covered in
106
+ detail, with attention to XML DOM interfaces, XSLT processing,
107
+ SAX and more.</description>
108
+ </book>
109
+ <book id="bk112">
110
+ <author>Galos, Mike</author>
111
+ <title>Visual Studio 7: A Comprehensive Guide</title>
112
+ <genre>Computer</genre>
113
+ <price>49.95</price>
114
+ <publish_date>2001-04-16</publish_date>
115
+ <description>Microsoft Visual Studio 7 is explored in depth,
116
+ looking at how Visual Basic, Visual C++, C#, and ASP+ are
117
+ integrated into a comprehensive development
118
+ environment.</description>
119
+ </book>
120
+ </catalog>
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ffi-expat
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Luc Heinrich
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-05-31 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: ffi
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ description: ffi-expat provides a very thin wrapper around expat using the Ruby FFI library.
36
+ email: luc@honk-honk.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - lib/ffi/expat.rb
45
+ - test/fixtures/sample.xml
46
+ - README.md
47
+ - LICENSE
48
+ has_rdoc: true
49
+ homepage: http://github.com/lucsky/ffi-expat
50
+ licenses: []
51
+
52
+ post_install_message:
53
+ rdoc_options: []
54
+
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ hash: 3
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ requirements: []
76
+
77
+ rubyforge_project:
78
+ rubygems_version: 1.3.7
79
+ signing_key:
80
+ specification_version: 3
81
+ summary: FFI based wrapper for expat.
82
+ test_files: []
83
+