api-transformer 0.1.1 → 0.2.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/api_transformer.rb +24 -28
- data/lib/api_transformer/route.rb +26 -0
- data/lib/api_transformer/routes.rb +0 -5
- data/lib/api_transformer/version.rb +1 -1
- data/spec/server_spec.rb +23 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 956c01e6033f4197c83758b8bd20d63c10d96843
|
4
|
+
data.tar.gz: 32c0db4245df8c1c976abfa5797e42d7dc4bb187
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d694ca4314b5139c2b7b0991f563fb578aa4cace652ad7d335dd3b148d2b01c06a46046268a8b9e87129ceb9705832be27b78a36c14a86d8b58be0cc6bc9676
|
7
|
+
data.tar.gz: 7773e131d6d087192fe37f1d7707d3d2702783852099df62b6f2910219b582ffab083d792b10d0cd39072da84bd026e2dff5e60dd23b7b12d545a3ad02e7462e
|
data/lib/api_transformer.rb
CHANGED
@@ -8,6 +8,7 @@ require_relative "./api_transformer/backend_response"
|
|
8
8
|
require_relative "./api_transformer/frontend_response"
|
9
9
|
require_relative "./api_transformer/frontend_response_builder"
|
10
10
|
require_relative "./api_transformer/params"
|
11
|
+
require_relative "./api_transformer/route"
|
11
12
|
require_relative "./api_transformer/routes"
|
12
13
|
require_relative "./api_transformer/rack/cookie_params"
|
13
14
|
|
@@ -45,29 +46,14 @@ module ApiTransformer
|
|
45
46
|
route, path_params = @@routes.find(env["REQUEST_METHOD"], path)
|
46
47
|
|
47
48
|
if route
|
48
|
-
|
49
|
+
all_params = params.merge(path_params)
|
50
|
+
response = route.run(@@base_url, all_params, env)
|
51
|
+
streaming_response(response.status, response.headers)
|
49
52
|
else
|
50
53
|
[404, {}, "nope"]
|
51
54
|
end
|
52
55
|
end
|
53
56
|
|
54
|
-
def run_route(route, path_params, env)
|
55
|
-
indifferent_params = Params.try_convert(params.merge(path_params))
|
56
|
-
endpoint = Endpoint.new(@@base_url, env, route)
|
57
|
-
headers = env["client-headers"]
|
58
|
-
|
59
|
-
route[:helper_blocks].each { |block| endpoint.instance_eval(&block) }
|
60
|
-
endpoint.instance_exec(indifferent_params, headers, &route[:block])
|
61
|
-
|
62
|
-
status, headers = endpoint.run
|
63
|
-
|
64
|
-
EM.next_tick do
|
65
|
-
endpoint.complete
|
66
|
-
end
|
67
|
-
|
68
|
-
streaming_response(status, headers)
|
69
|
-
end
|
70
|
-
|
71
57
|
class << self
|
72
58
|
def inherited(klass)
|
73
59
|
klass.use Goliath::Rack::Params
|
@@ -94,6 +80,22 @@ module ApiTransformer
|
|
94
80
|
helper_blocks.unshift(block)
|
95
81
|
end
|
96
82
|
|
83
|
+
def shared_endpoints(name, &block)
|
84
|
+
if shared_endpoint_blocks[name]
|
85
|
+
fail "shared_endpoints already defined for \"#{name}\""
|
86
|
+
else
|
87
|
+
shared_endpoint_blocks[name] = block
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def include_endpoints(name)
|
92
|
+
if shared_endpoint_blocks[name]
|
93
|
+
instance_eval(&shared_endpoint_blocks[name])
|
94
|
+
else
|
95
|
+
fail "missing shared_endpoints for \"#{name}\""
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
97
99
|
def get(path = "", options = {}, &block)
|
98
100
|
add_route(:get, path, options, block)
|
99
101
|
end
|
@@ -110,8 +112,8 @@ module ApiTransformer
|
|
110
112
|
add_route(:delete, path, options, block)
|
111
113
|
end
|
112
114
|
|
113
|
-
def
|
114
|
-
@@routes =
|
115
|
+
def reset
|
116
|
+
@@routes = @failure_handlers = @helper_blocks = @shared_endpoints = nil
|
115
117
|
end
|
116
118
|
|
117
119
|
private
|
@@ -133,15 +135,9 @@ module ApiTransformer
|
|
133
135
|
@helper_blocks ||= []
|
134
136
|
end
|
135
137
|
|
136
|
-
def
|
137
|
-
|
138
|
+
def shared_endpoint_blocks
|
139
|
+
@shared_endpoints ||= {}
|
138
140
|
end
|
139
141
|
end
|
140
|
-
|
141
|
-
private
|
142
|
-
|
143
|
-
def server
|
144
|
-
self.class
|
145
|
-
end
|
146
142
|
end
|
147
143
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "ostruct"
|
2
|
+
|
3
|
+
module ApiTransformer
|
4
|
+
# A route
|
5
|
+
class Route < OpenStruct
|
6
|
+
# For passing back a header and status
|
7
|
+
class Response < Struct.new(:status, :headers); end
|
8
|
+
|
9
|
+
def run(base_url, params, env)
|
10
|
+
indifferent_params = Params.try_convert(params)
|
11
|
+
endpoint = Endpoint.new(base_url, env, self)
|
12
|
+
headers = env["client-headers"]
|
13
|
+
|
14
|
+
helper_blocks.each { |block| endpoint.instance_eval(&block) }
|
15
|
+
endpoint.instance_exec(indifferent_params, headers, &self.block)
|
16
|
+
|
17
|
+
status, headers = endpoint.run
|
18
|
+
|
19
|
+
EM.next_tick do
|
20
|
+
endpoint.complete
|
21
|
+
end
|
22
|
+
|
23
|
+
Response.new(status, headers)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/spec/server_spec.rb
CHANGED
@@ -35,7 +35,7 @@ describe ApiTransformer::Server do
|
|
35
35
|
let(:err) { proc { |c| fail "HTTP Request failed #{c.response}" } }
|
36
36
|
|
37
37
|
before do
|
38
|
-
ApiTransformer::Server.
|
38
|
+
ApiTransformer::Server.reset
|
39
39
|
end
|
40
40
|
|
41
41
|
it "works without any backend requests" do
|
@@ -827,4 +827,26 @@ describe ApiTransformer::Server do
|
|
827
827
|
end
|
828
828
|
end
|
829
829
|
end
|
830
|
+
|
831
|
+
it "allows shared endpoints" do
|
832
|
+
server = create_server do
|
833
|
+
shared_endpoints "ping" do
|
834
|
+
get "/ping" do
|
835
|
+
response do
|
836
|
+
success { body "pong" }
|
837
|
+
end
|
838
|
+
end
|
839
|
+
end
|
840
|
+
|
841
|
+
namespace "/games" do
|
842
|
+
include_endpoints "ping"
|
843
|
+
end
|
844
|
+
end
|
845
|
+
|
846
|
+
with_api(server) do
|
847
|
+
get_request(path: "/games/ping") do |c|
|
848
|
+
c.response.must_equal "pong"
|
849
|
+
end
|
850
|
+
end
|
851
|
+
end
|
830
852
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: api-transformer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bruz Marzolf
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -165,6 +165,7 @@ files:
|
|
165
165
|
- lib/api_transformer/frontend_response_builder.rb
|
166
166
|
- lib/api_transformer/params.rb
|
167
167
|
- lib/api_transformer/rack/cookie_params.rb
|
168
|
+
- lib/api_transformer/route.rb
|
168
169
|
- lib/api_transformer/routes.rb
|
169
170
|
- lib/api_transformer/version.rb
|
170
171
|
- spec/server_spec.rb
|