rack-app 5.11.1 → 5.12.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: 4d2a02f6b4e7653fa9647f92c3aff43878fd64c2
4
- data.tar.gz: e262d7601e24a4f451ffa43dcabfd1ca0bab0220
3
+ metadata.gz: ad41bbced4baeeea08b32f690ed2268453b9491b
4
+ data.tar.gz: 5b02692483edeeffb9aaf5e8f5d15ba763f426e6
5
5
  SHA512:
6
- metadata.gz: bb38fe1f45db780873148bdf662baa41bc0cf84762204aa3be46ee8ffaa7495b6bfa707dc8a93069ee3f6509271bed3f70734491c331fa9cee5348544a12403c
7
- data.tar.gz: 3177c3c9643288694a0d8ec3f51ec644cf5e9ee3a9e787e8169952b850e97df51af114dd20f3b02056fa059c02eb6bb1ca9f30d192882835febda8147eb85539
6
+ metadata.gz: 522f2d363ead4984e3afb39c81f801e8aec3f73cdfb6f897729756af7635a8ae40d0290f5257b99124f7bf3d9de9b3f14f1741d5868762d3dd5cdc0d2ff63619
7
+ data.tar.gz: 714c400a866ed8f47c386ea7dafdee6562ab97f590338b8f45d3bdd5b5fec04981afbd47dd8c9df951a6d33c0c3c9bbb48101432caef42de202859b1734cda63
data/VERSION CHANGED
@@ -1 +1 @@
1
- 5.11.1
1
+ 5.12.0
@@ -38,6 +38,7 @@ module Rack::App::Constants
38
38
  REQUEST_PATH = Rack::App::Constants.rack_constant(:REQUEST_PATH, "REQUEST_PATH")
39
39
  REQUEST_METHOD = Rack::App::Constants.rack_constant(:REQUEST_METHOD, "REQUEST_METHOD")
40
40
 
41
+ ROUTER = 'rack-app.router'.freeze
41
42
  EXTNAME = 'rack-app.extname'.freeze
42
43
  SERIALIZER = 'rack-app.serializer'.freeze
43
44
  CONTENT_TYPE = 'CONTENT_TYPE'.freeze
@@ -30,4 +30,10 @@ class Rack::App::Endpoint
30
30
  @config.application || self.class::Builder.new(@config).build
31
31
  end
32
32
 
33
+ def rack_app?
34
+ !!@config.app_class
35
+ rescue
36
+ false
37
+ end
38
+
33
39
  end
@@ -3,6 +3,7 @@ module Rack::App::InstanceMethods
3
3
  require 'rack/app/instance_methods/core'
4
4
  require 'rack/app/instance_methods/http_status'
5
5
  require 'rack/app/instance_methods/redirect_to'
6
+ require 'rack/app/instance_methods/path_to'
6
7
  require 'rack/app/instance_methods/payload'
7
8
  require 'rack/app/instance_methods/serve_file'
8
9
  require 'rack/app/instance_methods/streaming'
@@ -10,6 +11,7 @@ module Rack::App::InstanceMethods
10
11
  include Rack::App::InstanceMethods::Core
11
12
  include Rack::App::InstanceMethods::HTTPStatus
12
13
  include Rack::App::InstanceMethods::RedirectTo
14
+ include Rack::App::InstanceMethods::PathTo
13
15
  include Rack::App::InstanceMethods::Payload
14
16
  include Rack::App::InstanceMethods::ServeFile
