rack-bert-rpc 0.2.1 → 0.3.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/README.md +4 -0
- data/lib/rack/bert_rpc.rb +11 -1
- data/lib/rack/bert_rpc/server.rb +14 -3
- data/lib/rack/bert_rpc/version.rb +1 -1
- metadata +40 -9
data/README.md
CHANGED
@@ -45,6 +45,10 @@ The `BertRpc` middle takes several configuration parameters:
|
|
45
45
|
* `path`
|
46
46
|
Any requests coming in to this path will be handled as RPC
|
47
47
|
requests. Defaults to '/rpc'
|
48
|
+
* `logger`
|
49
|
+
This is a `Logger` object that will be used for logging messages
|
50
|
+
from the RPC server. If no logger is provided a default one will be
|
51
|
+
created that logs to `STDOUT`
|
48
52
|
* `server`
|
49
53
|
Used for testing, switches out the backend `BertRpc::Server` so the
|
50
54
|
requests can be handled by a different one
|
data/lib/rack/bert_rpc.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rack'
|
2
|
+
require 'logger'
|
2
3
|
|
3
4
|
module Rack
|
4
5
|
class BertRpc
|
@@ -14,6 +15,14 @@ module Rack
|
|
14
15
|
def clear_exposed
|
15
16
|
@exposed_modules = []
|
16
17
|
end
|
18
|
+
|
19
|
+
def logger
|
20
|
+
@logger ||= ::Logger.new(STDOUT)
|
21
|
+
end
|
22
|
+
|
23
|
+
def logger=(logger)
|
24
|
+
@logger = logger
|
25
|
+
end
|
17
26
|
end
|
18
27
|
|
19
28
|
attr_reader :path
|
@@ -21,7 +30,8 @@ module Rack
|
|
21
30
|
def initialize(app, options = {})
|
22
31
|
@path = options[:path] || '/rpc'
|
23
32
|
@app = app
|
24
|
-
|
33
|
+
logger = options[:logger] || BertRpc.logger
|
34
|
+
@server = options[:server] || BertRpc::Server.new(logger)
|
25
35
|
|
26
36
|
expose_defaults!
|
27
37
|
options[:expose].each do |sym, mod|
|
data/lib/rack/bert_rpc/server.rb
CHANGED
@@ -9,7 +9,8 @@ module Rack
|
|
9
9
|
|
10
10
|
attr_reader :mods
|
11
11
|
|
12
|
-
def initialize
|
12
|
+
def initialize(logger = nil)
|
13
|
+
@logger = logger
|
13
14
|
@mods = {}
|
14
15
|
end
|
15
16
|
|
@@ -20,26 +21,36 @@ module Rack
|
|
20
21
|
def handle(input)
|
21
22
|
rpc = read_rpc(input)
|
22
23
|
if rpc.nil?
|
24
|
+
@logger.error("Invalid rpc request received: '#{input.inspect}'")
|
23
25
|
return error_response(:server, "Invalid request: unrecognized")
|
24
26
|
end
|
25
27
|
|
26
28
|
if rpc.size == 4 && rpc[0] == :call
|
27
29
|
begin
|
30
|
+
@logger.debug("RPC Call: '#{rpc.inspect}'")
|
28
31
|
resp = dispatch(*rpc[1..3])
|
29
32
|
reply_response(resp)
|
30
33
|
rescue ServerError => e
|
34
|
+
@logger.error("Server error encountered on call: '#{e.inspect}'")
|
31
35
|
error_response(:server, e)
|
32
36
|
rescue Object => e
|
37
|
+
@logger.info("error encountered on call: '#{e.inspect}'")
|
33
38
|
error_response(:user, e)
|
34
39
|
end
|
35
40
|
elsif rpc.size == 4 && rpc[0] == :cast
|
36
41
|
begin
|
42
|
+
@logger.debug("RPC Call: '#{rpc.inspect}'")
|
37
43
|
dispatch(*rpc[1..3])
|
44
|
+
noreply_response
|
45
|
+
rescue ServerError => e
|
46
|
+
@logger.error("Server error encountered on cast: '#{e.inspect}'")
|
47
|
+
error_response(:server, e)
|
38
48
|
rescue Object => e
|
39
|
-
|
49
|
+
@logger.debug("error encountered on cast: '#{e.inspect}'")
|
50
|
+
noreply_response
|
40
51
|
end
|
41
|
-
noreply_response
|
42
52
|
else
|
53
|
+
@logger.fatal("Unexpected error: '#{e.inspect}'")
|
43
54
|
error_response(:server, "Invalid request: #{rpc.inspect}")
|
44
55
|
end
|
45
56
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-bert-rpc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Ryan Burrows
|
@@ -14,16 +15,18 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-
|
18
|
+
date: 2010-10-29 00:00:00 -07:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: bert
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
27
30
|
segments:
|
28
31
|
- 0
|
29
32
|
version: "0"
|
@@ -33,38 +36,62 @@ dependencies:
|
|
33
36
|
name: rack
|
34
37
|
prerelease: false
|
35
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
36
40
|
requirements:
|
37
41
|
- - ">="
|
38
42
|
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
39
44
|
segments:
|
40
45
|
- 0
|
41
46
|
version: "0"
|
42
47
|
type: :runtime
|
43
48
|
version_requirements: *id002
|
44
49
|
- !ruby/object:Gem::Dependency
|
45
|
-
name:
|
50
|
+
name: bundler
|
46
51
|
prerelease: false
|
47
52
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
48
54
|
requirements:
|
49
55
|
- - ">="
|
50
56
|
- !ruby/object:Gem::Version
|
57
|
+
hash: 23
|
51
58
|
segments:
|
59
|
+
- 1
|
52
60
|
- 0
|
53
|
-
|
61
|
+
- 0
|
62
|
+
version: 1.0.0
|
54
63
|
type: :development
|
55
64
|
version_requirements: *id003
|
56
65
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
66
|
+
name: rspec
|
58
67
|
prerelease: false
|
59
68
|
requirement: &id004 !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ~>
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
hash: 13
|
74
|
+
segments:
|
75
|
+
- 2
|
76
|
+
- 0
|
77
|
+
- 1
|
78
|
+
version: 2.0.1
|
79
|
+
type: :development
|
80
|
+
version_requirements: *id004
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: rack-test
|
83
|
+
prerelease: false
|
84
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
60
86
|
requirements:
|
61
87
|
- - ">="
|
62
88
|
- !ruby/object:Gem::Version
|
89
|
+
hash: 3
|
63
90
|
segments:
|
64
91
|
- 0
|
65
92
|
version: "0"
|
66
93
|
type: :development
|
67
|
-
version_requirements: *
|
94
|
+
version_requirements: *id005
|
68
95
|
description: rack-bert-rpc is rack middleware that provides a BERT-RPC server implemenation for using BERT-RPC over HTTP
|
69
96
|
email: rhburrows@gmail.com
|
70
97
|
executables: []
|
@@ -93,16 +120,20 @@ rdoc_options: []
|
|
93
120
|
require_paths:
|
94
121
|
- lib
|
95
122
|
required_ruby_version: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
96
124
|
requirements:
|
97
125
|
- - ">="
|
98
126
|
- !ruby/object:Gem::Version
|
127
|
+
hash: 3
|
99
128
|
segments:
|
100
129
|
- 0
|
101
130
|
version: "0"
|
102
131
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
|
+
none: false
|
103
133
|
requirements:
|
104
134
|
- - ">="
|
105
135
|
- !ruby/object:Gem::Version
|
136
|
+
hash: 23
|
106
137
|
segments:
|
107
138
|
- 1
|
108
139
|
- 3
|
@@ -111,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
142
|
requirements: []
|
112
143
|
|
113
144
|
rubyforge_project:
|
114
|
-
rubygems_version: 1.3.
|
145
|
+
rubygems_version: 1.3.7
|
115
146
|
signing_key:
|
116
147
|
specification_version: 3
|
117
148
|
summary: Rack middleware BERT-RPC server
|