rack-app 5.0.0.rc2 → 5.0.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/VERSION +1 -1
- data/lib/rack/app/constants.rb +1 -0
- data/lib/rack/app/endpoint.rb +14 -41
- data/lib/rack/app/endpoint/executor.rb +38 -0
- data/lib/rack/app/endpoint/properties.rb +15 -1
- data/lib/rack/app/middlewares.rb +2 -1
- data/lib/rack/app/middlewares/configuration.rb +24 -0
- data/lib/rack/app/middlewares/hooks.rb +4 -0
- data/lib/rack/app/middlewares/hooks/after.rb +14 -0
- data/lib/rack/app/middlewares/hooks/before.rb +13 -0
- data/lib/rack/app/singleton_methods.rb +2 -0
- data/lib/rack/app/singleton_methods/hooks.rb +15 -0
- metadata +9 -4
- data/lib/rack/app/middlewares/method_override.rb +0 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 85eef183f233ed422353b4658cc710fcddd6f3fa
|
4
|
+
data.tar.gz: c64e1dea7180304029ce7515fdf96fdfa2339d60
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c63f77fa26cf15b1a5312afdb6b199fd51d3d5fc79cc5f3bdd85728ce45002a5c8eee7de6ebe110506cf3941c0f7c6573485ef22e10a3d8b550cd31a193391ae
|
7
|
+
data.tar.gz: 282c092d984e8202bf4ce0d3cc81202033fa732822032ff804d8ef6241bc01acbfba817ecdb4358ff4210fbc101a8a478b7838fe30eff9e39de00ace2f7340a6
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
5.0.0
|
1
|
+
5.0.0
|
data/lib/rack/app/constants.rb
CHANGED
data/lib/rack/app/endpoint.rb
CHANGED
@@ -1,26 +1,25 @@
|
|
1
1
|
require "rack/builder"
|
2
2
|
class Rack::App::Endpoint
|
3
3
|
require "rack/app/endpoint/properties"
|
4
|
+
require "rack/app/endpoint/executor"
|
4
5
|
|
5
6
|
def properties
|
6
7
|
@properties.to_hash
|
7
8
|
end
|
8
9
|
|
9
|
-
LAST_MODIFIED_HEADER = "Last-Modified".freeze
|
10
|
-
|
11
10
|
def initialize(properties)
|
12
11
|
@properties = Rack::App::Endpoint::Properties.new(properties)
|
13
|
-
@endpoint_method_name = register_method_to_app_class(properties[:user_defined_logic])
|
14
12
|
end
|
15
13
|
|
16
14
|
def call(env)
|
17
15
|
to_app.call(env)
|
18
|
-
end
|
16
|
+
end
|
19
17
|
|
20
18
|
def to_app
|
21
19
|
builder = Rack::Builder.new
|
22
20
|
apply_middleware_build_blocks(builder)
|
23
|
-
|
21
|
+
@properties.endpoint_method_name
|
22
|
+
builder.run(Rack::App::Endpoint::Executor.new(@properties))
|
24
23
|
builder.to_app
|
25
24
|
end
|
26
25
|
|
@@ -30,47 +29,21 @@ class Rack::App::Endpoint
|
|
30
29
|
builder_blocks.each do |builder_block|
|
31
30
|
builder_block.call(builder)
|
32
31
|
end
|
32
|
+
builder.use(Rack::App::Middlewares::Configuration, @properties.app_class)
|
33
|
+
apply_hook_middlewares(builder)
|
33
34
|
end
|
34
35
|
|
35
|
-
def
|
36
|
-
@properties.app_class.
|
37
|
-
|
38
|
-
|
39
|
-
def call_without_middlewares(env)
|
40
|
-
request = Rack::Request.new(env)
|
41
|
-
response = Rack::Response.new
|
42
|
-
return catch(:rack_response){ execute(request, response) }.finish
|
43
|
-
end
|
44
|
-
|
45
|
-
def execute(request,response)
|
46
|
-
request_handler = @properties.app_class.new
|
47
|
-
request_handler.request = request
|
48
|
-
request_handler.response = response
|
49
|
-
set_response_body(response, get_response_body(request_handler))
|
50
|
-
return response
|
51
|
-
end
|
52
|
-
|
53
|
-
def get_response_body(request_handler)
|
54
|
-
catch :response_body do
|
55
|
-
evaluated_value = evaluate_value(request_handler)
|
56
|
-
|
57
|
-
evaluated_value
|
36
|
+
def apply_hook_middlewares(builder)
|
37
|
+
@properties.app_class.before.each do |before_block|
|
38
|
+
builder.use(Rack::App::Middlewares::Hooks::Before, before_block)
|
58
39
|
end
|
59
|
-
|
60
|
-
|
61
|
-
def set_response_body(response, response_body)
|
62
|
-
response.write(String(@properties.serializer.serialize(response_body)))
|
63
|
-
end
|
64
|
-
|
65
|
-
def evaluate_value(request_handler)
|
66
|
-
@properties.error_handler.execute_with_error_handling_for(request_handler) do
|
67
|
-
request_handler.__send__(@endpoint_method_name)
|
40
|
+
@properties.app_class.after.each do |after_block|
|
41
|
+
builder.use(Rack::App::Middlewares::Hooks::After, after_block)
|
68
42
|
end
|
69
43
|
end
|
70
44
|
|
71
|
-
def
|
72
|
-
|
73
|
-
@properties.app_class.__send__(:define_method, method_name, &proc)
|
74
|
-
return method_name
|
45
|
+
def builder_blocks
|
46
|
+
@properties.app_class.middlewares + @properties.middleware_builders_blocks
|
75
47
|
end
|
48
|
+
|
76
49
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class Rack::App::Endpoint::Executor
|
2
|
+
|
3
|
+
def initialize(endpoint_properties)
|
4
|
+
@endpoint_properties = endpoint_properties
|
5
|
+
end
|
6
|
+
|
7
|
+
def call(env)
|
8
|
+
return catch(:rack_response){ execute(env) }.finish
|
9
|
+
end
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def execute(env)
|
14
|
+
request_handler = env[Rack::App::Constants::ENV::REQUEST_HANDLER]
|
15
|
+
set_response_body(request_handler.response, get_response_body(request_handler))
|
16
|
+
return request_handler.response
|
17
|
+
end
|
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
|
+
def set_response_body(response, response_body)
|
28
|
+
response.write(String(@endpoint_properties.serializer.serialize(response_body)))
|
29
|
+
end
|
30
|
+
|
31
|
+
def evaluate_value(request_handler)
|
32
|
+
@endpoint_properties.error_handler.execute_with_error_handling_for(request_handler) do
|
33
|
+
request_handler.__send__(@endpoint_properties.endpoint_method_name)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Rack::App::Endpoint::Properties
|
2
2
|
|
3
|
-
def to_hash
|
3
|
+
def to_hash
|
4
4
|
@raw
|
5
5
|
end
|
6
6
|
|
@@ -20,10 +20,24 @@ class Rack::App::Endpoint::Properties
|
|
20
20
|
@raw[:middleware_builders_blocks] ||= []
|
21
21
|
end
|
22
22
|
|
23
|
+
def endpoint_method_name
|
24
|
+
@raw[:method_name] ||= register_method_to_app_class
|
25
|
+
end
|
26
|
+
|
23
27
|
protected
|
24
28
|
|
25
29
|
def initialize(raw)
|
26
30
|
@raw = raw
|
27
31
|
end
|
28
32
|
|
33
|
+
def register_method_to_app_class
|
34
|
+
method_name = '__' + ::Rack::App::Utils.uuid
|
35
|
+
app_class.__send__(:define_method, method_name, &logic_block)
|
36
|
+
return method_name
|
37
|
+
end
|
38
|
+
|
39
|
+
def logic_block
|
40
|
+
@raw[:user_defined_logic]
|
41
|
+
end
|
42
|
+
|
29
43
|
end
|
data/lib/rack/app/middlewares.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
require "rack/request"
|
2
|
+
require "rack/response"
|
3
|
+
class Rack::App::Middlewares::Configuration
|
4
|
+
|
5
|
+
def initialize(app, handler_class)
|
6
|
+
@handler_class = handler_class
|
7
|
+
@app = app
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(env)
|
11
|
+
env[Rack::App::Constants::ENV::REQUEST_HANDLER]= handler(env)
|
12
|
+
@app.call(env)
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def handler(env)
|
18
|
+
new_handler = @handler_class.new
|
19
|
+
new_handler.request = ::Rack::Request.new(env)
|
20
|
+
new_handler.response = ::Rack::Response.new
|
21
|
+
new_handler
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Rack::App::Middlewares::Hooks::After
|
2
|
+
|
3
|
+
def initialize(app, hook_block)
|
4
|
+
@app = app
|
5
|
+
@hook_block = hook_block
|
6
|
+
end
|
7
|
+
|
8
|
+
def call(env)
|
9
|
+
response = @app.call(env)
|
10
|
+
env[Rack::App::Constants::ENV::REQUEST_HANDLER].instance_exec(&@hook_block)
|
11
|
+
return response
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class Rack::App::Middlewares::Hooks::Before
|
2
|
+
|
3
|
+
def initialize(app, hook_block)
|
4
|
+
@app = app
|
5
|
+
@hook_block = hook_block
|
6
|
+
end
|
7
|
+
|
8
|
+
def call(env)
|
9
|
+
env[Rack::App::Constants::ENV::REQUEST_HANDLER].instance_exec(&@hook_block)
|
10
|
+
@app.call(env)
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -9,6 +9,7 @@ module Rack::App::SingletonMethods
|
|
9
9
|
require 'rack/app/singleton_methods/route_handling'
|
10
10
|
require 'rack/app/singleton_methods/settings'
|
11
11
|
require 'rack/app/singleton_methods/extensions'
|
12
|
+
require 'rack/app/singleton_methods/hooks'
|
12
13
|
|
13
14
|
include Rack::App::SingletonMethods::HttpMethods
|
14
15
|
include Rack::App::SingletonMethods::Inheritance
|
@@ -19,5 +20,6 @@ module Rack::App::SingletonMethods
|
|
19
20
|
include Rack::App::SingletonMethods::RouteHandling
|
20
21
|
include Rack::App::SingletonMethods::Settings
|
21
22
|
include Rack::App::SingletonMethods::Extensions
|
23
|
+
include Rack::App::SingletonMethods::Hooks
|
22
24
|
|
23
25
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Rack::App::SingletonMethods::Hooks
|
2
|
+
|
3
|
+
def before(&block)
|
4
|
+
@before_hooks ||= []
|
5
|
+
@before_hooks << block unless block.nil?
|
6
|
+
@before_hooks
|
7
|
+
end
|
8
|
+
|
9
|
+
def after(&block)
|
10
|
+
@after_hooks ||= []
|
11
|
+
@after_hooks << block unless block.nil?
|
12
|
+
@after_hooks
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-app
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.0
|
4
|
+
version: 5.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Luzsi
|
@@ -106,6 +106,7 @@ files:
|
|
106
106
|
- lib/rack/app/cli/runner.rb
|
107
107
|
- lib/rack/app/constants.rb
|
108
108
|
- lib/rack/app/endpoint.rb
|
109
|
+
- lib/rack/app/endpoint/executor.rb
|
109
110
|
- lib/rack/app/endpoint/properties.rb
|
110
111
|
- lib/rack/app/error_handler.rb
|
111
112
|
- lib/rack/app/extension.rb
|
@@ -116,8 +117,11 @@ files:
|
|
116
117
|
- lib/rack/app/instance_methods/payload.rb
|
117
118
|
- lib/rack/app/instance_methods/serve_file.rb
|
118
119
|
- lib/rack/app/middlewares.rb
|
120
|
+
- lib/rack/app/middlewares/configuration.rb
|
119
121
|
- lib/rack/app/middlewares/header_setter.rb
|
120
|
-
- lib/rack/app/middlewares/
|
122
|
+
- lib/rack/app/middlewares/hooks.rb
|
123
|
+
- lib/rack/app/middlewares/hooks/after.rb
|
124
|
+
- lib/rack/app/middlewares/hooks/before.rb
|
121
125
|
- lib/rack/app/middlewares/params.rb
|
122
126
|
- lib/rack/app/middlewares/params/definition.rb
|
123
127
|
- lib/rack/app/middlewares/params/definition/options.rb
|
@@ -135,6 +139,7 @@ files:
|
|
135
139
|
- lib/rack/app/serializer.rb
|
136
140
|
- lib/rack/app/singleton_methods.rb
|
137
141
|
- lib/rack/app/singleton_methods/extensions.rb
|
142
|
+
- lib/rack/app/singleton_methods/hooks.rb
|
138
143
|
- lib/rack/app/singleton_methods/http_methods.rb
|
139
144
|
- lib/rack/app/singleton_methods/inheritance.rb
|
140
145
|
- lib/rack/app/singleton_methods/middleware.rb
|
@@ -178,9 +183,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
178
183
|
version: '0'
|
179
184
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
180
185
|
requirements:
|
181
|
-
- - "
|
186
|
+
- - ">="
|
182
187
|
- !ruby/object:Gem::Version
|
183
|
-
version:
|
188
|
+
version: '0'
|
184
189
|
requirements: []
|
185
190
|
rubyforge_project:
|
186
191
|
rubygems_version: 2.5.1
|
@@ -1,55 +0,0 @@
|
|
1
|
-
class Rack::App::Middlewares::MethodOverride
|
2
|
-
|
3
|
-
ALLOWED_METHODS = %w[GET POST].freeze
|
4
|
-
METHOD_OVERRIDE_PARAM_KEY = "_method".freeze
|
5
|
-
HTTP_METHOD_OVERRIDE_HEADER = "HTTP_X_HTTP_METHOD_OVERRIDE".freeze
|
6
|
-
|
7
|
-
def initialize(app)
|
8
|
-
@app = app
|
9
|
-
end
|
10
|
-
|
11
|
-
def call(env)
|
12
|
-
if affected_request?(env)
|
13
|
-
try_override(env)
|
14
|
-
end
|
15
|
-
|
16
|
-
@app.call(env)
|
17
|
-
end
|
18
|
-
|
19
|
-
protected
|
20
|
-
|
21
|
-
def try_override(env)
|
22
|
-
method = method_override(env)
|
23
|
-
if valid_https_method?(method)
|
24
|
-
set_request_method(method, env)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def set_request_method(method, env)
|
29
|
-
env[Rack::App::Constants::ENV::METHODOVERRIDE_ORIGINAL_METHOD] = env[Rack::REQUEST_METHOD]
|
30
|
-
env[Rack::REQUEST_METHOD] = method
|
31
|
-
end
|
32
|
-
|
33
|
-
def valid_https_method?(method)
|
34
|
-
Rack::App::Constants::HTTP::METHODS.include?(method)
|
35
|
-
end
|
36
|
-
|
37
|
-
def affected_request?(env)
|
38
|
-
ALLOWED_METHODS.include?(env[Rack::REQUEST_METHOD])
|
39
|
-
end
|
40
|
-
|
41
|
-
def method_override(env)
|
42
|
-
req = Rack::Request.new(env)
|
43
|
-
method = env[HTTP_METHOD_OVERRIDE_HEADER] ||
|
44
|
-
method_override_param(req,:POST) ||
|
45
|
-
method_override_param(req,:GET)
|
46
|
-
|
47
|
-
method.to_s.upcase
|
48
|
-
end
|
49
|
-
|
50
|
-
def method_override_param(req, http_method)
|
51
|
-
req.__send__(http_method)[METHOD_OVERRIDE_PARAM_KEY]
|
52
|
-
rescue Rack::Utils::InvalidParameterError, Rack::Utils::ParameterTypeError
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|