15
17
  include Rack::App::InstanceMethods::Streaming
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ module Rack::App::InstanceMethods::PathTo
3
+ def path_to(defined_path, options = {})
4
+ app_class = options[:class] || self.class
5
+
6
+ query_string_hash = options[:params] || {}
7
+ options.each do |k, v|
8
+ k.is_a?(String) && query_string_hash[k] = v
9
+ end
10
+
11
+ router = request.env[Rack::App::Constants::ENV::ROUTER]
12
+ final_path = router.final_path_for(app_class, defined_path)
13
+
14
+ path_keys = final_path.scan(/:(\w+)/).flatten
15
+
16
+ path_keys.each do |key|
17
+ value = query_string_hash.delete(key) || params[key] || raise("missing path-key value for #{key}!")
18
+ final_path.gsub!(/:#{key}/, value.to_s)
19
+ end
20
+
21
+ unless query_string_hash.empty?
22
+ final_path.concat("?" + Rack::App::Utils.encode_www_form(query_string_hash))
23
+ end
24
+
25
+ final_path
26
+ end
27
+ end
@@ -12,6 +12,7 @@ class Rack::App::Router
12
12
  end
13
13
 
14
14
  def call(env)
15
+ env[Rack::App::Constants::ENV::ROUTER]= self
15
16
  @tree.call(env) || NOT_FOUND_APP.call(env)
16
17
  end
17
18
 
@@ -27,6 +28,7 @@ class Rack::App::Router
27
28
 
28
29
  # add ! to method name
29
30
  def reset
31
+ @lookup_paths = Hash.new #(Hash.new)
30
32
  @tree = Rack::App::Router::Tree.new
31
33
  compile_registered_endpoints!
32
34
  end
@@ -61,6 +63,10 @@ class Rack::App::Router
61
63
 
62
64
  end
63
65
 
66
+ def final_path_for(klass, defined_path)
67
+ (@lookup_paths[klass][defined_path] || raise("missing path reference: #{klass}/#{original_path}")).dup
68
+ end
69
+
64
70
  protected
65
71
 
66
72
  def initialize
@@ -75,6 +81,15 @@ class Rack::App::Router
75
81
 
76
82
  def compile_endpoint!(endpoint)
77
83
  @tree.add(endpoint)
84
+ add_to_lookup_paths(endpoint)
85
+ end
86
+
87
+ def add_to_lookup_paths(endpoint)
88
+ return unless endpoint.rack_app?
89
+ def_path = endpoint.config.defined_request_path
90
+ final_path = endpoint.request_path
91
+ dictionary = @lookup_paths[endpoint.config.app_class] ||= {}
92
+ dictionary[def_path]= final_path
78
93
  end
79
94
 
80
95
  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.11.1
4
+ version: 5.12.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-02-05 00:00:00.000000000 Z
11
+ date: 2017-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -117,6 +117,7 @@ files:
117
117
  - lib/rack/app/instance_methods.rb
118
118
  - lib/rack/app/instance_methods/core.rb
119
119
  - lib/rack/app/instance_methods/http_status.rb
120
+ - lib/rack/app/instance_methods/path_to.rb
120
121
  - lib/rack/app/instance_methods/payload.rb
121
122
  - lib/rack/app/instance_methods/redirect_to.rb
122
123
  - lib/rack/app/instance_methods/serve_file.rb
@@ -148,7 +149,6 @@ files:
148
149
  - lib/rack/app/request_configurator.rb
149
150
  - lib/rack/app/request_stream.rb
150
151
  - lib/rack/app/router.rb
151
- - lib/rack/app/router/base.rb
152
152
  - lib/rack/app/router/tree.rb
153
153
  - lib/rack/app/router/tree/branch.rb
154
154
  - lib/rack/app/router/tree/env.rb
@@ -1,75 +0,0 @@
1
- class Rack::App::Router::Base
2
-
3
- def call(env)
4
- app = get_app(env)
5
- app && app.call(env)
6
- end
7
-
8
- def endpoints
9
- @endpoints ||= []
10
- end
11
-
12
- def register_endpoint!(endpoint)
13
- endpoints.push(endpoint)
14
- compile_endpoint!(endpoint)
15
- return endpoint
16
- end
17
-
18
- def reset
19
- clean_routes!
20
- compile_registered_endpoints!
21
- end
22
-
23
- protected
24
-
25
- def get_app(env)
26
- raise(NotImplementedError)
27
- end
28
-
29
- def compile_endpoint!(endpoint)
30
- raise(NotImplementedError)
31
- end
32
-
33
- def clean_routes!
34
- raise(NotImplementedError)
35
- end
36
-
37
- def compile_registered_endpoints!
38
- raise(NotImplementedError)
39
- end
40
-
41
- def fetch_context(request_method, request_path)
42
- raise(NotImplementedError)
43
- end
44
-
45
- def as_app(endpoint_or_app)
46
- if endpoint_or_app.respond_to?(:to_app)
47
- endpoint_or_app.to_app
48
- else
49
- endpoint_or_app
50
- end
51
- end
52
-
53
- def find_by_path_infos(env)
54
- yield(raw_path_info(env)) || yield(formatted_path_info(env))
55
- end
56
-
57
- def get_request_method(env)
58
- env[::Rack::App::Constants::ENV::REQUEST_METHOD]
59
- end
60
-
61
- def raw_path_info(env)
62
- env[::Rack::App::Constants::ENV::PATH_INFO]
63
- end
64
-
65
- def formatted_path_info(env)
66
- path_info = raw_path_info(env).dup
67
- path_info.slice!(/#{Regexp.escape(extname(env))}$/)
68
- path_info
69
- end
70
-
71
- def extname(env)
72
- env[::Rack::App::Constants::ENV::EXTNAME]
73
- end
74
-
75
- end