stark 0.5.0
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.
- data/.autotest +23 -0
- data/.gemtest +0 -0
- data/History.txt +6 -0
- data/Manifest.txt +31 -0
- data/README.txt +63 -0
- data/Rakefile +21 -0
- data/bin/stark +17 -0
- data/lib/stark/ast.rb +47 -0
- data/lib/stark/client.rb +63 -0
- data/lib/stark/converters.rb +29 -0
- data/lib/stark/field.rb +21 -0
- data/lib/stark/log_transport.rb +20 -0
- data/lib/stark/parser.rb +4 -0
- data/lib/stark/processor.rb +50 -0
- data/lib/stark/raw_parser.rb +4019 -0
- data/lib/stark/ruby.rb +468 -0
- data/lib/stark/struct.rb +26 -0
- data/lib/stark/thrift.kpeg +330 -0
- data/lib/stark.rb +37 -0
- data/stark.gemspec +40 -0
- data/test/ThriftSpec.thrift +183 -0
- data/test/gen-rb/profile_constants.rb +8 -0
- data/test/gen-rb/profile_types.rb +36 -0
- data/test/gen-rb/user_storage.rb +451 -0
- data/test/leg.rb +77 -0
- data/test/legacy_profile/profile_constants.rb +8 -0
- data/test/legacy_profile/profile_types.rb +36 -0
- data/test/legacy_profile/user_storage.rb +451 -0
- data/test/profile.thrift +24 -0
- data/test/test_client.rb +184 -0
- data/test/test_parser.rb +278 -0
- data/test/test_server.rb +175 -0
- metadata +134 -0
data/test/test_parser.rb
ADDED
@@ -0,0 +1,278 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'stark/parser'
|
3
|
+
|
4
|
+
class TestParser < Test::Unit::TestCase
|
5
|
+
def parse(data)
|
6
|
+
tg = Stark::Parser.new data
|
7
|
+
|
8
|
+
unless tg.parse
|
9
|
+
tg.raise_error
|
10
|
+
end
|
11
|
+
|
12
|
+
assert tg.result
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_ccomment
|
16
|
+
parse "/* blah */\n"
|
17
|
+
parse "/* blah */ /* foo */\n"
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_hcomment
|
21
|
+
parse "# blah\n"
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_const_value_in_struct
|
25
|
+
parse <<-EOM
|
26
|
+
struct Hello {
|
27
|
+
1: string greeting = "hello world"
|
28
|
+
}
|
29
|
+
EOM
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_enum
|
33
|
+
parse <<-EOM
|
34
|
+
enum SomeEnum {
|
35
|
+
ONE
|
36
|
+
TWO
|
37
|
+
}
|
38
|
+
EOM
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_list
|
42
|
+
parse <<-EOM
|
43
|
+
struct Foo {
|
44
|
+
1: list<i32> ints
|
45
|
+
}
|
46
|
+
EOM
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_list_with_value
|
50
|
+
parse <<-EOM
|
51
|
+
struct Foo {
|
52
|
+
1: list<i32> ints = [1, 2, 2, 3],
|
53
|
+
}
|
54
|
+
EOM
|
55
|
+
end
|
56
|
+
|
57
|
+
include Stark::Parser::AST
|
58
|
+
|
59
|
+
def comment(text)
|
60
|
+
Comment.new(text)
|
61
|
+
end
|
62
|
+
def field(index, type, name)
|
63
|
+
Field.new(index, type, name)
|
64
|
+
end
|
65
|
+
def function(name, return_type, arguments)
|
66
|
+
Function.new(name, return_type, arguments)
|
67
|
+
end
|
68
|
+
def include(path)
|
69
|
+
Include.new(path)
|
70
|
+
end
|
71
|
+
def namespace(lang, namespace)
|
72
|
+
Namespace.new(lang, namespace)
|
73
|
+
end
|
74
|
+
def service(name, functions)
|
75
|
+
Service.new(name, functions)
|
76
|
+
end
|
77
|
+
def struct(name, fields)
|
78
|
+
Struct.new(name, fields)
|
79
|
+
end
|
80
|
+
|
81
|
+
def list(t)
|
82
|
+
List.new(t)
|
83
|
+
end
|
84
|
+
|
85
|
+
def map(a,b)
|
86
|
+
Map.new(a,b)
|
87
|
+
end
|
88
|
+
|
89
|
+
def set(a)
|
90
|
+
Set.new(a)
|
91
|
+
end
|
92
|
+
|
93
|
+
def assert_type(exc, acc)
|
94
|
+
case exc
|
95
|
+
when List, Set
|
96
|
+
assert_type exc.value, acc.value
|
97
|
+
when Map
|
98
|
+
assert_type exc.key, acc.key
|
99
|
+
assert_type exc.value, acc.value
|
100
|
+
else
|
101
|
+
assert_equal exc, acc
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def assert_field(f, idx, type, name)
|
106
|
+
assert_equal idx, f.index
|
107
|
+
assert_equal name, f.name
|
108
|
+
assert_type type, f.type
|
109
|
+
end
|
110
|
+
|
111
|
+
def assert_func(f, ret_type, name, args)
|
112
|
+
assert_type ret_type, f.return_type
|
113
|
+
assert_equal name, f.name
|
114
|
+
|
115
|
+
return if !args and !f.arguments
|
116
|
+
|
117
|
+
args.zip(f.arguments).each do |exc, arg|
|
118
|
+
assert_equal exc[0], arg.index
|
119
|
+
assert_type exc[1], arg.type
|
120
|
+
assert_equal exc[2], arg.name
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_spec
|
125
|
+
data = File.read "test/ThriftSpec.thrift"
|
126
|
+
|
127
|
+
tg = Stark::Parser.new data
|
128
|
+
|
129
|
+
unless tg.parse
|
130
|
+
tg.raise_error
|
131
|
+
end
|
132
|
+
|
133
|
+
ary = tg.result
|
134
|
+
|
135
|
+
comments = ary.shift(19)
|
136
|
+
comments.each { |c| assert_kind_of Comment, c }
|
137
|
+
|
138
|
+
ns = ary.shift
|
139
|
+
|
140
|
+
assert_equal "rb", ns.lang
|
141
|
+
assert_equal "SpecNamespace", ns.namespace
|
142
|
+
|
143
|
+
ns = ary.shift
|
144
|
+
|
145
|
+
assert_equal "Hello", ns.name
|
146
|
+
assert_equal 1, ns.fields.size
|
147
|
+
f = ns.fields[0]
|
148
|
+
|
149
|
+
assert_equal 1, f.index
|
150
|
+
assert_equal "string", f.type
|
151
|
+
assert_equal "greeting", f.name
|
152
|
+
|
153
|
+
assert_equal "hello world", f.value.value
|
154
|
+
|
155
|
+
e = ary.shift
|
156
|
+
|
157
|
+
assert_equal ["ONE", "TWO"], e.values
|
158
|
+
|
159
|
+
s = ary.shift
|
160
|
+
|
161
|
+
assert_equal "StructWithSomeEnum", s.name
|
162
|
+
assert_equal 1, s.fields.size
|
163
|
+
f = s.fields.first
|
164
|
+
|
165
|
+
assert_equal 1, f.index
|
166
|
+
assert_equal "SomeEnum", f.type
|
167
|
+
assert_equal "some_enum", f.name
|
168
|
+
|
169
|
+
s = ary.shift
|
170
|
+
assert_equal :union, s.type
|
171
|
+
assert_equal "TestUnion", s.name
|
172
|
+
assert_equal 5, s.fields.size
|
173
|
+
|
174
|
+
fs = s.fields
|
175
|
+
|
176
|
+
assert_field fs[0], 1, "string", "string_field"
|
177
|
+
assert_field fs[1], 2, "i32", "i32_field"
|
178
|
+
assert_field fs[2], 3, "i32", "other_i32_field"
|
179
|
+
assert_field fs[3], 4, "SomeEnum", "enum_field"
|
180
|
+
assert_field fs[4], 5, "binary", "binary_field"
|
181
|
+
|
182
|
+
s = ary.shift
|
183
|
+
assert_equal "Foo", s.name
|
184
|
+
assert_equal 8, s.fields.size
|
185
|
+
|
186
|
+
f = s.fields
|
187
|
+
|
188
|
+
assert_field f[0], 1, "i32", "simple"
|
189
|
+
assert_field f[1], 2, "string", "words"
|
190
|
+
assert_equal "words", f[1].value.value
|
191
|
+
|
192
|
+
assert_field f[2], 3, "Hello", "hello"
|
193
|
+
assert_equal "greeting", f[2].value.values[0][0].value
|
194
|
+
assert_equal "hello, world!", f[2].value.values[0][1].value
|
195
|
+
|
196
|
+
assert_field f[3], 4, list("i32"), "ints"
|
197
|
+
ints = f[3].value.values.map { |i| i.value }
|
198
|
+
assert_equal [1, 2, 2, 3], ints
|
199
|
+
|
200
|
+
assert_field f[4], 5, map("i32", map("string", "double")), "complex"
|
201
|
+
|
202
|
+
assert_field f[5], 6, set("i16"), "shorts"
|
203
|
+
ints = f[5].value.values.map { |i| i.value }
|
204
|
+
assert_equal [5, 17, 239], ints
|
205
|
+
|
206
|
+
assert_field f[6], 7, "string", "opt_string"
|
207
|
+
assert_field f[7], 8, "bool", "my_bool"
|
208
|
+
|
209
|
+
assert_equal ["optional"], f[6].options
|
210
|
+
|
211
|
+
s = ary.shift
|
212
|
+
|
213
|
+
assert_equal "Foo2", s.name
|
214
|
+
assert_equal 1, s.fields.size
|
215
|
+
|
216
|
+
assert_field s.fields[0], 1, "binary", "my_binary"
|
217
|
+
|
218
|
+
s = ary.shift
|
219
|
+
assert_equal "BoolStruct", s.name
|
220
|
+
assert_equal 1, s.fields.size
|
221
|
+
|
222
|
+
assert_field s.fields[0], 1, "bool", "yesno"
|
223
|
+
assert_equal 1, s.fields[0].value.value
|
224
|
+
|
225
|
+
s = ary.shift
|
226
|
+
fs = s.fields
|
227
|
+
|
228
|
+
assert_field fs[0], 1, list("bool"), "bools"
|
229
|
+
assert_field fs[1], 2, list("byte"), "bytes"
|
230
|
+
assert_field fs[2], 3, list("i16"), "i16s"
|
231
|
+
assert_field fs[3], 4, list("i32"), "i32s"
|
232
|
+
assert_field fs[4], 5, list("i64"), "i64s"
|
233
|
+
assert_field fs[5], 6, list("double"), "doubles"
|
234
|
+
assert_field fs[6], 7, list("string"), "strings"
|
235
|
+
assert_field fs[7], 8, list(map("i16", "i16")), "maps"
|
236
|
+
assert_field fs[8], 9, list(list("i16")), "lists"
|
237
|
+
assert_field fs[9], 10, list(set("i16")), "sets"
|
238
|
+
assert_field fs[10], 11, list("Hello"), "hellos"
|
239
|
+
|
240
|
+
s = ary.shift
|
241
|
+
assert_equal "Xception", s.name
|
242
|
+
assert_field s.fields[0], 1, "string", "message"
|
243
|
+
assert_field s.fields[1], 2, "i32", "code"
|
244
|
+
assert_equal 1, s.fields[1].value.value
|
245
|
+
|
246
|
+
s = ary.shift
|
247
|
+
assert_equal "NonblockingService", s.name
|
248
|
+
fs = s.functions
|
249
|
+
|
250
|
+
assert_func fs[0], "Hello", "greeting", [[1, "bool", "english"]]
|
251
|
+
assert_func fs[1], "bool", "block", nil
|
252
|
+
assert_func fs[2], "void", "unblock", [[1, "i32", "n"]]
|
253
|
+
assert_func fs[3], "void", "shutdown", nil
|
254
|
+
assert_func fs[4], "void", "sleep", [[1, "double", "seconds"]]
|
255
|
+
|
256
|
+
s = ary.shift
|
257
|
+
assert_equal "My_union", s.name
|
258
|
+
fs = s.fields
|
259
|
+
assert_field fs[0], 1, "bool", "im_true"
|
260
|
+
assert_field fs[1], 2, "byte", "a_bite"
|
261
|
+
assert_field fs[2], 3, "i16", "integer16"
|
262
|
+
assert_field fs[3], 4, "i32", "integer32"
|
263
|
+
assert_field fs[4], 5, "i64", "integer64"
|
264
|
+
assert_field fs[5], 6, "double", "double_precision"
|
265
|
+
assert_field fs[6], 7, "string", "some_characters"
|
266
|
+
assert_field fs[7], 8, "i32", "other_i32"
|
267
|
+
assert_field fs[8], 9, "SomeEnum", "some_enum"
|
268
|
+
assert_field fs[9], 10, map("SomeEnum", list("SomeEnum")), "my_map"
|
269
|
+
|
270
|
+
s = ary.shift
|
271
|
+
assert_equal "Struct_with_union", s.name
|
272
|
+
fs = s.fields
|
273
|
+
|
274
|
+
assert_field fs[0], 1, "My_union", "fun_union"
|
275
|
+
assert_field fs[1], 2, "i32", "integer32"
|
276
|
+
assert_field fs[2], 3, "string", "some_characters"
|
277
|
+
end
|
278
|
+
end
|
data/test/test_server.rb
ADDED
@@ -0,0 +1,175 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
require 'stark'
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'thrift'
|
7
|
+
|
8
|
+
Thread.abort_on_exception = true
|
9
|
+
|
10
|
+
class TestServer < Test::Unit::TestCase
|
11
|
+
def setup
|
12
|
+
@client_t, @server_t = Stark.pipe_transport
|
13
|
+
@client_p = Thrift::BinaryProtocol.new @client_t
|
14
|
+
@server_p = Thrift::BinaryProtocol.new @server_t
|
15
|
+
|
16
|
+
@n = Module.new
|
17
|
+
Stark.materialize "test/profile.thrift", @n
|
18
|
+
|
19
|
+
@client = @n::UserStorage::Client.new @client_p, @client_p
|
20
|
+
@handler = Handler.new
|
21
|
+
@server = @n::UserStorage::Processor.new @handler
|
22
|
+
end
|
23
|
+
|
24
|
+
def teardown
|
25
|
+
@client_t.close
|
26
|
+
@server_t.close
|
27
|
+
end
|
28
|
+
|
29
|
+
class Handler
|
30
|
+
def initialize
|
31
|
+
@users = {}
|
32
|
+
@last_map = nil
|
33
|
+
@last_list = nil
|
34
|
+
@last_status = nil
|
35
|
+
end
|
36
|
+
|
37
|
+
attr_accessor :last_map, :last_list, :last_status
|
38
|
+
|
39
|
+
def store(obj)
|
40
|
+
@users[obj.uid] = obj
|
41
|
+
end
|
42
|
+
|
43
|
+
def retrieve(id)
|
44
|
+
@users[id]
|
45
|
+
end
|
46
|
+
|
47
|
+
def set_map(m)
|
48
|
+
@last_map = m
|
49
|
+
end
|
50
|
+
|
51
|
+
def set_list(l)
|
52
|
+
@last_list = l
|
53
|
+
end
|
54
|
+
|
55
|
+
def set_status(s)
|
56
|
+
@last_status = s
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_store_and_retrieve
|
61
|
+
st = Thread.new do
|
62
|
+
@server.process @server_p, @server_p
|
63
|
+
end
|
64
|
+
|
65
|
+
xuser = @n::UserProfile.new 'uid' => 0, 'name' => 'root', 'blurb' => 'god'
|
66
|
+
|
67
|
+
@client.store xuser
|
68
|
+
|
69
|
+
st.join
|
70
|
+
|
71
|
+
st = Thread.new do
|
72
|
+
@server.process @server_p, @server_p
|
73
|
+
end
|
74
|
+
|
75
|
+
obj = @client.retrieve 0
|
76
|
+
|
77
|
+
st.join
|
78
|
+
|
79
|
+
assert_equal 0, obj.uid
|
80
|
+
assert_equal "root", obj.name
|
81
|
+
assert_equal "god", obj.blurb
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_set_map
|
85
|
+
st = Thread.new do
|
86
|
+
@server.process @server_p, @server_p
|
87
|
+
end
|
88
|
+
|
89
|
+
m = { "blah" => "foo", "a" => "b" }
|
90
|
+
|
91
|
+
@client.set_map m
|
92
|
+
|
93
|
+
st.join
|
94
|
+
|
95
|
+
assert_equal "foo", @handler.last_map["blah"]
|
96
|
+
assert_equal "b", @handler.last_map["a"]
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_last_map
|
100
|
+
st = Thread.new do
|
101
|
+
@server.process @server_p, @server_p
|
102
|
+
end
|
103
|
+
|
104
|
+
@handler.last_map = { "blah" => "foo", "a" => "b" }
|
105
|
+
|
106
|
+
m = @client.last_map
|
107
|
+
|
108
|
+
st.join
|
109
|
+
|
110
|
+
assert_equal "foo", m["blah"]
|
111
|
+
assert_equal "b", m["a"]
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_set_list
|
115
|
+
st = Thread.new do
|
116
|
+
@server.process @server_p, @server_p
|
117
|
+
end
|
118
|
+
|
119
|
+
m = [ "blah", "foo", "a", "b" ]
|
120
|
+
|
121
|
+
@client.set_list m
|
122
|
+
|
123
|
+
st.join
|
124
|
+
|
125
|
+
assert_equal m, @handler.last_list
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_last_list
|
129
|
+
st = Thread.new do
|
130
|
+
@server.process @server_p, @server_p
|
131
|
+
end
|
132
|
+
|
133
|
+
l = [ "blah", "foo", "a", "b" ]
|
134
|
+
@handler.last_list = l
|
135
|
+
|
136
|
+
assert_equal l, @client.last_list
|
137
|
+
|
138
|
+
st.join
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_last_list_is_nil
|
142
|
+
st = Thread.new do
|
143
|
+
@server.process @server_p, @server_p
|
144
|
+
end
|
145
|
+
|
146
|
+
assert_equal [], @client.last_list
|
147
|
+
|
148
|
+
st.join
|
149
|
+
end
|
150
|
+
|
151
|
+
def test_enum
|
152
|
+
st = Thread.new do
|
153
|
+
@server.process @server_p, @server_p
|
154
|
+
end
|
155
|
+
|
156
|
+
@client.set_status :ON
|
157
|
+
|
158
|
+
st.join
|
159
|
+
|
160
|
+
assert_equal :ON, @handler.last_status
|
161
|
+
end
|
162
|
+
|
163
|
+
def test_enum_recv
|
164
|
+
st = Thread.new do
|
165
|
+
@server.process @server_p, @server_p
|
166
|
+
end
|
167
|
+
|
168
|
+
@handler.last_status = :ON
|
169
|
+
|
170
|
+
assert_equal :ON, @client.last_status
|
171
|
+
|
172
|
+
st.join
|
173
|
+
end
|
174
|
+
|
175
|
+
end
|
metadata
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stark
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Evan Phoenix
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-02-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: thrift
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.9.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.9.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rdoc
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '3.10'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '3.10'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: hoe
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.5'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.5'
|
62
|
+
description: Optimized thrift bindings for ruby
|
63
|
+
email:
|
64
|
+
- evan@phx.io
|
65
|
+
executables:
|
66
|
+
- stark
|
67
|
+
extensions: []
|
68
|
+
extra_rdoc_files:
|
69
|
+
- History.txt
|
70
|
+
- Manifest.txt
|
71
|
+
- README.txt
|
72
|
+
files:
|
73
|
+
- .autotest
|
74
|
+
- History.txt
|
75
|
+
- Manifest.txt
|
76
|
+
- README.txt
|
77
|
+
- Rakefile
|
78
|
+
- bin/stark
|
79
|
+
- lib/stark.rb
|
80
|
+
- lib/stark/ast.rb
|
81
|
+
- lib/stark/client.rb
|
82
|
+
- lib/stark/converters.rb
|
83
|
+
- lib/stark/field.rb
|
84
|
+
- lib/stark/log_transport.rb
|
85
|
+
- lib/stark/parser.rb
|
86
|
+
- lib/stark/processor.rb
|
87
|
+
- lib/stark/raw_parser.rb
|
88
|
+
- lib/stark/ruby.rb
|
89
|
+
- lib/stark/struct.rb
|
90
|
+
- lib/stark/thrift.kpeg
|
91
|
+
- stark.gemspec
|
92
|
+
- test/ThriftSpec.thrift
|
93
|
+
- test/gen-rb/profile_constants.rb
|
94
|
+
- test/gen-rb/profile_types.rb
|
95
|
+
- test/gen-rb/user_storage.rb
|
96
|
+
- test/leg.rb
|
97
|
+
- test/legacy_profile/profile_constants.rb
|
98
|
+
- test/legacy_profile/profile_types.rb
|
99
|
+
- test/legacy_profile/user_storage.rb
|
100
|
+
- test/profile.thrift
|
101
|
+
- test/test_client.rb
|
102
|
+
- test/test_parser.rb
|
103
|
+
- test/test_server.rb
|
104
|
+
- .gemtest
|
105
|
+
homepage: http://github.com/evanphx/stark
|
106
|
+
licenses: []
|
107
|
+
post_install_message:
|
108
|
+
rdoc_options:
|
109
|
+
- --main
|
110
|
+
- README.txt
|
111
|
+
require_paths:
|
112
|
+
- lib
|
113
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
|
+
none: false
|
121
|
+
requirements:
|
122
|
+
- - ! '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
requirements: []
|
126
|
+
rubyforge_project: stark
|
127
|
+
rubygems_version: 1.8.25
|
128
|
+
signing_key:
|
129
|
+
specification_version: 3
|
130
|
+
summary: Optimized thrift bindings for ruby
|
131
|
+
test_files:
|
132
|
+
- test/test_client.rb
|
133
|
+
- test/test_parser.rb
|
134
|
+
- test/test_server.rb
|