hyperdex 1.4.5.1.gc197953
Sign up to get free protection for your applications and to get access to all the features.
- data/ext/client.c +975 -0
- data/ext/definitions.c +1258 -0
- data/ext/depend +1 -0
- data/ext/extconf.rb +10 -0
- data/ext/hyperdex.c +42 -0
- data/ext/prototypes.c +163 -0
- data/lib/ffi/monkey_patches.rb +10 -0
- data/lib/hyperdex.rb +25 -0
- data/lib/hyperdex/admin.rb +4 -0
- data/lib/hyperdex/admin/client.rb +71 -0
- data/lib/hyperdex/admin/exception.rb +11 -0
- data/lib/hyperdex/client.rb +377 -0
- data/lib/hyperdex/client/client.rb +45 -0
- data/lib/hyperdex/client/deferred.rb +8 -0
- data/lib/hyperdex/client/hyperdex_client_exception.rb +9 -0
- data/lib/hyperdex/client/iterator.rb +30 -0
- data/lib/hyperdex/client/response.rb +70 -0
- data/lib/hyperdex/ffi.rb +5 -0
- data/lib/hyperdex/ffi/admin.rb +53 -0
- data/lib/hyperdex/ffi/client.rb +44 -0
- data/lib/hyperdex/ffi/ds.rb +82 -0
- metadata +281 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
class HyperDex::Client::Client
|
2
|
+
def initialize(host = 'localhost', port = 1982)
|
3
|
+
@client = ::FFI::AutoPointer.new(
|
4
|
+
HyperDex::FFI::Client.hyperdex_client_create(host, port),
|
5
|
+
proc { |p| HyperDex::FFI::Client.hyperdex_client_destroy(p) }
|
6
|
+
)
|
7
|
+
if @client.null?
|
8
|
+
raise SystemCallError,
|
9
|
+
"Could not create HyperDex::Client instance"
|
10
|
+
end
|
11
|
+
|
12
|
+
@ops = {}
|
13
|
+
end
|
14
|
+
|
15
|
+
def loop(timeout = -1)
|
16
|
+
rc = ::FFI::MemoryPointer.new(HyperDex::FFI::Client.enum_type(:hyperdex_client_returncode).native_type)
|
17
|
+
if (ret = HyperDex::FFI::Client.hyperdex_client_loop(@client, timeout, rc)) < 0
|
18
|
+
raise HyperDex::Client::HyperDexClientException.new(
|
19
|
+
rc.read_int32,
|
20
|
+
self.get_message
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
@ops[ret].tap { |op| op.callback }
|
25
|
+
end
|
26
|
+
|
27
|
+
def poll_fd
|
28
|
+
if fd = HyperDex::FFI::Client.hyperdex_client_poll(@client) < 0
|
29
|
+
raise HyperDex::Client::HyperDexClientException.new(
|
30
|
+
HyperDex::Client::EXCEPTION,
|
31
|
+
"CAN'T HAPPEN: hyperdex_client_poll failed!"
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
fd
|
36
|
+
end
|
37
|
+
|
38
|
+
def error_message
|
39
|
+
HyperDex::FFI::Client.hyperdex_client_error_message(@client).read_string
|
40
|
+
end
|
41
|
+
|
42
|
+
def delete_op(reqid)
|
43
|
+
@ops.delete(reqid)
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require_relative 'response'
|
2
|
+
|
3
|
+
class HyperDex::Client::Iterator < HyperDex::Client::Response
|
4
|
+
def initialize(c)
|
5
|
+
super
|
6
|
+
@backlog = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def callback
|
10
|
+
if status == HyperDex::Client::SEARCHDONE
|
11
|
+
super
|
12
|
+
elsif status == HyperDex::Client::SUCCESS
|
13
|
+
@backlog << encode_return
|
14
|
+
else
|
15
|
+
@backlog << HyperDex::Client::HyperDexClientException.new(
|
16
|
+
status, @client.error_message
|
17
|
+
)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def has_next?
|
22
|
+
@client.loop until @finished or !@backlog.empty?
|
23
|
+
!@backlog.empty?
|
24
|
+
end
|
25
|
+
alias_method :has_next, :has_next?
|
26
|
+
|
27
|
+
def next
|
28
|
+
@backlog.shift
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'ffi'
|
2
|
+
|
3
|
+
class HyperDex::Client::Response
|
4
|
+
def initialize(c)
|
5
|
+
@client = c
|
6
|
+
@reqid = nil
|
7
|
+
@finished = false
|
8
|
+
|
9
|
+
@status_ptr = ::FFI::MemoryPointer.new(:int)
|
10
|
+
@status_ptr.put_int32(0, HyperDex::Client::GARBAGE)
|
11
|
+
@status = false
|
12
|
+
|
13
|
+
@attrs_ptr = ::FFI::MemoryPointer.new(:pointer)
|
14
|
+
@attrs_ptr.put_pointer(0, ::FFI::Pointer::NULL)
|
15
|
+
@attrs_sz_ptr = ::FFI::MemoryPointer.new(:size_t)
|
16
|
+
@attrs_sz_ptr.put_int64(0, 0)
|
17
|
+
@attrs = false
|
18
|
+
|
19
|
+
@description_ptr = ::FFI::MemoryPointer.new(:pointer)
|
20
|
+
@description_ptr.put_pointer(0, ::FFI::Pointer::NULL)
|
21
|
+
@description = false
|
22
|
+
|
23
|
+
@count_ptr = ::FFI::MemoryPointer.new(:size_t)
|
24
|
+
@count_ptr.put_int64(0, 0)
|
25
|
+
@count = false
|
26
|
+
|
27
|
+
@arena_ptr = ::FFI::AutoPointer.new(
|
28
|
+
HyperDex::FFI::DS.arena_create(),
|
29
|
+
proc { |p| HyperDex::FFI::DS.arena_destroy(p) }
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
def callback
|
34
|
+
@finished = 1
|
35
|
+
@client.delete_op(@reqid)
|
36
|
+
end
|
37
|
+
|
38
|
+
def status
|
39
|
+
@status_ptr.read_int32
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
def encode_return
|
44
|
+
case status
|
45
|
+
when HyperDex::Client::SUCCESS
|
46
|
+
if @description
|
47
|
+
@description_ptr.read_string
|
48
|
+
elsif @count
|
49
|
+
@count_ptr.read_int64
|
50
|
+
elsif @attrs
|
51
|
+
ptr = @attrs_ptr.read_pointer
|
52
|
+
sz = @attrs_sz_ptr.read_int64
|
53
|
+
HyperDex::Client.encode_attributes(ptr, sz).tap do
|
54
|
+
HyperDex::FFI::Client.hyperdex_client_destroy_attrs(ptr, sz)
|
55
|
+
end
|
56
|
+
else
|
57
|
+
true
|
58
|
+
end
|
59
|
+
when HyperDex::Client::NOTFOUND
|
60
|
+
nil
|
61
|
+
when HyperDex::Client::CMPFAIL
|
62
|
+
false
|
63
|
+
else
|
64
|
+
raise HyperDex::Client::HyperDexClientException.new(
|
65
|
+
status,
|
66
|
+
@client.error_message
|
67
|
+
)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/hyperdex/ffi.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'ffi'
|
2
|
+
require 'ffi/enum_generator'
|
3
|
+
|
4
|
+
module HyperDex::FFI::Admin
|
5
|
+
extend ::FFI::Library
|
6
|
+
ffi_lib 'hyperdex-admin.so.0'
|
7
|
+
|
8
|
+
generate_enum :hyperdex_admin_returncode do |eg|
|
9
|
+
eg.include "hyperdex/admin.h"
|
10
|
+
|
11
|
+
%w{SUCCESS
|
12
|
+
|
13
|
+
NOMEM NONEPENDING POLLFAILED TIMEOUT INTERRUPTED SERVERERROR
|
14
|
+
COORDFAIL BADSPACE DUPLICATE NOTFOUND LOCALERROR
|
15
|
+
|
16
|
+
INTERNAL EXCEPTION GARBAGE
|
17
|
+
}.each do |suffix|
|
18
|
+
eg.symbol("HYPERDEX_ADMIN_#{suffix}", suffix)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
attach_function :create,
|
23
|
+
:hyperdex_admin_create,
|
24
|
+
[:pointer, :ushort],
|
25
|
+
:pointer
|
26
|
+
attach_function :destroy,
|
27
|
+
:hyperdex_admin_destroy,
|
28
|
+
[:pointer],
|
29
|
+
:void
|
30
|
+
|
31
|
+
attach_function :loop,
|
32
|
+
:hyperdex_admin_loop,
|
33
|
+
[:pointer, :int, :pointer],
|
34
|
+
:int64_t
|
35
|
+
|
36
|
+
attach_function :add_space,
|
37
|
+
:hyperdex_admin_add_space,
|
38
|
+
[:pointer, :pointer, :pointer],
|
39
|
+
:int64_t
|
40
|
+
attach_function :list_spaces,
|
41
|
+
:hyperdex_admin_list_spaces,
|
42
|
+
[:pointer, :pointer, :pointer],
|
43
|
+
:int64_t
|
44
|
+
attach_function :rm_space,
|
45
|
+
:hyperdex_admin_rm_space,
|
46
|
+
[:pointer, :pointer, :pointer],
|
47
|
+
:int64_t
|
48
|
+
|
49
|
+
attach_function :returncode_to_string,
|
50
|
+
:hyperdex_admin_returncode_to_string,
|
51
|
+
[:int],
|
52
|
+
:pointer
|
53
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'ffi'
|
2
|
+
require 'ffi/enum_generator'
|
3
|
+
|
4
|
+
module HyperDex::FFI::Client
|
5
|
+
extend ::FFI::Library
|
6
|
+
ffi_lib 'hyperdex-client.so.0'
|
7
|
+
|
8
|
+
generate_enum :hyperdex_client_returncode do |eg|
|
9
|
+
eg.include "hyperdex/client.h"
|
10
|
+
|
11
|
+
%w{SUCCESS NOTFOUND SEARCHDONE CMPFAIL READONLY
|
12
|
+
|
13
|
+
UNKNOWNSPACE COORDFAIL SERVERERROR POLLFAILED OVERFLOW
|
14
|
+
RECONFIGURE TIMEOUT UNKNOWNATTR DUPEATTR NONEPENDING DONTUSEKEY
|
15
|
+
WRONGTYPE NOMEM INTERRUPTED CLUSTER_JUMP OFFLINE
|
16
|
+
|
17
|
+
INTERNAL EXCEPTION GARBAGE}.each do |suffix|
|
18
|
+
eg.symbol("HYPERDEX_CLIENT_#{suffix}", suffix)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
attach_function :hyperdex_client_create,
|
23
|
+
[:pointer, :ushort],
|
24
|
+
:pointer
|
25
|
+
attach_function :hyperdex_client_destroy,
|
26
|
+
[:pointer],
|
27
|
+
:void
|
28
|
+
attach_function :hyperdex_client_destroy_attrs,
|
29
|
+
[:pointer, :size_t],
|
30
|
+
:void
|
31
|
+
|
32
|
+
attach_function :hyperdex_client_error_message,
|
33
|
+
[:pointer],
|
34
|
+
:pointer
|
35
|
+
attach_function :hyperdex_client_loop,
|
36
|
+
[:pointer, :int, :pointer],
|
37
|
+
:int64_t
|
38
|
+
attach_function :hyperdex_client_poll,
|
39
|
+
[:pointer],
|
40
|
+
:int
|
41
|
+
attach_function :hyperdex_client_returncode_to_string,
|
42
|
+
[:int],
|
43
|
+
:pointer
|
44
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'ffi'
|
2
|
+
require 'ffi/enum_generator'
|
3
|
+
|
4
|
+
module HyperDex::FFI::DS
|
5
|
+
extend ::FFI::Library
|
6
|
+
ffi_lib 'hyperdex-client.so.0'
|
7
|
+
|
8
|
+
generate_enum :hyperdatatype do |eg|
|
9
|
+
eg.include "hyperdex.h"
|
10
|
+
|
11
|
+
[nil, "LIST", "SET"].each do |container|
|
12
|
+
%w{GENERIC STRING INT64 FLOAT}.each do |type|
|
13
|
+
suffix = [container, type].compact.join('_')
|
14
|
+
eg.symbol("HYPERDATATYPE_#{suffix}", suffix)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
%w{STRING INT64 FLOAT}.each do |ktype|
|
19
|
+
%w{KEYONLY STRING INT64 FLOAT}.each do |vtype|
|
20
|
+
suffix = [ktype, vtype].join('_')
|
21
|
+
eg.symbol("HYPERDATATYPE_MAP_#{suffix}", "MAP_#{suffix}")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Speciality types
|
26
|
+
eg.symbol("HYPERDATATYPE_DOCUMENT", "DOCUMENT")
|
27
|
+
eg.symbol("HYPERDATATYPE_MAP_GENERIC", "MAP_GENERIC")
|
28
|
+
eg.symbol("HYPERDATATYPE_GARBAGE", "GARBAGE")
|
29
|
+
end
|
30
|
+
|
31
|
+
class DsIterator < ::FFI::Struct
|
32
|
+
layout :datatype, :hyperdatatype,
|
33
|
+
:value, :pointer,
|
34
|
+
:value_end, :pointer,
|
35
|
+
:progress, :pointer
|
36
|
+
end
|
37
|
+
|
38
|
+
attach_function :arena_create,
|
39
|
+
:hyperdex_ds_arena_create,
|
40
|
+
[],
|
41
|
+
:pointer
|
42
|
+
attach_function :arena_destroy,
|
43
|
+
:hyperdex_ds_arena_destroy,
|
44
|
+
[:pointer],
|
45
|
+
:void
|
46
|
+
|
47
|
+
attach_function :iterator_init,
|
48
|
+
:hyperdex_ds_iterator_init,
|
49
|
+
[:pointer, :hyperdatatype, :pointer, :size_t],
|
50
|
+
:void
|
51
|
+
|
52
|
+
%w{list set}.each do |dtype|
|
53
|
+
%w{string int float}.each do |vtype|
|
54
|
+
attach_function "iterate_#{dtype}_#{vtype}_next",
|
55
|
+
"hyperdex_ds_iterate_#{dtype}_#{vtype}_next",
|
56
|
+
Array.new(vtype == "string" ? 3 : 2, :pointer),
|
57
|
+
:int
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
%w{int string float}.each do |v1|
|
62
|
+
%w{int string float}.each do |v2|
|
63
|
+
arg_count = 1 + # iterator
|
64
|
+
(v1 == "string" ? 2 : 1) +
|
65
|
+
(v2 == "string" ? 2 : 1)
|
66
|
+
|
67
|
+
attach_function "iterate_map_#{v1}_#{v2}_next",
|
68
|
+
"hyperdex_ds_iterate_map_#{v1}_#{v2}_next",
|
69
|
+
Array.new(arg_count, :pointer),
|
70
|
+
:int
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
attach_function :unpack_int,
|
75
|
+
:hyperdex_ds_unpack_int,
|
76
|
+
[:pointer, :size_t, :pointer],
|
77
|
+
:int
|
78
|
+
attach_function :unpack_float,
|
79
|
+
:hyperdex_ds_unpack_float,
|
80
|
+
[:pointer, :size_t, :pointer],
|
81
|
+
:int
|
82
|
+
end
|
metadata
ADDED
@@ -0,0 +1,281 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hyperdex
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.4.5.1.gc197953
|
5
|
+
prerelease: 8
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Matt Palmer
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-10-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: ffi-enum-generator
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: ffi
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: git-version-bump
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: bundler
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: github-release
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: guard-shell
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: guard-spork
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: guard-rspec
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: rb-inotify
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ~>
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0.9'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ~>
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0.9'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: pry-debugger
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: rake
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
type: :development
|
183
|
+
prerelease: false
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
- !ruby/object:Gem::Dependency
|
191
|
+
name: yard
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
194
|
+
requirements:
|
195
|
+
- - ! '>='
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: '0'
|
198
|
+
type: :development
|
199
|
+
prerelease: false
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ! '>='
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
206
|
+
- !ruby/object:Gem::Dependency
|
207
|
+
name: rspec
|
208
|
+
requirement: !ruby/object:Gem::Requirement
|
209
|
+
none: false
|
210
|
+
requirements:
|
211
|
+
- - ! '>='
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: '0'
|
214
|
+
type: :development
|
215
|
+
prerelease: false
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
218
|
+
requirements:
|
219
|
+
- - ! '>='
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: '0'
|
222
|
+
description:
|
223
|
+
email:
|
224
|
+
- mpalmer@hezmatt.org
|
225
|
+
executables: []
|
226
|
+
extensions:
|
227
|
+
- ext/extconf.rb
|
228
|
+
extra_rdoc_files: []
|
229
|
+
files:
|
230
|
+
- ext/client.c
|
231
|
+
- ext/definitions.c
|
232
|
+
- ext/depend
|
233
|
+
- ext/extconf.rb
|
234
|
+
- ext/hyperdex.c
|
235
|
+
- ext/prototypes.c
|
236
|
+
- lib/ffi/monkey_patches.rb
|
237
|
+
- lib/hyperdex.rb
|
238
|
+
- lib/hyperdex/admin.rb
|
239
|
+
- lib/hyperdex/admin/client.rb
|
240
|
+
- lib/hyperdex/admin/exception.rb
|
241
|
+
- lib/hyperdex/client.rb
|
242
|
+
- lib/hyperdex/client/client.rb
|
243
|
+
- lib/hyperdex/client/deferred.rb
|
244
|
+
- lib/hyperdex/client/hyperdex_client_exception.rb
|
245
|
+
- lib/hyperdex/client/iterator.rb
|
246
|
+
- lib/hyperdex/client/response.rb
|
247
|
+
- lib/hyperdex/ffi.rb
|
248
|
+
- lib/hyperdex/ffi/admin.rb
|
249
|
+
- lib/hyperdex/ffi/client.rb
|
250
|
+
- lib/hyperdex/ffi/ds.rb
|
251
|
+
homepage: http://theshed.hezmatt.org/hyperdex-ruby
|
252
|
+
licenses:
|
253
|
+
- GPLv3
|
254
|
+
post_install_message:
|
255
|
+
rdoc_options: []
|
256
|
+
require_paths:
|
257
|
+
- ext
|
258
|
+
- lib
|
259
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
260
|
+
none: false
|
261
|
+
requirements:
|
262
|
+
- - ! '>='
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '0'
|
265
|
+
segments:
|
266
|
+
- 0
|
267
|
+
hash: 1127584900343292431
|
268
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
269
|
+
none: false
|
270
|
+
requirements:
|
271
|
+
- - ! '>'
|
272
|
+
- !ruby/object:Gem::Version
|
273
|
+
version: 1.3.1
|
274
|
+
requirements: []
|
275
|
+
rubyforge_project:
|
276
|
+
rubygems_version: 1.8.23
|
277
|
+
signing_key:
|
278
|
+
specification_version: 3
|
279
|
+
summary: Hyperdex client bindings
|
280
|
+
test_files: []
|
281
|
+
has_rdoc:
|