rebat 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.9.3-p125@rebatdb
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rebat.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Omar Mekky
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,29 @@
1
+ # Rebat
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'rebat'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install rebat
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,23 @@
1
+ require 'thrift'
2
+
3
+ # thrift sources. load order is important.
4
+ $LOAD_PATH << File.join(File.dirname(__FILE__), 'rebat', 'thrift')
5
+
6
+ require 'rebat/thrift/rebat_d_b'
7
+ require 'rebat/thrift/rebat_constants'
8
+ require 'rebat/thrift/rebat_types'
9
+
10
+ require 'rebat/version'
11
+
12
+ module Rebat
13
+ autoload :Selector, 'rebat/selector'
14
+ autoload :Client, 'rebat/client'
15
+
16
+ class << self
17
+ attr_accessor :relations
18
+
19
+ def new(*args)
20
+ Rebat::Client.new(*args)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,81 @@
1
+ class Rebat::Client
2
+ def initialize(host, port, relations)
3
+ @transport = Thrift::BufferedTransport.new(Thrift::Socket.new(host, port))
4
+ @protocol = Thrift::BinaryProtocol.new(@transport)
5
+ @client = Rebat::Thrift::RebatDB::Client.new(@protocol)
6
+
7
+ @transport.open
8
+ end
9
+
10
+ def send(&block)
11
+ begin
12
+ @transport.open unless @transport.open?
13
+ yield @client
14
+ rescue Thrift::Exception => tx
15
+ print 'Thrift::Exception: ', tx.message, "\n"
16
+ end
17
+ end
18
+
19
+ def close
20
+ @transport.close
21
+ end
22
+
23
+ def add(from_entity_id, from_entity_type, to_entity_id, to_entity_type, weight, relation_id)
24
+ edge = Rebat::Thrift::Edge.new
25
+
26
+ edge.fromEntityId = from_entity_id
27
+ edge.fromEntityType = from_entity_type
28
+ edge.toEntityId = to_entity_id
29
+ edge.toEntityType = to_entity_type
30
+ edge.weight = weight
31
+ edge.relationId = relation_id
32
+
33
+ self.send do |client|
34
+ client.addQuery(edge)
35
+ end
36
+ end
37
+
38
+ def updateWeight(from_entity_id, from_entity_type, to_entity_id, to_entity_type, relation_id, new_weight)
39
+ edge = Rebat::Thrift::Edge.new
40
+
41
+ edge.fromEntityId = from_entity_id
42
+ edge.fromEntityType = from_entity_type
43
+ edge.toEntityId = to_entity_id
44
+ edge.toEntityType = to_entity_type
45
+ edge.relationId = relation_id
46
+
47
+ self.send do |client|
48
+ client.updateWeightQuery(edge, new_weight)
49
+ end
50
+ end
51
+
52
+ def delete(from_entity_id, from_entity_type, to_entity_id, to_entity_type, relation_id)
53
+ edge = Rebat::Thrift::Edge.new
54
+
55
+ edge.fromEntityId = from_entity_id
56
+ edge.fromEntityType = from_entity_type
57
+ edge.toEntityId = to_entity_id
58
+ edge.toEntityType = to_entity_type
59
+ edge.relationId = relation_id
60
+
61
+ self.send do |client|
62
+ client.deleteQuery(edge)
63
+ end
64
+ end
65
+
66
+ def where(*args)
67
+ Rebat::Selector.new(self).where *args
68
+ end
69
+
70
+ def union(*args)
71
+ Rebat::Selector.new(self).union *args
72
+ end
73
+
74
+ def intersect(*args)
75
+ Rebat::Selector.new(self).intersect *args
76
+ end
77
+
78
+ def exclude(*args)
79
+ Rebat::Selector.new(self).exclude *args
80
+ end
81
+ end
@@ -0,0 +1,54 @@
1
+ class Rebat::Selector
2
+ attr_reader :client
3
+
4
+ def initialize(client)
5
+ @client = client
6
+ @query_list = []
7
+ end
8
+
9
+ def where(from_entity_id, from_entity_type, to_entity_id, to_entity_type, relation_id)
10
+ @query_list << create_query(from_entity_id, from_entity_type, to_entity_id, to_entity_type, relation_id, Rebat::Thrift::QueryType::WHERE)
11
+ return self
12
+ end
13
+
14
+ def union(from_entity_id, from_entity_type, to_entity_id, to_entity_type, relation_id)
15
+ @query_list << create_query(from_entity_id, from_entity_type, to_entity_id, to_entity_type, relation_id, Rebat::Thrift::QueryType::UNION)
16
+ return self
17
+ end
18
+
19
+ def intersect(from_entity_id, from_entity_type, to_entity_id, to_entity_type, relation_id)
20
+ @query_list << create_query(from_entity_id, from_entity_type, to_entity_id, to_entity_type, relation_id, Rebat::Thrift::QueryType::INTERSECT)
21
+ return self
22
+ end
23
+
24
+ def exclude(from_entity_id, from_entity_type, to_entity_id, to_entity_type, relation_id)
25
+ @query_list << create_query(from_entity_id, from_entity_type, to_entity_id, to_entity_type, relation_id, Rebat::Thrift::QueryType::EXCLUDE)
26
+ return self
27
+ end
28
+
29
+ def entries
30
+ @client.send do |client|
31
+ return client.selectQuery(@query_list)
32
+ end
33
+ end
34
+
35
+ private
36
+ attr_reader :query_list
37
+
38
+ def create_query(from_entity_id, from_entity_type, to_entity_id, to_entity_type, relation_id, qtype)
39
+ edge = Rebat::Thrift::Edge.new
40
+
41
+ edge.fromEntityId = from_entity_id unless from_entity_id.nil?
42
+ edge.fromEntityType = from_entity_type unless from_entity_type.nil?
43
+ edge.toEntityId = to_entity_id unless to_entity_id.nil?
44
+ edge.toEntityType = to_entity_type unless to_entity_type.nil?
45
+ edge.relationId = relation_id
46
+
47
+ query = Rebat::Thrift::Query.new
48
+
49
+ query.edge = edge
50
+ query.qtype = qtype
51
+
52
+ return query
53
+ end
54
+ end
@@ -0,0 +1,12 @@
1
+ #
2
+ # Autogenerated by Thrift Compiler (0.8.0)
3
+ #
4
+ # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
5
+ #
6
+
7
+ require 'rebat_types'
8
+
9
+ module Rebat
10
+ module Thrift
11
+ end
12
+ end
@@ -0,0 +1,246 @@
1
+ #
2
+ # Autogenerated by Thrift Compiler (0.8.0)
3
+ #
4
+ # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
5
+ #
6
+
7
+ require 'thrift'
8
+ require 'rebat_types'
9
+
10
+ module Rebat
11
+ module Thrift
12
+ module RebatDB
13
+ class Client
14
+ include ::Thrift::Client
15
+
16
+ def addQuery(edge)
17
+ send_addQuery(edge)
18
+ return recv_addQuery()
19
+ end
20
+
21
+ def send_addQuery(edge)
22
+ send_message('addQuery', AddQuery_args, :edge => edge)
23
+ end
24
+
25
+ def recv_addQuery()
26
+ result = receive_message(AddQuery_result)
27
+ return result.success unless result.success.nil?
28
+ raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'addQuery failed: unknown result')
29
+ end
30
+
31
+ def deleteQuery(edge)
32
+ send_deleteQuery(edge)
33
+ return recv_deleteQuery()
34
+ end
35
+
36
+ def send_deleteQuery(edge)
37
+ send_message('deleteQuery', DeleteQuery_args, :edge => edge)
38
+ end
39
+
40
+ def recv_deleteQuery()
41
+ result = receive_message(DeleteQuery_result)
42
+ return result.success unless result.success.nil?
43
+ raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'deleteQuery failed: unknown result')
44
+ end
45
+
46
+ def updateWeightQuery(edge, weight)
47
+ send_updateWeightQuery(edge, weight)
48
+ return recv_updateWeightQuery()
49
+ end
50
+
51
+ def send_updateWeightQuery(edge, weight)
52
+ send_message('updateWeightQuery', UpdateWeightQuery_args, :edge => edge, :weight => weight)
53
+ end
54
+
55
+ def recv_updateWeightQuery()
56
+ result = receive_message(UpdateWeightQuery_result)
57
+ return result.success unless result.success.nil?
58
+ raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'updateWeightQuery failed: unknown result')
59
+ end
60
+
61
+ def selectQuery(queryList)
62
+ send_selectQuery(queryList)
63
+ return recv_selectQuery()
64
+ end
65
+
66
+ def send_selectQuery(queryList)
67
+ send_message('selectQuery', SelectQuery_args, :queryList => queryList)
68
+ end
69
+
70
+ def recv_selectQuery()
71
+ result = receive_message(SelectQuery_result)
72
+ return result.success unless result.success.nil?
73
+ raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'selectQuery failed: unknown result')
74
+ end
75
+
76
+ end
77
+
78
+ class Processor
79
+ include ::Thrift::Processor
80
+
81
+ def process_addQuery(seqid, iprot, oprot)
82
+ args = read_args(iprot, AddQuery_args)
83
+ result = AddQuery_result.new()
84
+ result.success = @handler.addQuery(args.edge)
85
+ write_result(result, oprot, 'addQuery', seqid)
86
+ end
87
+
88
+ def process_deleteQuery(seqid, iprot, oprot)
89
+ args = read_args(iprot, DeleteQuery_args)
90
+ result = DeleteQuery_result.new()
91
+ result.success = @handler.deleteQuery(args.edge)
92
+ write_result(result, oprot, 'deleteQuery', seqid)
93
+ end
94
+
95
+ def process_updateWeightQuery(seqid, iprot, oprot)
96
+ args = read_args(iprot, UpdateWeightQuery_args)
97
+ result = UpdateWeightQuery_result.new()
98
+ result.success = @handler.updateWeightQuery(args.edge, args.weight)
99
+ write_result(result, oprot, 'updateWeightQuery', seqid)
100
+ end
101
+
102
+ def process_selectQuery(seqid, iprot, oprot)
103
+ args = read_args(iprot, SelectQuery_args)
104
+ result = SelectQuery_result.new()
105
+ result.success = @handler.selectQuery(args.queryList)
106
+ write_result(result, oprot, 'selectQuery', seqid)
107
+ end
108
+
109
+ end
110
+
111
+ # HELPER FUNCTIONS AND STRUCTURES
112
+
113
+ class AddQuery_args
114
+ include ::Thrift::Struct, ::Thrift::Struct_Union
115
+ EDGE = 1
116
+
117
+ FIELDS = {
118
+ EDGE => {:type => ::Thrift::Types::STRUCT, :name => 'edge', :class => Rebat::Thrift::Edge}
119
+ }
120
+
121
+ def struct_fields; FIELDS; end
122
+
123
+ def validate
124
+ end
125
+
126
+ ::Thrift::Struct.generate_accessors self
127
+ end
128
+
129
+ class AddQuery_result
130
+ include ::Thrift::Struct, ::Thrift::Struct_Union
131
+ SUCCESS = 0
132
+
133
+ FIELDS = {
134
+ SUCCESS => {:type => ::Thrift::Types::BOOL, :name => 'success'}
135
+ }
136
+
137
+ def struct_fields; FIELDS; end
138
+
139
+ def validate
140
+ end
141
+
142
+ ::Thrift::Struct.generate_accessors self
143
+ end
144
+
145
+ class DeleteQuery_args
146
+ include ::Thrift::Struct, ::Thrift::Struct_Union
147
+ EDGE = 1
148
+
149
+ FIELDS = {
150
+ EDGE => {:type => ::Thrift::Types::STRUCT, :name => 'edge', :class => Rebat::Thrift::Edge}
151
+ }
152
+
153
+ def struct_fields; FIELDS; end
154
+
155
+ def validate
156
+ end
157
+
158
+ ::Thrift::Struct.generate_accessors self
159
+ end
160
+
161
+ class DeleteQuery_result
162
+ include ::Thrift::Struct, ::Thrift::Struct_Union
163
+ SUCCESS = 0
164
+
165
+ FIELDS = {
166
+ SUCCESS => {:type => ::Thrift::Types::BOOL, :name => 'success'}
167
+ }
168
+
169
+ def struct_fields; FIELDS; end
170
+
171
+ def validate
172
+ end
173
+
174
+ ::Thrift::Struct.generate_accessors self
175
+ end
176
+
177
+ class UpdateWeightQuery_args
178
+ include ::Thrift::Struct, ::Thrift::Struct_Union
179
+ EDGE = 1
180
+ WEIGHT = 2
181
+
182
+ FIELDS = {
183
+ EDGE => {:type => ::Thrift::Types::STRUCT, :name => 'edge', :class => Rebat::Thrift::Edge},
184
+ WEIGHT => {:type => ::Thrift::Types::I64, :name => 'weight'}
185
+ }
186
+
187
+ def struct_fields; FIELDS; end
188
+
189
+ def validate
190
+ end
191
+
192
+ ::Thrift::Struct.generate_accessors self
193
+ end
194
+
195
+ class UpdateWeightQuery_result
196
+ include ::Thrift::Struct, ::Thrift::Struct_Union
197
+ SUCCESS = 0
198
+
199
+ FIELDS = {
200
+ SUCCESS => {:type => ::Thrift::Types::BOOL, :name => 'success'}
201
+ }
202
+
203
+ def struct_fields; FIELDS; end
204
+
205
+ def validate
206
+ end
207
+
208
+ ::Thrift::Struct.generate_accessors self
209
+ end
210
+
211
+ class SelectQuery_args
212
+ include ::Thrift::Struct, ::Thrift::Struct_Union
213
+ QUERYLIST = 1
214
+
215
+ FIELDS = {
216
+ QUERYLIST => {:type => ::Thrift::Types::LIST, :name => 'queryList', :element => {:type => ::Thrift::Types::STRUCT, :class => Rebat::Thrift::Query}}
217
+ }
218
+
219
+ def struct_fields; FIELDS; end
220
+
221
+ def validate
222
+ end
223
+
224
+ ::Thrift::Struct.generate_accessors self
225
+ end
226
+
227
+ class SelectQuery_result
228
+ include ::Thrift::Struct, ::Thrift::Struct_Union
229
+ SUCCESS = 0
230
+
231
+ FIELDS = {
232
+ SUCCESS => {:type => ::Thrift::Types::LIST, :name => 'success', :element => {:type => ::Thrift::Types::STRUCT, :class => Rebat::Thrift::Edge}}
233
+ }
234
+
235
+ def struct_fields; FIELDS; end
236
+
237
+ def validate
238
+ end
239
+
240
+ ::Thrift::Struct.generate_accessors self
241
+ end
242
+
243
+ end
244
+
245
+ end
246
+ end
@@ -0,0 +1,68 @@
1
+ #
2
+ # Autogenerated by Thrift Compiler (0.8.0)
3
+ #
4
+ # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
5
+ #
6
+
7
+
8
+ module Rebat
9
+ module Thrift
10
+ module QueryType
11
+ WHERE = 0
12
+ INTERSECT = 1
13
+ UNION = 2
14
+ NOT = 3
15
+ VALUE_MAP = {0 => "WHERE", 1 => "INTERSECT", 2 => "UNION", 3 => "NOT"}
16
+ VALID_VALUES = Set.new([WHERE, INTERSECT, UNION, NOT]).freeze
17
+ end
18
+
19
+ class Edge
20
+ include ::Thrift::Struct, ::Thrift::Struct_Union
21
+ FROMENTITYID = 1
22
+ FROMENTITYTYPE = 2
23
+ TOENTITYID = 3
24
+ TOENTITYTYPE = 4
25
+ WEIGHT = 5
26
+ RELATIONID = 6
27
+
28
+ FIELDS = {
29
+ FROMENTITYID => {:type => ::Thrift::Types::I64, :name => 'fromEntityId', :optional => true},
30
+ FROMENTITYTYPE => {:type => ::Thrift::Types::STRING, :name => 'fromEntityType', :optional => true},
31
+ TOENTITYID => {:type => ::Thrift::Types::I64, :name => 'toEntityId', :optional => true},
32
+ TOENTITYTYPE => {:type => ::Thrift::Types::STRING, :name => 'toEntityType', :optional => true},
33
+ WEIGHT => {:type => ::Thrift::Types::I64, :name => 'weight', :default => 0, :optional => true},
34
+ RELATIONID => {:type => ::Thrift::Types::I64, :name => 'relationId', :optional => true}
35
+ }
36
+
37
+ def struct_fields; FIELDS; end
38
+
39
+ def validate
40
+ end
41
+
42
+ ::Thrift::Struct.generate_accessors self
43
+ end
44
+
45
+ class Query
46
+ include ::Thrift::Struct, ::Thrift::Struct_Union
47
+ EDGE = 1
48
+ QTYPE = 2
49
+
50
+ FIELDS = {
51
+ EDGE => {:type => ::Thrift::Types::STRUCT, :name => 'edge', :class => Rebat::Thrift::Edge},
52
+ QTYPE => {:type => ::Thrift::Types::I32, :name => 'qtype', :default => 0, :optional => true, :enum_class => Rebat::Thrift::QueryType}
53
+ }
54
+
55
+ def struct_fields; FIELDS; end
56
+
57
+ def validate
58
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field edge is unset!') unless @edge
59
+ unless @qtype.nil? || Rebat::Thrift::QueryType::VALID_VALUES.include?(@qtype)
60
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field qtype!')
61
+ end
62
+ end
63
+
64
+ ::Thrift::Struct.generate_accessors self
65
+ end
66
+
67
+ end
68
+ end
@@ -0,0 +1,3 @@
1
+ module Rebat
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/rebat/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Omar Mekky", "Khaled Gomaa"]
6
+ gem.email = ["omar.mekky@mashsolvents.com", "khaled.hassan@mashsolvents.com"]
7
+ gem.description = %q{Rebat DB driver for ruby }
8
+ gem.summary = %q{Rebat DB driver for ruby }
9
+ gem.homepage = ""
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "rebat"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Rebat::VERSION
17
+
18
+ gem.add_dependency 'thrift', '>= 0.8.0'
19
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rebat
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Omar Mekky
9
+ - Khaled Gomaa
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-09-16 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: thrift
17
+ requirement: &70286233997100 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: 0.8.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *70286233997100
26
+ description: ! 'Rebat DB driver for ruby '
27
+ email:
28
+ - omar.mekky@mashsolvents.com
29
+ - khaled.hassan@mashsolvents.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - .gitignore
35
+ - .rvmrc
36
+ - Gemfile
37
+ - LICENSE
38
+ - README.md
39
+ - Rakefile
40
+ - lib/rebat.rb
41
+ - lib/rebat/client.rb
42
+ - lib/rebat/selector.rb
43
+ - lib/rebat/thrift/rebat_constants.rb
44
+ - lib/rebat/thrift/rebat_d_b.rb
45
+ - lib/rebat/thrift/rebat_types.rb
46
+ - lib/rebat/version.rb
47
+ - rebat.gemspec
48
+ homepage: ''
49
+ licenses: []
50
+ post_install_message:
51
+ rdoc_options: []
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ! '>='
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements: []
67
+ rubyforge_project:
68
+ rubygems_version: 1.8.17
69
+ signing_key:
70
+ specification_version: 3
71
+ summary: Rebat DB driver for ruby
72
+ test_files: []