rack-app 5.0.0.rc1 → 5.0.0.rc2
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/.ruby-version +1 -0
- data/VERSION +1 -1
- data/lib/rack/app.rb +0 -1
- data/lib/rack/app/constants.rb +27 -14
- data/lib/rack/app/endpoint.rb +30 -18
- data/lib/rack/app/endpoint/properties.rb +29 -0
- data/lib/rack/app/instance_methods/core.rb +2 -2
- data/lib/rack/app/middlewares.rb +1 -0
- data/lib/rack/app/middlewares/method_override.rb +55 -0
- data/lib/rack/app/middlewares/params/parser.rb +1 -1
- data/lib/rack/app/middlewares/params/setter.rb +1 -1
- data/lib/rack/app/params.rb +3 -3
- data/lib/rack/app/request_configurator.rb +1 -1
- data/lib/rack/app/router.rb +4 -0
- data/lib/rack/app/router/base.rb +16 -4
- data/lib/rack/app/router/dynamic.rb +5 -5
- data/lib/rack/app/router/not_found.rb +14 -2
- data/lib/rack/app/router/static.rb +10 -11
- data/lib/rack/app/singleton_methods/http_methods.rb +19 -7
- data/lib/rack/app/singleton_methods/middleware.rb +6 -3
- data/lib/rack/app/singleton_methods/mounting.rb +1 -4
- data/lib/rack/app/singleton_methods/route_handling.rb +3 -12
- metadata +5 -3
- data/lib/rack/app/endpoint/not_found.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b130d9458099d27fab690cf3db1597ada7cac19
|
4
|
+
data.tar.gz: b05e1b11630efd3ced90361372634d121db73c25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d431d736219cce600153c1357dccb58742ac39babdaafadb3a0377954b55a56d5cca796e7c0dcc26dcfa105c4c21003c54b853a71bb3f78ef37e9983600fee3c
|
7
|
+
data.tar.gz: a8da83f4a90063bb491be7803615d05f795ccea24676700ba9b47073199730e4c6658a3868c59eb3b77508627a2db04e55ab25b45352a8b6280e62067acb2a70
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.3.0
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
5.0.0.
|
1
|
+
5.0.0.rc2
|
data/lib/rack/app.rb
CHANGED
data/lib/rack/app/constants.rb
CHANGED
@@ -1,21 +1,34 @@
|
|
1
1
|
module Rack::App::Constants
|
2
2
|
|
3
3
|
module HTTP
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
|
5
|
+
module METHOD
|
6
|
+
ANY = 'ANY'.freeze
|
7
|
+
GET = 'GET'.freeze
|
8
|
+
POST = 'POST'.freeze
|
9
|
+
PUT = 'PUT'.freeze
|
10
|
+
PATCH = 'PATCH'.freeze
|
11
|
+
DELETE = 'DELETE'.freeze
|
12
|
+
HEAD = 'HEAD'.freeze
|
13
|
+
OPTIONS = 'OPTIONS'.freeze
|
14
|
+
LINK = 'LINK'.freeze
|
15
|
+
UNLINK = 'UNLINK'.freeze
|
16
|
+
TRACE = 'TRACE'.freeze
|
17
|
+
end
|
18
|
+
|
19
|
+
METHODS = (METHOD.constants - [:ANY]).map(&:to_s).freeze
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
module ENV
|
24
|
+
PARSED_PARAMS = 'rack-app.parsed_params'
|
25
|
+
VALIDATED_PARAMS = 'rack-app.validated_params'
|
26
|
+
ORIGINAL_PATH_INFO = 'rack-app.original_path_info'.freeze
|
27
|
+
PATH_PARAMS_MATCHER = 'rack-app.path_params_matcher'.freeze
|
28
|
+
METHODOVERRIDE_ORIGINAL_METHOD = 'rack-app.methodoverride.original_method'.freeze
|
12
29
|
end
|
13
30
|
|
14
|
-
ORIGINAL_PATH_INFO = 'rack-app.original_path_info'.freeze
|
15
|
-
PATH_PARAMS_MATCHER = 'rack-app.path_params_matcher'.freeze
|
16
|
-
RACK_BASED_APPLICATION = '[Mounted Rack Application]'.freeze
|
17
31
|
MOUNTED_DIRECTORY = '[Mounted Directory]'.freeze
|
18
|
-
|
19
|
-
|
20
|
-
|
32
|
+
RACK_BASED_APPLICATION = '[Mounted Rack Application]'.freeze
|
33
|
+
|
21
34
|
end
|
data/lib/rack/app/endpoint.rb
CHANGED
@@ -1,25 +1,39 @@
|
|
1
|
+
require "rack/builder"
|
1
2
|
class Rack::App::Endpoint
|
3
|
+
require "rack/app/endpoint/properties"
|
2
4
|
|
3
|
-
|
5
|
+
def properties
|
6
|
+
@properties.to_hash
|
7
|
+
end
|
4
8
|
|
5
9
|
LAST_MODIFIED_HEADER = "Last-Modified".freeze
|
6
10
|
|
7
11
|
def initialize(properties)
|
8
|
-
@properties = properties
|
12
|
+
@properties = Rack::App::Endpoint::Properties.new(properties)
|
13
|
+
@endpoint_method_name = register_method_to_app_class(properties[:user_defined_logic])
|
14
|
+
end
|
9
15
|
|
10
|
-
|
11
|
-
|
12
|
-
|
16
|
+
def call(env)
|
17
|
+
to_app.call(env)
|
18
|
+
end
|
13
19
|
|
14
|
-
|
15
|
-
|
16
|
-
|
20
|
+
def to_app
|
21
|
+
builder = Rack::Builder.new
|
22
|
+
apply_middleware_build_blocks(builder)
|
23
|
+
builder.run(lambda { |env| self.call_without_middlewares(env) })
|
24
|
+
builder.to_app
|
25
|
+
end
|
17
26
|
|
18
|
-
|
27
|
+
protected
|
28
|
+
|
29
|
+
def apply_middleware_build_blocks(builder)
|
30
|
+
builder_blocks.each do |builder_block|
|
31
|
+
builder_block.call(builder)
|
32
|
+
end
|
19
33
|
end
|
20
34
|
|
21
|
-
def
|
22
|
-
@
|
35
|
+
def builder_blocks
|
36
|
+
@properties.app_class.middlewares + @properties.middleware_builders_blocks
|
23
37
|
end
|
24
38
|
|
25
39
|
def call_without_middlewares(env)
|
@@ -28,10 +42,8 @@ class Rack::App::Endpoint
|
|
28
42
|
return catch(:rack_response){ execute(request, response) }.finish
|
29
43
|
end
|
30
44
|
|
31
|
-
protected
|
32
|
-
|
33
45
|
def execute(request,response)
|
34
|
-
request_handler = @app_class.new
|
46
|
+
request_handler = @properties.app_class.new
|
35
47
|
request_handler.request = request
|
36
48
|
request_handler.response = response
|
37
49
|
set_response_body(response, get_response_body(request_handler))
|
@@ -41,24 +53,24 @@ class Rack::App::Endpoint
|
|
41
53
|
def get_response_body(request_handler)
|
42
54
|
catch :response_body do
|
43
55
|
evaluated_value = evaluate_value(request_handler)
|
44
|
-
|
56
|
+
|
45
57
|
evaluated_value
|
46
58
|
end
|
47
59
|
end
|
48
60
|
|
49
61
|
def set_response_body(response, response_body)
|
50
|
-
response.write(String(@serializer.serialize(response_body)))
|
62
|
+
response.write(String(@properties.serializer.serialize(response_body)))
|
51
63
|
end
|
52
64
|
|
53
65
|
def evaluate_value(request_handler)
|
54
|
-
@error_handler.execute_with_error_handling_for(request_handler) do
|
66
|
+
@properties.error_handler.execute_with_error_handling_for(request_handler) do
|
55
67
|
request_handler.__send__(@endpoint_method_name)
|
56
68
|
end
|
57
69
|
end
|
58
70
|
|
59
71
|
def register_method_to_app_class(proc)
|
60
72
|
method_name = '__' + ::Rack::App::Utils.uuid
|
61
|
-
@app_class.__send__(:define_method, method_name, &proc)
|
73
|
+
@properties.app_class.__send__(:define_method, method_name, &proc)
|
62
74
|
return method_name
|
63
75
|
end
|
64
76
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class Rack::App::Endpoint::Properties
|
2
|
+
|
3
|
+
def to_hash
|
4
|
+
@raw
|
5
|
+
end
|
6
|
+
|
7
|
+
def app_class
|
8
|
+
@raw[:app_class] || raise('missing app class')
|
9
|
+
end
|
10
|
+
|
11
|
+
def serializer
|
12
|
+
@raw[:serializer] ||= Rack::App::Serializer.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def error_handler
|
16
|
+
@raw[:error_handler] ||= Rack::App::ErrorHandler.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def middleware_builders_blocks
|
20
|
+
@raw[:middleware_builders_blocks] ||= []
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
def initialize(raw)
|
26
|
+
@raw = raw
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -3,11 +3,11 @@ module Rack::App::InstanceMethods::Core
|
|
3
3
|
attr_writer :request, :response
|
4
4
|
|
5
5
|
def params
|
6
|
-
request.env[::Rack::App::Constants::PARSED_PARAMS] ||= Rack::App::Params.new(request.env).to_hash
|
6
|
+
request.env[::Rack::App::Constants::ENV::PARSED_PARAMS] ||= Rack::App::Params.new(request.env).to_hash
|
7
7
|
end
|
8
8
|
|
9
9
|
def validated_params
|
10
|
-
request.env[::Rack::App::Constants::VALIDATED_PARAMS]
|
10
|
+
request.env[::Rack::App::Constants::ENV::VALIDATED_PARAMS]
|
11
11
|
end
|
12
12
|
|
13
13
|
def request
|
data/lib/rack/app/middlewares.rb
CHANGED
@@ -0,0 +1,55 @@
|
|
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
|
@@ -16,7 +16,7 @@ class Rack::App::Middlewares::Params::Parser
|
|
16
16
|
|
17
17
|
def set_params(env)
|
18
18
|
params = Rack::App::Params.new(env).to_hash
|
19
|
-
validated_params = (env[::Rack::App::Constants::VALIDATED_PARAMS] ||= {})
|
19
|
+
validated_params = (env[::Rack::App::Constants::ENV::VALIDATED_PARAMS] ||= {})
|
20
20
|
parse_params(validated_params, params)
|
21
21
|
end
|
22
22
|
|
data/lib/rack/app/params.rb
CHANGED
@@ -2,8 +2,8 @@ require 'cgi'
|
|
2
2
|
class Rack::App::Params
|
3
3
|
|
4
4
|
def to_hash
|
5
|
-
if @request_env[::Rack::App::Constants::PARSED_PARAMS]
|
6
|
-
@request_env[::Rack::App::Constants::PARSED_PARAMS]
|
5
|
+
if @request_env[::Rack::App::Constants::ENV::PARSED_PARAMS]
|
6
|
+
@request_env[::Rack::App::Constants::ENV::PARSED_PARAMS]
|
7
7
|
else
|
8
8
|
query_params.merge(request_path_params)
|
9
9
|
end
|
@@ -58,7 +58,7 @@ class Rack::App::Params
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def path_params_matcher
|
61
|
-
@request_env[::Rack::App::Constants::PATH_PARAMS_MATCHER] || {}
|
61
|
+
@request_env[::Rack::App::Constants::ENV::PATH_PARAMS_MATCHER] || {}
|
62
62
|
end
|
63
63
|
|
64
64
|
end
|
@@ -11,7 +11,7 @@ module Rack::App::RequestConfigurator
|
|
11
11
|
|
12
12
|
def path_info(env)
|
13
13
|
path_info = env[::Rack::PATH_INFO]
|
14
|
-
env[::Rack::App::Constants::ORIGINAL_PATH_INFO]= path_info
|
14
|
+
env[::Rack::App::Constants::ENV::ORIGINAL_PATH_INFO]= path_info
|
15
15
|
env[::Rack::PATH_INFO]= Rack::App::Utils.normalize_path(path_info)
|
16
16
|
end
|
17
17
|
|
data/lib/rack/app/router.rb
CHANGED
data/lib/rack/app/router/base.rb
CHANGED
@@ -6,10 +6,10 @@ class Rack::App::Router::Base
|
|
6
6
|
path_info= env[Rack::PATH_INFO]
|
7
7
|
|
8
8
|
context = fetch_context(request_method, path_info)
|
9
|
-
return unless context.is_a?(Hash) and not context[:
|
9
|
+
return unless context.is_a?(Hash) and not context[:app].nil?
|
10
10
|
|
11
11
|
format_env(context, env)
|
12
|
-
context[:
|
12
|
+
context[:app].call(env)
|
13
13
|
|
14
14
|
end
|
15
15
|
|
@@ -34,14 +34,26 @@ class Rack::App::Router::Base
|
|
34
34
|
return endpoint
|
35
35
|
end
|
36
36
|
|
37
|
+
def reset
|
38
|
+
compile_registered_endpoints!
|
39
|
+
end
|
40
|
+
|
37
41
|
protected
|
38
42
|
|
39
|
-
def
|
43
|
+
def compile_registered_endpoints!
|
40
44
|
raise('IMPLEMENTATION MISSING ERROR')
|
41
45
|
end
|
42
46
|
|
43
|
-
def
|
47
|
+
def fetch_context(request_method, request_path)
|
44
48
|
raise('IMPLEMENTATION MISSING ERROR')
|
45
49
|
end
|
46
50
|
|
51
|
+
def as_app(endpoint_or_app)
|
52
|
+
if endpoint_or_app.respond_to?(:to_app)
|
53
|
+
endpoint_or_app.to_app
|
54
|
+
else
|
55
|
+
endpoint_or_app
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
47
59
|
end
|
@@ -73,6 +73,7 @@ class Rack::App::Router::Dynamic < Rack::App::Router::Base
|
|
73
73
|
|
74
74
|
end
|
75
75
|
|
76
|
+
current_cluster[:app]= as_app(endpoint)
|
76
77
|
current_cluster[:endpoint]= endpoint
|
77
78
|
if current_cluster[:endpoint].respond_to?(:register_path_params_matcher)
|
78
79
|
current_cluster[:endpoint].register_path_params_matcher(path_params)
|
@@ -91,7 +92,7 @@ class Rack::App::Router::Dynamic < Rack::App::Router::Base
|
|
91
92
|
end
|
92
93
|
|
93
94
|
def clusters_for(request_method)
|
94
|
-
if ::Rack::App::Constants::HTTP::ANY == request_method
|
95
|
+
if ::Rack::App::Constants::HTTP::METHOD::ANY == request_method
|
95
96
|
supported_http_protocols.each do |cluster_type|
|
96
97
|
yield(main_cluster(cluster_type))
|
97
98
|
end
|
@@ -101,7 +102,7 @@ class Rack::App::Router::Dynamic < Rack::App::Router::Base
|
|
101
102
|
end
|
102
103
|
|
103
104
|
def supported_http_protocols
|
104
|
-
|
105
|
+
::Rack::App::Constants::HTTP::METHODS
|
105
106
|
end
|
106
107
|
|
107
108
|
|
@@ -111,7 +112,6 @@ class Rack::App::Router::Dynamic < Rack::App::Router::Base
|
|
111
112
|
last_mounted_directory = nil
|
112
113
|
last_mounted_app = nil
|
113
114
|
current_cluster = main_cluster(request_method)
|
114
|
-
|
115
115
|
normalized_request_path.split('/').each do |path_part|
|
116
116
|
|
117
117
|
last_mounted_directory = current_cluster[MOUNTED_DIRECTORY] || last_mounted_directory
|
@@ -145,8 +145,8 @@ class Rack::App::Router::Dynamic < Rack::App::Router::Base
|
|
145
145
|
|
146
146
|
def format_env(context, env)
|
147
147
|
mount_path = context[:options][:mount_path] rescue ''
|
148
|
-
env[::Rack::App::Constants::PATH_PARAMS_MATCHER]= context[:options][:path_params].dup
|
148
|
+
env[::Rack::App::Constants::ENV::PATH_PARAMS_MATCHER]= context[:options][:path_params].dup
|
149
149
|
env[::Rack::PATH_INFO].sub!(mount_path, '')
|
150
150
|
end
|
151
151
|
|
152
|
-
end
|
152
|
+
end
|
@@ -1,11 +1,23 @@
|
|
1
|
+
require "rack/response"
|
1
2
|
class Rack::App::Router::NotFound < Rack::App::Router::Base
|
2
3
|
|
3
4
|
def fetch_context(request_method, path_info)
|
4
|
-
{:
|
5
|
+
{:app => lambda{|env| not_found_response }}
|
5
6
|
end
|
6
7
|
|
7
8
|
def fetch_endpoint(request_method, path_info)
|
8
9
|
::Rack::App::Endpoint::NOT_FOUND
|
9
10
|
end
|
10
11
|
|
11
|
-
|
12
|
+
protected
|
13
|
+
|
14
|
+
def not_found_response
|
15
|
+
rack_response = Rack::Response.new
|
16
|
+
rack_response.status = 404
|
17
|
+
rack_response.write('404 Not Found')
|
18
|
+
rack_response.finish
|
19
|
+
end
|
20
|
+
|
21
|
+
def compile_registered_endpoints!
|
22
|
+
end
|
23
|
+
end
|
@@ -1,22 +1,21 @@
|
|
1
1
|
class Rack::App::Router::Static < Rack::App::Router::Base
|
2
2
|
|
3
|
-
def compile_registered_endpoints!
|
4
|
-
mapped_endpoint_routes.clear
|
5
|
-
endpoints.each do |endpoint|
|
6
|
-
request_method, request_path, endpoint_object = endpoint[:request_method], endpoint[:request_path], endpoint[:endpoint]
|
7
|
-
mapped_endpoint_routes[[request_method.to_s.upcase, request_path]]= endpoint_object
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
3
|
protected
|
12
4
|
|
13
5
|
def fetch_context(request_method, request_path)
|
14
|
-
|
15
|
-
|
6
|
+
app = mapped_endpoint_routes[[request_method, request_path]]
|
7
|
+
app && {:app => app}
|
16
8
|
end
|
17
9
|
|
18
10
|
def mapped_endpoint_routes
|
19
11
|
@mapped_endpoint_routes ||= {}
|
20
12
|
end
|
21
13
|
|
22
|
-
|
14
|
+
def compile_registered_endpoints!
|
15
|
+
mapped_endpoint_routes.clear
|
16
|
+
endpoints.each do |endpoint|
|
17
|
+
app = as_app(endpoint[:endpoint])
|
18
|
+
mapped_endpoint_routes[[endpoint[:request_method].to_s.upcase, endpoint[:request_path]]]= app
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -3,31 +3,43 @@ module Rack::App::SingletonMethods::HttpMethods
|
|
3
3
|
protected
|
4
4
|
|
5
5
|
def get(path = '/', &block)
|
6
|
-
add_route(::Rack::App::Constants::HTTP::GET, path, &block)
|
6
|
+
add_route(::Rack::App::Constants::HTTP::METHOD::GET, path, &block)
|
7
7
|
end
|
8
8
|
|
9
9
|
def post(path = '/', &block)
|
10
|
-
add_route(::Rack::App::Constants::HTTP::POST, path, &block)
|
10
|
+
add_route(::Rack::App::Constants::HTTP::METHOD::POST, path, &block)
|
11
11
|
end
|
12
12
|
|
13
13
|
def put(path = '/', &block)
|
14
|
-
add_route(::Rack::App::Constants::HTTP::PUT, path, &block)
|
14
|
+
add_route(::Rack::App::Constants::HTTP::METHOD::PUT, path, &block)
|
15
15
|
end
|
16
16
|
|
17
17
|
def delete(path = '/', &block)
|
18
|
-
add_route(::Rack::App::Constants::HTTP::DELETE, path, &block)
|
18
|
+
add_route(::Rack::App::Constants::HTTP::METHOD::DELETE, path, &block)
|
19
19
|
end
|
20
20
|
|
21
21
|
def head(path = '/', &block)
|
22
|
-
add_route(::Rack::App::Constants::HTTP::HEAD, path, &block)
|
22
|
+
add_route(::Rack::App::Constants::HTTP::METHOD::HEAD, path, &block)
|
23
23
|
end
|
24
24
|
|
25
25
|
def options(path = '/', &block)
|
26
|
-
add_route(::Rack::App::Constants::HTTP::OPTIONS, path, &block)
|
26
|
+
add_route(::Rack::App::Constants::HTTP::METHOD::OPTIONS, path, &block)
|
27
27
|
end
|
28
28
|
|
29
29
|
def patch(path = '/', &block)
|
30
|
-
add_route(::Rack::App::Constants::HTTP::PATCH, path, &block)
|
30
|
+
add_route(::Rack::App::Constants::HTTP::METHOD::PATCH, path, &block)
|
31
|
+
end
|
32
|
+
|
33
|
+
def link(path = '/', &block)
|
34
|
+
add_route(::Rack::App::Constants::HTTP::METHOD::LINK, path, &block)
|
35
|
+
end
|
36
|
+
|
37
|
+
def unlink(path = '/', &block)
|
38
|
+
add_route(::Rack::App::Constants::HTTP::METHOD::UNLINK, path, &block)
|
39
|
+
end
|
40
|
+
|
41
|
+
def trace(path = '/', &block)
|
42
|
+
add_route(::Rack::App::Constants::HTTP::METHOD::TRACE, path, &block)
|
31
43
|
end
|
32
44
|
|
33
45
|
def alias_endpoint(new_request_path, original_request_path)
|
@@ -1,10 +1,11 @@
|
|
1
1
|
module Rack::App::SingletonMethods::Middleware
|
2
2
|
|
3
|
-
protected
|
4
|
-
|
5
3
|
def middlewares(&block)
|
6
4
|
@middlewares ||= []
|
7
|
-
|
5
|
+
unless block.nil?
|
6
|
+
@middlewares << block
|
7
|
+
router.reset
|
8
|
+
end
|
8
9
|
@middlewares
|
9
10
|
end
|
10
11
|
|
@@ -14,6 +15,8 @@ module Rack::App::SingletonMethods::Middleware
|
|
14
15
|
middlewares{ |b| b.use(*args) }
|
15
16
|
end
|
16
17
|
|
18
|
+
protected
|
19
|
+
|
17
20
|
def only_next_endpoint_middlewares(&block)
|
18
21
|
@only_next_endpoint_middlewares ||= []
|
19
22
|
@only_next_endpoint_middlewares << block unless block.nil?
|
@@ -40,18 +40,15 @@ module Rack::App::SingletonMethods::Mounting
|
|
40
40
|
file_server = Rack::App::FileServer.new(Rack::App::Utils.expand_path(file_path))
|
41
41
|
request_path = Rack::App::Utils.join(@namespaces, options[:to], '**', '*')
|
42
42
|
router.register_endpoint!('GET', request_path, file_server, route_registration_properties)
|
43
|
-
@last_description = nil
|
44
43
|
end
|
45
44
|
|
46
45
|
def mount_rack_based_application(rack_based_app, options={})
|
47
46
|
router.register_endpoint!(
|
48
|
-
::Rack::App::Constants::HTTP::ANY,
|
47
|
+
::Rack::App::Constants::HTTP::METHOD::ANY,
|
49
48
|
Rack::App::Utils.join(@namespaces, options[:to], ::Rack::App::Constants::RACK_BASED_APPLICATION),
|
50
49
|
rack_based_app,
|
51
50
|
route_registration_properties
|
52
51
|
)
|
53
|
-
|
54
|
-
@last_description = nil
|
55
52
|
end
|
56
53
|
|
57
54
|
alias mount_app mount_rack_based_application
|
@@ -24,30 +24,21 @@ module Rack::App::SingletonMethods::RouteHandling
|
|
24
24
|
|
25
25
|
request_path = ::Rack::App::Utils.join(@namespaces, request_path)
|
26
26
|
|
27
|
-
builder = Rack::Builder.new
|
28
|
-
(middlewares + only_next_endpoint_middlewares).each do |builder_block|
|
29
|
-
builder_block.call(builder)
|
30
|
-
end
|
31
|
-
|
32
|
-
only_next_endpoint_middlewares.clear
|
33
|
-
|
34
27
|
properties = {
|
35
28
|
:user_defined_logic => block,
|
36
29
|
:request_method => request_method,
|
37
30
|
:request_path => request_path,
|
38
|
-
|
39
31
|
:error_handler => error,
|
40
32
|
:serializer => serializer,
|
41
|
-
:
|
33
|
+
:middleware_builders_blocks => only_next_endpoint_middlewares.dup,
|
42
34
|
:app_class => self
|
43
35
|
}
|
44
36
|
|
37
|
+
only_next_endpoint_middlewares.clear
|
45
38
|
|
46
39
|
endpoint = Rack::App::Endpoint.new(properties)
|
47
40
|
router.register_endpoint!(request_method, request_path, endpoint, route_registration_properties)
|
48
|
-
|
49
41
|
@route_registration_properties = nil
|
50
|
-
@last_description = nil
|
51
42
|
return endpoint
|
52
43
|
|
53
44
|
end
|
@@ -57,8 +48,8 @@ module Rack::App::SingletonMethods::RouteHandling
|
|
57
48
|
@namespaces ||= []
|
58
49
|
@namespaces.push(request_path_namespace)
|
59
50
|
yield
|
51
|
+
ensure
|
60
52
|
@namespaces.pop
|
61
|
-
nil
|
62
53
|
end
|
63
54
|
|
64
55
|
end
|
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: 5.0.0.
|
4
|
+
version: 5.0.0.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Luzsi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -78,6 +78,7 @@ files:
|
|
78
78
|
- ".gitignore"
|
79
79
|
- ".rspec"
|
80
80
|
- ".rubocop.yml"
|
81
|
+
- ".ruby-version"
|
81
82
|
- ".travis.yml"
|
82
83
|
- CODE_OF_CONDUCT.md
|
83
84
|
- CONTRIBUTING.md
|
@@ -105,7 +106,7 @@ files:
|
|
105
106
|
- lib/rack/app/cli/runner.rb
|
106
107
|
- lib/rack/app/constants.rb
|
107
108
|
- lib/rack/app/endpoint.rb
|
108
|
-
- lib/rack/app/endpoint/
|
109
|
+
- lib/rack/app/endpoint/properties.rb
|
109
110
|
- lib/rack/app/error_handler.rb
|
110
111
|
- lib/rack/app/extension.rb
|
111
112
|
- lib/rack/app/file_server.rb
|
@@ -116,6 +117,7 @@ files:
|
|
116
117
|
- lib/rack/app/instance_methods/serve_file.rb
|
117
118
|
- lib/rack/app/middlewares.rb
|
118
119
|
- lib/rack/app/middlewares/header_setter.rb
|
120
|
+
- lib/rack/app/middlewares/method_override.rb
|
119
121
|
- lib/rack/app/middlewares/params.rb
|
120
122
|
- lib/rack/app/middlewares/params/definition.rb
|
121
123
|
- lib/rack/app/middlewares/params/definition/options.rb
|
@@ -1,13 +0,0 @@
|
|
1
|
-
app_class = Class.new(Rack::App)
|
2
|
-
not_found_properties = {
|
3
|
-
:user_defined_logic => lambda {
|
4
|
-
response.status= 404
|
5
|
-
return '404 Not Found'
|
6
|
-
},
|
7
|
-
:request_method => 'GET',
|
8
|
-
:request_path => '\404',
|
9
|
-
:description => 'page not found',
|
10
|
-
:app_class => app_class
|
11
|
-
}
|
12
|
-
|
13
|
-
Rack::App::Endpoint::NOT_FOUND = Rack::App::Endpoint.new(not_found_properties)
|