rack-app 6.4.1 → 6.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 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