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
@@ -1,39 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'webrick'
|
3
|
-
|
4
|
-
module WAB
|
5
|
-
module Impl
|
6
|
-
|
7
|
-
# A handler that provides missing files in an assets directory where the
|
8
|
-
# files are the wab and wab UI files.
|
9
|
-
class ExportProxy < WEBrick::HTTPServlet::FileHandler
|
10
|
-
|
11
|
-
def initialize(server, path)
|
12
|
-
super
|
13
|
-
end
|
14
|
-
|
15
|
-
def do_GET(req, res)
|
16
|
-
super
|
17
|
-
rescue Exception => e
|
18
|
-
path = req.path
|
19
|
-
path = '/index.html' if '/' == path
|
20
|
-
begin
|
21
|
-
mime = nil
|
22
|
-
index = path.rindex('.')
|
23
|
-
unless index.nil?
|
24
|
-
mime = WEBrick::HTTPUtils::DefaultMimeTypes[path[index + 1..-1]]
|
25
|
-
end
|
26
|
-
mime = 'text/plain' if mime.nil?
|
27
|
-
content = WAB.get_export(path)
|
28
|
-
res.status = 200
|
29
|
-
res['Content-Type'] = mime
|
30
|
-
res.body = content
|
31
|
-
rescue Exception
|
32
|
-
# raise the original error for a normal not found error
|
33
|
-
raise e
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
end # ExportProxy
|
38
|
-
end # Impl
|
39
|
-
end # WAB
|
data/lib/wab/impl/handler.rb
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'webrick'
|
3
|
-
|
4
|
-
module WAB
|
5
|
-
module Impl
|
6
|
-
|
7
|
-
# Handler for requests that fall under the path assigned to the
|
8
|
-
# Controller. This is used only with the WAB::Impl::Shell.
|
9
|
-
class Handler < WEBrick::HTTPServlet::AbstractServlet
|
10
|
-
|
11
|
-
def initialize(server, shell)
|
12
|
-
super(server)
|
13
|
-
@shell = shell
|
14
|
-
end
|
15
|
-
|
16
|
-
def do_GET(req, res)
|
17
|
-
controller, path, query = extract_req(req)
|
18
|
-
log_request('controller.read', path, query) if @shell.logger.info?
|
19
|
-
send_result(controller.read(path, query), res, path, query)
|
20
|
-
rescue StandardError => e
|
21
|
-
send_error(e, res)
|
22
|
-
end
|
23
|
-
|
24
|
-
def do_PUT(req, res)
|
25
|
-
controller, path, query, body = extract_req(req)
|
26
|
-
log_request_with_body('controller.create', path, query, body) if @shell.logger.info?
|
27
|
-
send_result(controller.create(path, query, body), res, path, query)
|
28
|
-
rescue StandardError => e
|
29
|
-
send_error(e, res)
|
30
|
-
end
|
31
|
-
|
32
|
-
def do_POST(req, res)
|
33
|
-
controller, path, query, body = extract_req(req)
|
34
|
-
log_request_with_body('controller.update', path, query, body) if @shell.logger.info?
|
35
|
-
send_result(controller.update(path, query, body), res, path, query)
|
36
|
-
rescue StandardError => e
|
37
|
-
send_error(e, res)
|
38
|
-
end
|
39
|
-
|
40
|
-
def do_DELETE(req, res)
|
41
|
-
controller, path, query = extract_req(req)
|
42
|
-
log_request('controller.delete', path, query) if @shell.logger.info?
|
43
|
-
send_result(controller.delete(path, query), res, path, query)
|
44
|
-
rescue StandardError => e
|
45
|
-
send_error(e, res)
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
def log_request(caller, path, query)
|
51
|
-
@shell.logger.info("#{caller}(#{path.join('/')}#{query})")
|
52
|
-
end
|
53
|
-
|
54
|
-
def log_request_with_body(caller, path, query, body)
|
55
|
-
@shell.logger.info("#{caller} #{path.join('/')}#{query}\n#{body.json(@shell.indent)}")
|
56
|
-
end
|
57
|
-
|
58
|
-
# Pulls and converts the request path, query, and body. Also returns the
|
59
|
-
# controller.
|
60
|
-
def extract_req(req)
|
61
|
-
path = req.path.split('/')[1..-1]
|
62
|
-
query = {}
|
63
|
-
req.query.each { |k,v| query[k.to_sym] = v }
|
64
|
-
request_body = req.body
|
65
|
-
if request_body.nil?
|
66
|
-
body = nil
|
67
|
-
else
|
68
|
-
body = Data.new(
|
69
|
-
Oj.strict_load(request_body, symbol_keys: true)
|
70
|
-
)
|
71
|
-
body.detect
|
72
|
-
end
|
73
|
-
[@shell.path_controller(path), path, query, body]
|
74
|
-
end
|
75
|
-
|
76
|
-
# Sends the results from a controller request.
|
77
|
-
def send_result(result, res, path, query)
|
78
|
-
result = @shell.data(result) unless result.is_a?(WAB::Data)
|
79
|
-
response_body = result.json(@shell.indent)
|
80
|
-
res.status = 200
|
81
|
-
res['Content-Type'] = 'application/json'
|
82
|
-
@shell.logger.debug("reply to #{path.join('/')}#{query}: #{response_body}") if @shell.logger.debug?
|
83
|
-
res.body = response_body
|
84
|
-
end
|
85
|
-
|
86
|
-
# Sends an error from a rescued call.
|
87
|
-
def send_error(e, res)
|
88
|
-
res.status = 500
|
89
|
-
res['Content-Type'] = 'application/json'
|
90
|
-
body = { code: -1, error: "#{e.class}: #{e.message}" }
|
91
|
-
body[:backtrace] = e.backtrace
|
92
|
-
res.body = @shell.data(body).json(@shell.indent)
|
93
|
-
@shell.logger.warn(Impl.format_error(e))
|
94
|
-
end
|
95
|
-
|
96
|
-
end # Handler
|
97
|
-
end # Impl
|
98
|
-
end # WAB
|