rails_twirp 0.4.0 → 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.
- checksums.yaml +4 -4
- data/lib/rails_twirp/mapper.rb +83 -0
- data/lib/rails_twirp/route_set.rb +2 -46
- data/lib/rails_twirp/version.rb +1 -1
- data/test/dummy/app/controllers/testmod/nested/other_controller.rb +10 -0
- data/test/dummy/config/twirp/routes.rb +8 -0
- data/test/dummy/proto/api.proto +1 -0
- data/test/dummy/proto/api_twirp.rb +1 -0
- data/test/other_controller_test.rb +9 -0
- metadata +6 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8df8457b09993d7d5c986130e724948df049c201b6797f33a7b66458bde98918
|
4
|
+
data.tar.gz: 0a2100cbefd37754f9dbd6cf666def1c29d0936322f72837d7e60653b5510b79
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b50c23cd6fa8852686ca96066c0a65a532f06ec0225b5ed04ac860218760d187e868d0b3d499855527ed23d355dacf8bf33eb1aaf2fd1b590b29aa12c8e836a
|
7
|
+
data.tar.gz: 461fe47bbafdd0bcf304f48b4938f307fd380d7bbce7049a703c60f7bc781b0f58b1cf06b7410c4a168e39441b1a9bd49b5091a0dbfc3472870c002bef6f51e1
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require "forwardable"
|
2
|
+
|
3
|
+
module RailsTwirp
|
4
|
+
class ServiceMapper
|
5
|
+
class Mapping
|
6
|
+
attr_reader :controller, :action
|
7
|
+
|
8
|
+
def initialize(to:, **options)
|
9
|
+
controller, @action = split_to(to)
|
10
|
+
@controller = add_controller_module(controller, options.delete(:module))
|
11
|
+
raise ArgumentError, "Unknown argument #{options.keys.first}" unless options.empty?
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_s
|
15
|
+
"#{controller}##{action}"
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
# copied from Rails
|
21
|
+
def split_to(to)
|
22
|
+
if /#/.match?(to)
|
23
|
+
to.split("#").map!(&:-@)
|
24
|
+
else
|
25
|
+
[]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def add_controller_module(controller, modyoule)
|
30
|
+
return controller unless modyoule
|
31
|
+
|
32
|
+
if controller&.start_with?("/")
|
33
|
+
-controller[1..]
|
34
|
+
else
|
35
|
+
-[modyoule, controller].compact.join("/")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
extend Forwardable
|
41
|
+
def_delegator :@mapper, :scope
|
42
|
+
|
43
|
+
def initialize(service_route_set, mapper)
|
44
|
+
@service_route_set = service_route_set
|
45
|
+
@mapper = mapper
|
46
|
+
end
|
47
|
+
|
48
|
+
def rpc(name, to:)
|
49
|
+
mapping = Mapping.new(to: to, module: @mapper.send(:_module))
|
50
|
+
@service_route_set.add_route(name, mapping)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class Mapper
|
55
|
+
def initialize(route_set)
|
56
|
+
@route_set = route_set
|
57
|
+
@module = nil
|
58
|
+
end
|
59
|
+
|
60
|
+
def service(service_definition, **options, &block)
|
61
|
+
service_route_set = @route_set.services[service_definition]
|
62
|
+
service_mapper = ServiceMapper.new(service_route_set, self)
|
63
|
+
scope(**options) { service_mapper.instance_exec(&block) }
|
64
|
+
end
|
65
|
+
|
66
|
+
def scope(**options)
|
67
|
+
last_module = @module
|
68
|
+
if (modyoule = options.delete(:module))
|
69
|
+
@module = @module.nil? ? modyoule : "#{@module}/#{modyoule}"
|
70
|
+
end
|
71
|
+
raise ArgumentError, "Unknown scope argument #{options.keys.first}" unless options.empty?
|
72
|
+
yield
|
73
|
+
ensure
|
74
|
+
@module = last_module
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def _module
|
80
|
+
@module
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# Most of this logic is stolen from Rails ActionDispatch::Routing::RouteSet
|
2
2
|
|
3
|
+
require "rails_twirp/mapper"
|
4
|
+
|
3
5
|
module RailsTwirp
|
4
6
|
class UnknownRpcError < StandardError; end
|
5
7
|
|
@@ -66,51 +68,5 @@ module RailsTwirp
|
|
66
68
|
service
|
67
69
|
end
|
68
70
|
end
|
69
|
-
|
70
|
-
class Mapping
|
71
|
-
attr_reader :controller, :action
|
72
|
-
|
73
|
-
def initialize(to:)
|
74
|
-
@controller, @action = split_to(to)
|
75
|
-
end
|
76
|
-
|
77
|
-
def to_s
|
78
|
-
"#{controller}##{action}"
|
79
|
-
end
|
80
|
-
|
81
|
-
private
|
82
|
-
|
83
|
-
# copied from Rails
|
84
|
-
def split_to(to)
|
85
|
-
if /#/.match?(to)
|
86
|
-
to.split("#").map!(&:-@)
|
87
|
-
else
|
88
|
-
[]
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
class ServiceMapper
|
94
|
-
def initialize(service_route_set)
|
95
|
-
@service_route_set = service_route_set
|
96
|
-
end
|
97
|
-
|
98
|
-
def rpc(name, to:)
|
99
|
-
mapping = Mapping.new(to: to)
|
100
|
-
@service_route_set.add_route(name, mapping)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
class Mapper
|
105
|
-
def initialize(route_set)
|
106
|
-
@route_set = route_set
|
107
|
-
end
|
108
|
-
|
109
|
-
def service(service_definition, &block)
|
110
|
-
service_route_set = @route_set.services[service_definition]
|
111
|
-
service_mapper = ServiceMapper.new(service_route_set)
|
112
|
-
service_mapper.instance_exec(&block)
|
113
|
-
end
|
114
|
-
end
|
115
71
|
end
|
116
72
|
end
|
data/lib/rails_twirp/version.rb
CHANGED
@@ -10,4 +10,12 @@ Rails.application.twirp.routes.draw do
|
|
10
10
|
rpc "UncaughtError", to: "pings#uncaught_raise"
|
11
11
|
rpc "BeforeError", to: "pings#before_error"
|
12
12
|
end
|
13
|
+
|
14
|
+
scope module: :testmod do
|
15
|
+
service RPC::DummyAPI::DummyService do
|
16
|
+
scope module: "nested" do
|
17
|
+
rpc "Nested", to: "other#ping"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
13
21
|
end
|
data/test/dummy/proto/api.proto
CHANGED
@@ -12,6 +12,7 @@ service Dummy {
|
|
12
12
|
rpc RaiseError(PingRequest) returns (PingResponse);
|
13
13
|
rpc UncaughtError(PingRequest) returns (PingResponse);
|
14
14
|
rpc BeforeError(PingRequest) returns (PingResponse);
|
15
|
+
rpc Nested(PingRequest) returns (PingResponse);
|
15
16
|
}
|
16
17
|
|
17
18
|
message PingRequest {
|
@@ -14,6 +14,7 @@ module RPC
|
|
14
14
|
rpc :RaiseError, PingRequest, PingResponse, :ruby_method => :raise_error
|
15
15
|
rpc :UncaughtError, PingRequest, PingResponse, :ruby_method => :uncaught_error
|
16
16
|
rpc :BeforeError, PingRequest, PingResponse, :ruby_method => :before_error
|
17
|
+
rpc :Nested, PingRequest, PingResponse, :ruby_method => :nested
|
17
18
|
end
|
18
19
|
|
19
20
|
class DummyClient < Twirp::Client
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class OtherControllerTest < RailsTwirp::IntegrationTest
|
4
|
+
test "modules work" do
|
5
|
+
req = RPC::DummyAPI::PingRequest.new(name: "Bouke")
|
6
|
+
rpc RPC::DummyAPI::DummyService, "Nested", req
|
7
|
+
assert_equal "BoukeBouke", response.double_name
|
8
|
+
end
|
9
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_twirp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bouke van der Bijl
|
@@ -59,6 +59,7 @@ files:
|
|
59
59
|
- lib/rails_twirp/base.rb
|
60
60
|
- lib/rails_twirp/engine.rb
|
61
61
|
- lib/rails_twirp/errors.rb
|
62
|
+
- lib/rails_twirp/mapper.rb
|
62
63
|
- lib/rails_twirp/render_pb.rb
|
63
64
|
- lib/rails_twirp/rescue.rb
|
64
65
|
- lib/rails_twirp/route_set.rb
|
@@ -76,6 +77,7 @@ files:
|
|
76
77
|
- test/dummy/app/controllers/application_twirp_controller.rb
|
77
78
|
- test/dummy/app/controllers/concerns/.keep
|
78
79
|
- test/dummy/app/controllers/pings_controller.rb
|
80
|
+
- test/dummy/app/controllers/testmod/nested/other_controller.rb
|
79
81
|
- test/dummy/app/helpers/application_helper.rb
|
80
82
|
- test/dummy/app/helpers/random_helper.rb
|
81
83
|
- test/dummy/app/javascript/packs/application.js
|
@@ -126,6 +128,7 @@ files:
|
|
126
128
|
- test/dummy/public/apple-touch-icon-precomposed.png
|
127
129
|
- test/dummy/public/apple-touch-icon.png
|
128
130
|
- test/dummy/public/favicon.ico
|
131
|
+
- test/other_controller_test.rb
|
129
132
|
- test/ping_controller_test.rb
|
130
133
|
- test/rails_twirp_test.rb
|
131
134
|
- test/test_helper.rb
|
@@ -163,6 +166,7 @@ test_files:
|
|
163
166
|
- test/dummy/app/controllers/application_twirp_controller.rb
|
164
167
|
- test/dummy/app/controllers/concerns/.keep
|
165
168
|
- test/dummy/app/controllers/pings_controller.rb
|
169
|
+
- test/dummy/app/controllers/testmod/nested/other_controller.rb
|
166
170
|
- test/dummy/app/helpers/application_helper.rb
|
167
171
|
- test/dummy/app/helpers/random_helper.rb
|
168
172
|
- test/dummy/app/javascript/packs/application.js
|
@@ -213,6 +217,7 @@ test_files:
|
|
213
217
|
- test/dummy/public/apple-touch-icon-precomposed.png
|
214
218
|
- test/dummy/public/apple-touch-icon.png
|
215
219
|
- test/dummy/public/favicon.ico
|
220
|
+
- test/other_controller_test.rb
|
216
221
|
- test/ping_controller_test.rb
|
217
222
|
- test/rails_twirp_test.rb
|
218
223
|
- test/test_helper.rb
|