wabur 0.6.2 → 0.7.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.
- 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
|