rack-app 6.4.1 → 6.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0771df20b65be7fc4d6c2cc099de9028a4f498ea
4
- data.tar.gz: 20ff855cf97e95e33493f65ef1215817eb41ba8b
3
+ metadata.gz: 4dacbebee0057a6e067e03df4561ebee1c67a79f
4
+ data.tar.gz: 926b31b67476555c9a6f6fe63f6c8df8dcf1f9a7
5
5
  SHA512:
6
- metadata.gz: 3f5cdb427df01340331803e29457bd5e3367fad748d69430631bb9e8bb02408b59a4ff0b06edc2ec4d49b7723024df0bedd77a16b3eb83513c8eff2ac3173887
7
- data.tar.gz: f47ce2c81275c04caf07ee0f76077695eabbf6455f21653a662e973e22049e2d45a3ed253b5f331a643d67df35fa13225de620f40695dccff2a99f96461d22c0
6
+ metadata.gz: 99a4ec962ab5be3ba58699ec0bcd1d7224d934caf338bba4722ecab41dc28530135606addce7ddb1cb30ccff66d4f1888ba1379a881e065cbb936d353c7084f8
7
+ data.tar.gz: 9652a7ce5a607bb8ccd6d06d9b965bdc4f0ff40d7f438ad149ada21f1fac427d2674ce03e821454e5ca6871cf080cb6ff0fe05838307705eb518e2657d2e1ad1
data/VERSION CHANGED
@@ -1 +1 @@
1
- 6.4.1
1
+ 6.5.0
@@ -6,6 +6,7 @@ class Rack::App::Endpoint
6
6
 
7
7
  require "rack/app/endpoint/config"
8
8
  require "rack/app/endpoint/builder"
9
+ require "rack/app/endpoint/catcher"
9
10
  require "rack/app/endpoint/executor"
10
11
 
11
12
  attr_reader :config
@@ -28,10 +28,14 @@ class Rack::App::Endpoint::Builder
28
28
  builder_block.call(builder)
29
29
  end
30
30
  builder.use(Rack::App::Middlewares::Configuration, @config)
31
+
31
32
  apply_hook_middlewares(builder)
32
33
  end
33
34
 
34
35
  def apply_hook_middlewares(builder)
36
+ if @config.app_class.before.length + @config.app_class.after.length > 0
37
+ builder.use(Rack::App::Endpoint::Catcher, @config)
38
+ end
35
39
  @config.app_class.before.each do |before_block|
36
40
  builder.use(Rack::App::Middlewares::Hooks::Before, before_block)
37
41
  end
@@ -0,0 +1,37 @@
1
+ class Rack::App::Endpoint::Catcher
2
+
3
+ def initialize(app, endpoint_properties)
4
+ @app = app
5
+ @endpoint_properties = endpoint_properties
6
+ end
7
+
8
+ def call(env)
9
+ handle_rack_response do
10
+ handle_response_body(env) do
11
+ @app.call(env)
12
+ end
13
+ end
14
+ end
15
+
16
+ protected
17
+
18
+ def handle_rack_response
19
+ catch(:rack_response) { return yield }.finish
20
+ end
21
+
22
+ def handle_response_body(env)
23
+ body = catch(:response_body) { return yield }
24
+ request_handler = env[Rack::App::Constants::ENV::HANDLER]
25
+ set_response_body(request_handler, body)
26
+ throw :rack_response, request_handler.response
27
+ end
28
+
29
+ EXTNAME = ::Rack::App::Constants::ENV::EXTNAME
30
+
31
+ def set_response_body(handler, response_body)
32
+ extname = handler.request.env[EXTNAME]
33
+ handler.response.headers.merge!(@endpoint_properties.serializer.response_headers_for(extname))
34
+ handler.response.write(@endpoint_properties.serializer.serialize(extname, response_body))
35
+ end
36
+
37
+ end
@@ -2,34 +2,22 @@ class Rack::App::Endpoint::Executor
2
2
 
3
3
  def initialize(endpoint_properties)
4
4
  @endpoint_properties = endpoint_properties
5
+ @catcher = Rack::App::Endpoint::Catcher.new(proc{ |env| execute(env) }, endpoint_properties)
5
6
  end
6
7
 
7
8
  def call(env)
8
- return catch(:rack_response){ execute(env) }.finish
9
+ @catcher.call(env)
9
10
  end
10
11
 
11
12
  protected
12
13
 
13
14
  def execute(env)
14
- request_handler = env[Rack::App::Constants::ENV::HANDLER]
15
- set_response_body(request_handler, get_response_body(request_handler))
16
- return request_handler.response
15
+ resp = evaluate_value(env[Rack::App::Constants::ENV::HANDLER])
16
+ throw type(resp), resp
17
17
  end
18
18
 
19
- def get_response_body(request_handler)
20
- catch :response_body do
21
- evaluated_value = evaluate_value(request_handler)
22
-
23
- evaluated_value
24
- end
25
- end
26
-
27
- EXTNAME = ::Rack::App::Constants::ENV::EXTNAME
28
-
29
- def set_response_body(handler, response_body)
30
- extname = handler.request.env[EXTNAME]
31
- handler.response.headers.merge!(@endpoint_properties.serializer.response_headers_for(extname))
32
- handler.response.write(@endpoint_properties.serializer.serialize(extname, response_body))
19
+ def type(resp)
20
+ resp.is_a?(Rack::Response) ? :rack_response : :response_body
33
21
  end
34
22
 
35
23
  def evaluate_value(request_handler)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-app
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.4.1
4
+ version: 6.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Luzsi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-07 00:00:00.000000000 Z
11
+ date: 2017-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -111,6 +111,7 @@ files:
111
111
  - lib/rack/app/constants/http_status_codes.rb
112
112
  - lib/rack/app/endpoint.rb
113
113
  - lib/rack/app/endpoint/builder.rb
114
+ - lib/rack/app/endpoint/catcher.rb
114
115
  - lib/rack/app/endpoint/config.rb
115
116
  - lib/rack/app/endpoint/executor.rb
116
117
  - lib/rack/app/error_handler.rb