wabur 0.6.2 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +106 -15
- data/bin/wabur +6 -0
- data/export/assets/js/ui.js +18 -0
- data/lib/wab.rb +7 -1
- data/lib/wab/client.rb +145 -0
- data/lib/wab/controller.rb +1 -1
- data/lib/wab/errors.rb +6 -0
- data/lib/wab/impl.rb +1 -1
- data/lib/wab/impl/agoo.rb +18 -0
- data/lib/wab/impl/agoo/export_proxy.rb +55 -0
- data/lib/wab/impl/agoo/handler.rb +51 -0
- data/lib/wab/impl/agoo/sender.rb +50 -0
- data/lib/wab/impl/agoo/server.rb +59 -0
- data/lib/wab/impl/agoo/tql_handler.rb +35 -0
- data/lib/wab/impl/model.rb +8 -1
- data/lib/wab/impl/rack_error.rb +27 -0
- data/lib/wab/impl/rack_handler.rb +69 -0
- data/lib/wab/impl/shell.rb +56 -51
- data/lib/wab/impl/sinatra.rb +18 -0
- data/lib/wab/impl/sinatra/export_proxy.rb +57 -0
- data/lib/wab/impl/sinatra/handler.rb +50 -0
- data/lib/wab/impl/sinatra/sender.rb +53 -0
- data/lib/wab/impl/sinatra/server.rb +66 -0
- data/lib/wab/impl/sinatra/tql_handler.rb +35 -0
- data/lib/wab/impl/templates/wabur.conf.template +1 -1
- data/lib/wab/impl/webrick.rb +18 -0
- data/lib/wab/impl/webrick/export_proxy.rb +41 -0
- data/lib/wab/impl/webrick/handler.rb +116 -0
- data/lib/wab/impl/webrick/sender.rb +34 -0
- data/lib/wab/impl/webrick/server.rb +39 -0
- data/lib/wab/impl/webrick/tql_handler.rb +58 -0
- data/lib/wab/racker.rb +25 -0
- data/lib/wab/version.rb +1 -1
- data/pages/Architecture.md +15 -6
- data/test/test_client.rb +282 -0
- data/test/test_impl.rb +2 -0
- data/test/test_runner.rb +267 -91
- metadata +27 -5
- data/lib/wab/impl/export_proxy.rb +0 -39
- data/lib/wab/impl/handler.rb +0 -98
data/test/test_impl.rb
CHANGED
data/test/test_runner.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# encoding: UTF-8
|
3
2
|
|
4
3
|
require_relative 'helper'
|
5
4
|
|
@@ -13,12 +12,15 @@ require 'wab/io'
|
|
13
12
|
# This is to verify that WAB-Runners behave as expected.
|
14
13
|
#
|
15
14
|
# Requirements:
|
16
|
-
# -
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
15
|
+
# - A Runner such as wabur or opo-rub.
|
16
|
+
# - The Runner should be started with the MirrorController class in
|
17
|
+
# mirror_controller.rb
|
18
|
+
# - The configuration files for the wabur and opo-rub Runners are in the
|
19
|
+
# runner directory.
|
20
20
|
#
|
21
|
-
#
|
21
|
+
# Start the runner using local code (in a separate terminal):
|
22
|
+
# ../bin/wabur -I ../lib -I . -c runner/wabur.conf
|
23
|
+
# Run the test:
|
22
24
|
# runner_test.rb localhost:6363
|
23
25
|
# -----------------------------------------------------------------------------
|
24
26
|
|
@@ -29,60 +31,198 @@ $port = $port.to_i
|
|
29
31
|
|
30
32
|
class TestRunner < Minitest::Test
|
31
33
|
|
34
|
+
def setup
|
35
|
+
@client = WAB::Client.new($host, $port)
|
36
|
+
# Delete all records to start with a clean database
|
37
|
+
clear_records(@client)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_runner_static
|
41
|
+
puts "\n --- static content" if $VERBOSE
|
42
|
+
uri = URI("http://#{$host}:#{$port}/hello.txt")
|
43
|
+
req = Net::HTTP::Get.new(uri)
|
44
|
+
req['Connection'] = 'Close'
|
45
|
+
resp = Net::HTTP.start(uri.hostname, uri.port) { |h|
|
46
|
+
h.request(req)
|
47
|
+
}
|
48
|
+
assert_equal(Net::HTTPOK, resp.class)
|
49
|
+
assert_equal("Hello\n", resp.body)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_runner_export
|
53
|
+
puts "\n --- export" if $VERBOSE
|
54
|
+
uri = URI("http://#{$host}:#{$port}/index.html")
|
55
|
+
req = Net::HTTP::Get.new(uri)
|
56
|
+
req['Connection'] = 'Close'
|
57
|
+
resp = Net::HTTP.start(uri.hostname, uri.port) { |h|
|
58
|
+
h.request(req)
|
59
|
+
}
|
60
|
+
assert_equal(Net::HTTPOK, resp.class)
|
61
|
+
end
|
62
|
+
|
32
63
|
# The Runner or rather it's storage is stateful so all steps in the test
|
33
64
|
# must be made in order to keep the test self contained. Each step is a
|
34
65
|
# separate function though.
|
35
|
-
def
|
36
|
-
|
66
|
+
def test_runner_using_refs
|
67
|
+
ref = create_records(@client)
|
68
|
+
get_record(@client, ref)
|
69
|
+
update_record(@client, ref)
|
70
|
+
delete_record(@client, ref)
|
71
|
+
end
|
37
72
|
|
38
|
-
|
39
|
-
|
40
|
-
ref = create_record(http)
|
41
|
-
read_record(http, ref)
|
42
|
-
list_records(http, ref)
|
73
|
+
def test_runner_using_queries
|
74
|
+
ref = create_records(@client)
|
43
75
|
|
44
|
-
|
45
|
-
|
76
|
+
read_record(@client, ref)
|
77
|
+
list_records(@client)
|
78
|
+
query_records(@client)
|
79
|
+
update_query(@client)
|
80
|
+
delete_query(@client)
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_runner_missing
|
84
|
+
create_records(@client)
|
46
85
|
|
47
|
-
|
48
|
-
|
86
|
+
puts " --- read missing" if $VERBOSE
|
87
|
+
result = @client.read('Article', {title: 'Missing'})
|
88
|
+
check_result_code(result)
|
89
|
+
assert_equal(0, result[:results].length, 'read results should be empty')
|
90
|
+
|
91
|
+
puts " --- update missing" if $VERBOSE
|
92
|
+
result = @client.update('Article', {kind: 'Article'}, {title: 'Missing'})
|
93
|
+
check_result_code(result)
|
94
|
+
assert_equal(0, result[:updated].length, 'updated should be empty')
|
95
|
+
|
96
|
+
puts " --- delete missing" if $VERBOSE
|
97
|
+
result = @client.delete('Article', {title: 'Missing'})
|
98
|
+
check_result_code(result)
|
99
|
+
assert_equal(0, result[:deleted].length, 'deleted should be empty')
|
49
100
|
end
|
50
101
|
|
51
|
-
def
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
102
|
+
def test_runner_duplicate
|
103
|
+
create_records(@client)
|
104
|
+
|
105
|
+
assert_raises('should fail to create an unsupported kind') {
|
106
|
+
@client.create({
|
107
|
+
kind: 'Article',
|
108
|
+
title: 'Sample',
|
109
|
+
text: 'Different.'}, {title: 'Sample'})
|
110
|
+
}
|
56
111
|
end
|
57
112
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
"
|
64
|
-
}
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
113
|
+
def test_runner_multi_match
|
114
|
+
# create records twice so there are duplicates
|
115
|
+
create_records(@client)
|
116
|
+
create_records(@client)
|
117
|
+
|
118
|
+
puts " --- delete multi" if $VERBOSE
|
119
|
+
result = @client.delete('Article', {title: 'Second'})
|
120
|
+
check_result_code(result)
|
121
|
+
assert_equal(2, result[:deleted].length, 'delete reply.deleted should contain exactly two member')
|
122
|
+
|
123
|
+
result = @client.read('Article')
|
124
|
+
check_result_code(result)
|
125
|
+
assert_equal(4, result[:results].length, 'read reply.results should contain all member')
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_runner_query
|
129
|
+
10.times { |i|
|
130
|
+
@client.create({kind: 'Article', title: "Article-#{i}", num: i})
|
131
|
+
}
|
132
|
+
|
133
|
+
check_query(@client, {where: ['EQ', 'num', 3], select: 'title'}, ['Article-3'])
|
134
|
+
check_query(@client, {where: ['EQ', 'title', 'Article-4'], select: 'title'}, ['Article-4'])
|
135
|
+
|
136
|
+
check_query(@client, {where: ['LT', 'num', 3], select: 'title'}, ['Article-0','Article-1','Article-2'])
|
137
|
+
check_query(@client, {where: ['LTE', 'num', 2], select: 'title'}, ['Article-0','Article-1','Article-2'])
|
138
|
+
|
139
|
+
check_query(@client, {where: ['GT', 'num', 7], select: 'title'}, ['Article-8','Article-9'])
|
140
|
+
check_query(@client, {where: ['GTE', 'num', 7], select: 'title'}, ['Article-7','Article-8','Article-9'])
|
141
|
+
|
142
|
+
check_query(@client, {where: ['BETWEEN', 'num', 5, 7], select: 'title'}, ['Article-5','Article-6','Article-7'])
|
143
|
+
check_query(@client, {where: ['BETWEEN', 'num', 5, 7, false, false], select: 'title'}, ['Article-6'])
|
144
|
+
check_query(@client, {where: ['BETWEEN', 'num', 5, 7, false, true], select: 'title'}, ['Article-6','Article-7'])
|
145
|
+
check_query(@client, {where: ['BETWEEN', 'num', 5, 7, true, false], select: 'title'}, ['Article-5','Article-6'])
|
146
|
+
|
147
|
+
check_query(@client, {where: ['IN', 'num', 1, 3, 5, 7], select: 'title'}, ['Article-1','Article-3','Article-5','Article-7'])
|
148
|
+
|
149
|
+
check_query(@client, {where: ['OR', ['LT', 'num', 2], ['GT', 'num', 7]], select: 'title'}, ['Article-0','Article-1','Article-8','Article-9'])
|
150
|
+
check_query(@client, {where: ['EQ', 'kind', 'Article'], filter: ['NOT', ['BETWEEN', 'num', 2, 7]], select: 'num'}, [0, 1, 8, 9])
|
151
|
+
|
152
|
+
check_query(@client, {where: ['eq', 'kind', 'Article'], filter: ['eq', 'title', 'Article-3'], select: 'num'}, [3])
|
153
|
+
check_query(@client, {where: ['eq', 'kind', 'Article'], filter: ['regex', 'title', 'A.*-[3,4,5]'], select: 'num'}, [3, 4, 5])
|
154
|
+
|
155
|
+
check_query(@client, {where: ['and', ['LT', 'num', 5], ['GT', 'num', 2]], select: 'num'}, [3, 4])
|
156
|
+
|
157
|
+
check_query(@client, {where: ['and', ['LT', 'num', 5], ['or', ['eq', 'num', 0], ['GT', 'num', 2]]], select: 'num'}, [0, 3, 4])
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_runner_rack
|
161
|
+
puts "\n --- calling rack" if $VERBOSE
|
162
|
+
uri = URI("http://#{$host}:#{$port}/rack/hello")
|
163
|
+
req = Net::HTTP::Post.new(uri)
|
164
|
+
req['Accept-Encoding'] = '*'
|
165
|
+
req['Accept'] = 'application/json'
|
166
|
+
req['User-Agent'] = 'Ruby'
|
167
|
+
req['Connection'] = 'Close'
|
168
|
+
req.body = 'hello'
|
169
|
+
resp = Net::HTTP.start(uri.hostname, uri.port) { |h|
|
170
|
+
h.request(req)
|
171
|
+
}
|
172
|
+
assert_equal(Net::HTTPOK, resp.class)
|
173
|
+
assert_equal('A WABuR Rack Application', resp.body)
|
174
|
+
end
|
175
|
+
|
176
|
+
def check_query(client, query, expect)
|
177
|
+
puts " --- query #{query}" if $VERBOSE
|
178
|
+
result = client.find(query)
|
179
|
+
check_result_code(result)
|
180
|
+
assert_equal(expect, result[:results].sort, 'result mistmatch')
|
181
|
+
end
|
182
|
+
|
183
|
+
def check_result_code(result)
|
184
|
+
assert_equal(0, result[:code], 'result.code should be 0 meaning no error')
|
185
|
+
end
|
69
186
|
|
187
|
+
def clear_records(client)
|
188
|
+
puts "\n --- deleting existing records" if $VERBOSE
|
189
|
+
result = client.delete('Article')
|
190
|
+
check_result_code(result)
|
191
|
+
end
|
192
|
+
|
193
|
+
# Returns the reference of the created record.
|
194
|
+
def create_records(client)
|
195
|
+
puts " --- create records" if $VERBOSE
|
196
|
+
record = {
|
197
|
+
kind: 'Article',
|
198
|
+
title: 'Sample',
|
199
|
+
text: 'Just some random text.'
|
200
|
+
}
|
201
|
+
result = client.create(record)
|
70
202
|
# Make sure the message has the correct fields and values.
|
71
|
-
|
72
|
-
ref =
|
203
|
+
check_result_code(result)
|
204
|
+
ref = result[:ref]
|
73
205
|
refute_equal(nil, ref, 'create reply record reference can not be nil')
|
74
206
|
refute_equal(0, ref, 'create reply record reference can not be 0')
|
207
|
+
|
208
|
+
# create a couple more records
|
209
|
+
client.create({
|
210
|
+
kind: 'Article',
|
211
|
+
title: 'Second',
|
212
|
+
text: 'More random text.'})
|
213
|
+
client.create({
|
214
|
+
kind: 'Article',
|
215
|
+
title: 'Third',
|
216
|
+
text: 'Even more random text.'})
|
75
217
|
ref
|
76
218
|
end
|
77
219
|
|
78
|
-
def
|
79
|
-
|
80
|
-
|
81
|
-
reply = Oj.strict_load(resp.body, symbol_keys: true)
|
82
|
-
|
220
|
+
def get_record(client, ref)
|
221
|
+
puts " --- get record" if $VERBOSE
|
222
|
+
result = client.read('Article', ref)
|
83
223
|
# Make sure the message has the correct fields and values.
|
84
|
-
|
85
|
-
results =
|
224
|
+
check_result_code(result)
|
225
|
+
results = result[:results]
|
86
226
|
assert_equal(1, results.length, 'read reply.results should contain exactly one member')
|
87
227
|
record = results[0]
|
88
228
|
assert_equal(ref, record[:id], 'read reply.results[0].id should match the record reference')
|
@@ -91,14 +231,12 @@ class TestRunner < Minitest::Test
|
|
91
231
|
assert_equal('Sample', obj[:title], 'read reply obj.title incorrect')
|
92
232
|
end
|
93
233
|
|
94
|
-
def
|
95
|
-
|
96
|
-
|
97
|
-
reply = Oj.strict_load(resp.body, symbol_keys: true)
|
98
|
-
|
234
|
+
def read_record(client, ref)
|
235
|
+
puts " --- read record" if $VERBOSE
|
236
|
+
result = client.read('Article', {title: 'Sample'})
|
99
237
|
# Make sure the message has the correct fields and values.
|
100
|
-
|
101
|
-
results =
|
238
|
+
check_result_code(result)
|
239
|
+
results = result[:results]
|
102
240
|
assert_equal(1, results.length, 'read reply.results should contain exactly one member')
|
103
241
|
record = results[0]
|
104
242
|
assert_equal(ref, record[:id], 'read reply.results[0].id should match the record reference')
|
@@ -107,71 +245,109 @@ class TestRunner < Minitest::Test
|
|
107
245
|
assert_equal('Sample', obj[:title], 'read reply obj.title incorrect')
|
108
246
|
end
|
109
247
|
|
248
|
+
def list_records(client)
|
249
|
+
puts " --- list records" if $VERBOSE
|
250
|
+
result = client.read('Article')
|
251
|
+
# Make sure the message has the correct fields and values.
|
252
|
+
check_result_code(result)
|
253
|
+
results = result[:results]
|
254
|
+
assert_equal(3, results.length, 'read reply.results should contain all member')
|
255
|
+
end
|
256
|
+
|
110
257
|
# Returns the reference of the updated record. There is no requirement that
|
111
258
|
# the reference will not change.
|
112
|
-
def update_record(
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
assert_equal(Net::HTTPOK, resp.class, 'response not an OK')
|
121
|
-
reply = Oj.strict_load(resp.body, symbol_keys: true)
|
122
|
-
|
259
|
+
def update_record(client, ref)
|
260
|
+
puts " --- update record" if $VERBOSE
|
261
|
+
record = {
|
262
|
+
kind: 'Article',
|
263
|
+
title: 'Sample',
|
264
|
+
text: 'Updated text.'
|
265
|
+
}
|
266
|
+
result = client.update('Article', record, ref)
|
123
267
|
# Make sure the message has the correct fields and values.
|
124
|
-
|
125
|
-
updated =
|
268
|
+
check_result_code(result)
|
269
|
+
updated = result[:updated]
|
126
270
|
assert_equal(1, updated.length, 'update reply.updated should contain exactly one member')
|
127
271
|
ref = updated[0]
|
128
272
|
refute_equal(nil, ref, 'update reply record reference can not be nil')
|
129
273
|
refute_equal(0, ref, 'update reply record reference can not be 0')
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
resp = http.send_request('GET', "/v1/Article/#{ref}")
|
135
|
-
assert_equal(Net::HTTPOK, resp.class, 'response not an OK')
|
136
|
-
reply = Oj.strict_load(resp.body, symbol_keys: true)
|
137
|
-
|
138
|
-
assert_equal(0, reply[:code], 'read after update reply.code should be 0 meaning no error')
|
139
|
-
results = reply[:results]
|
274
|
+
# verify
|
275
|
+
result = client.read('Article', ref)
|
276
|
+
check_result_code(result)
|
277
|
+
results = result[:results]
|
140
278
|
assert_equal(1, results.length, 'read after update reply.results should contain exactly one member')
|
141
279
|
record = results[0]
|
142
280
|
assert_equal(ref, record[:id], 'read after update reply.results[0].id should match the record reference')
|
143
281
|
obj = record[:data]
|
144
282
|
assert_equal('Updated text.', obj[:text], 'read after update reply obj.text incorrect')
|
283
|
+
ref
|
145
284
|
end
|
146
285
|
|
147
|
-
def delete_record(
|
148
|
-
|
149
|
-
|
150
|
-
assert_equal(Net::HTTPOK, resp.class, 'response not an OK')
|
151
|
-
reply = Oj.strict_load(resp.body, symbol_keys: true)
|
152
|
-
|
286
|
+
def delete_record(client, ref)
|
287
|
+
puts " --- delete record" if $VERBOSE
|
288
|
+
result = client.delete('Article', ref)
|
153
289
|
# Make sure the message has the correct fields and values.
|
154
|
-
|
155
|
-
deleted =
|
290
|
+
check_result_code(result)
|
291
|
+
deleted = result[:deleted]
|
156
292
|
assert_equal(1, deleted.length, 'delete reply.deleted should contain exactly one member')
|
157
293
|
ref = deleted[0]
|
158
294
|
refute_equal(nil, ref, 'delete reply record reference can not be nil')
|
159
295
|
refute_equal(0, ref, 'delete reply record reference can not be 0')
|
296
|
+
# verify
|
297
|
+
result = client.read('Article', ref)
|
298
|
+
check_result_code(result)
|
299
|
+
results = result[:results]
|
300
|
+
assert_equal(0, results.length, 'read after delete reply.results should contain no members')
|
160
301
|
end
|
161
302
|
|
162
|
-
def
|
163
|
-
|
164
|
-
|
165
|
-
|
303
|
+
def query_records(client)
|
304
|
+
puts " --- query records" if $VERBOSE
|
305
|
+
result = client.read('Article', {title: 'Second'})
|
306
|
+
check_result_code(result)
|
307
|
+
results = result[:results]
|
308
|
+
assert_equal(1, results.length, 'read reply.results should contain matching members')
|
309
|
+
assert_equal({kind: 'Article', title: 'Second', text: 'More random text.'}, results[0][:data], 'first result should match the inserted')
|
310
|
+
end
|
166
311
|
|
167
|
-
|
168
|
-
|
169
|
-
|
312
|
+
def update_query(client)
|
313
|
+
puts " --- update query" if $VERBOSE
|
314
|
+
record = {
|
315
|
+
kind: 'Article',
|
316
|
+
title: 'Sample',
|
317
|
+
text: 'Updated text.'
|
318
|
+
}
|
319
|
+
result = client.update('Article', record, {title: 'Sample'})
|
320
|
+
# Make sure the message has the correct fields and values.
|
321
|
+
check_result_code(result)
|
322
|
+
updated = result[:updated]
|
323
|
+
assert_equal(1, updated.length, 'update reply.updated should contain exactly one member')
|
324
|
+
ref = updated[0]
|
325
|
+
refute_equal(nil, ref, 'update reply record reference can not be nil')
|
326
|
+
refute_equal(0, ref, 'update reply record reference can not be 0')
|
327
|
+
# verify
|
328
|
+
result = client.read('Article', {title: 'Sample'})
|
329
|
+
check_result_code(result)
|
330
|
+
results = result[:results]
|
331
|
+
assert_equal(1, results.length, 'read after update reply.results should contain exactly one member')
|
332
|
+
record = results[0]
|
333
|
+
assert_equal(ref, record[:id], 'read after update reply.results[0].id should match the record reference')
|
334
|
+
obj = record[:data]
|
335
|
+
assert_equal('Updated text.', obj[:text], 'read after update reply obj.text incorrect')
|
170
336
|
end
|
171
337
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
338
|
+
def delete_query(client)
|
339
|
+
puts " --- delete query" if $VERBOSE
|
340
|
+
result = client.delete('Article', {title: 'Second'})
|
341
|
+
check_result_code(result)
|
342
|
+
deleted = result[:deleted]
|
343
|
+
assert_equal(1, deleted.length, 'delete reply.deleted should contain exactly one member')
|
344
|
+
ref = deleted[0]
|
345
|
+
refute_equal(nil, ref, 'delete reply record reference can not be nil')
|
346
|
+
refute_equal(0, ref, 'delete reply record reference can not be 0')
|
347
|
+
# verify
|
348
|
+
result = client.read('Article', {title: 'Second'})
|
349
|
+
check_result_code(result)
|
350
|
+
assert_equal(0, result[:results].length, 'read after delete reply.results should contain no members')
|
351
|
+
end
|
176
352
|
|
177
353
|
end # TestRunner
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wabur
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Ohler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oj
|
@@ -163,14 +163,20 @@ files:
|
|
163
163
|
- export/assets/js/wab.js
|
164
164
|
- export/index.html
|
165
165
|
- lib/wab.rb
|
166
|
+
- lib/wab/client.rb
|
166
167
|
- lib/wab/controller.rb
|
167
168
|
- lib/wab/data.rb
|
168
169
|
- lib/wab/errors.rb
|
169
170
|
- lib/wab/impl.rb
|
171
|
+
- lib/wab/impl/agoo.rb
|
172
|
+
- lib/wab/impl/agoo/export_proxy.rb
|
173
|
+
- lib/wab/impl/agoo/handler.rb
|
174
|
+
- lib/wab/impl/agoo/sender.rb
|
175
|
+
- lib/wab/impl/agoo/server.rb
|
176
|
+
- lib/wab/impl/agoo/tql_handler.rb
|
170
177
|
- lib/wab/impl/bool_expr.rb
|
171
178
|
- lib/wab/impl/configuration.rb
|
172
179
|
- lib/wab/impl/data.rb
|
173
|
-
- lib/wab/impl/export_proxy.rb
|
174
180
|
- lib/wab/impl/expr.rb
|
175
181
|
- lib/wab/impl/expr_parser.rb
|
176
182
|
- lib/wab/impl/exprs/and.rb
|
@@ -185,22 +191,36 @@ files:
|
|
185
191
|
- lib/wab/impl/exprs/not.rb
|
186
192
|
- lib/wab/impl/exprs/or.rb
|
187
193
|
- lib/wab/impl/exprs/regex.rb
|
188
|
-
- lib/wab/impl/handler.rb
|
189
194
|
- lib/wab/impl/init.rb
|
190
195
|
- lib/wab/impl/model.rb
|
191
196
|
- lib/wab/impl/path_expr.rb
|
197
|
+
- lib/wab/impl/rack_error.rb
|
198
|
+
- lib/wab/impl/rack_handler.rb
|
192
199
|
- lib/wab/impl/shell.rb
|
200
|
+
- lib/wab/impl/sinatra.rb
|
201
|
+
- lib/wab/impl/sinatra/export_proxy.rb
|
202
|
+
- lib/wab/impl/sinatra/handler.rb
|
203
|
+
- lib/wab/impl/sinatra/sender.rb
|
204
|
+
- lib/wab/impl/sinatra/server.rb
|
205
|
+
- lib/wab/impl/sinatra/tql_handler.rb
|
193
206
|
- lib/wab/impl/templates/opo-rub.conf.template
|
194
207
|
- lib/wab/impl/templates/opo.conf.template
|
195
208
|
- lib/wab/impl/templates/spawn.rb.template
|
196
209
|
- lib/wab/impl/templates/ui_controller.rb.template
|
197
210
|
- lib/wab/impl/templates/wabur.conf.template
|
198
211
|
- lib/wab/impl/utils.rb
|
212
|
+
- lib/wab/impl/webrick.rb
|
213
|
+
- lib/wab/impl/webrick/export_proxy.rb
|
214
|
+
- lib/wab/impl/webrick/handler.rb
|
215
|
+
- lib/wab/impl/webrick/sender.rb
|
216
|
+
- lib/wab/impl/webrick/server.rb
|
217
|
+
- lib/wab/impl/webrick/tql_handler.rb
|
199
218
|
- lib/wab/io.rb
|
200
219
|
- lib/wab/io/call.rb
|
201
220
|
- lib/wab/io/engine.rb
|
202
221
|
- lib/wab/io/shell.rb
|
203
222
|
- lib/wab/open_controller.rb
|
223
|
+
- lib/wab/racker.rb
|
204
224
|
- lib/wab/shell.rb
|
205
225
|
- lib/wab/shell_logger.rb
|
206
226
|
- lib/wab/ui.rb
|
@@ -220,6 +240,7 @@ files:
|
|
220
240
|
- test/bench_io_shell.rb
|
221
241
|
- test/helper.rb
|
222
242
|
- test/mirror_controller.rb
|
243
|
+
- test/test_client.rb
|
223
244
|
- test/test_configuration.rb
|
224
245
|
- test/test_data.rb
|
225
246
|
- test/test_expr.rb
|
@@ -268,7 +289,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
268
289
|
version: '0'
|
269
290
|
requirements: []
|
270
291
|
rubyforge_project: wabur
|
271
|
-
rubygems_version: 2.
|
292
|
+
rubygems_version: 2.7.3
|
272
293
|
signing_key:
|
273
294
|
specification_version: 4
|
274
295
|
summary: Web Application Builder
|
@@ -290,6 +311,7 @@ test_files:
|
|
290
311
|
- test/test_expr_lt.rb
|
291
312
|
- test/test_expr_gte.rb
|
292
313
|
- test/test_expr_gt.rb
|
314
|
+
- test/test_client.rb
|
293
315
|
- test/helper.rb
|
294
316
|
- test/bench_io_shell.rb
|
295
317
|
- test/test_expr_eq.rb
|