rack-app 5.1.0 → 5.2.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: c43fab6a1ba24663ef2b9295f9d34a093d65f919
4
- data.tar.gz: d9c1de6b460aaf5f2d4fde0e87d1845a41095115
3
+ metadata.gz: 10f50fab86de1a0048be77118f717f557c3fcfc9
4
+ data.tar.gz: 84ec803fcb8677e60b56ef0b7c1362f792f62e2e
5
5
  SHA512:
6
- metadata.gz: e96d27d2479d291d4d79dcd14e09d9b764bd2c942b9ba747ea0fe18677123243cc67de07fa39c8bbfdb7de27b45adbb05e86a7bbe98f1fed0f7143040f790fee
7
- data.tar.gz: ed4bdf700375dd5dc3e4f915af56d0531ae20772a9110e61b80323f116191f2f2a03ffe1155957cfc9ed188b0e694042c44b5b1d1955fabb52ab7ece3ff29f9b
6
+ metadata.gz: 0ed0aeb5c5e1969ded36b657d28265f1b9d5cec2120d9277a5515ec0ab441154bbb1744d6f03de288ce853daa471fe5175bf9354a30f2daa1c4ae1f52c4cf8c5
7
+ data.tar.gz: 5548b69b220ba01de870451750cb624b0e94f4ce41fb5bdb92b8563ebde88095c7bb46a74d53f744491e1684a231e27233fb2d9e533c1ea906a3454e2b75522d
@@ -1,5 +1,5 @@
1
1
  language: ruby
2
- script: rspec spec
2
+ script: rspec spec -f d
3
3
 
4
4
  install:
5
5
  - gem update bundler
@@ -32,7 +32,7 @@ env:
32
32
  - VERBOSE=true
33
33
  - TIMEOUT=1
34
34
  - BENCHMARK_QUANTITY=100000
35
- - STREAM_FILE_SIZE=1024
35
+ - STREAM_FILE_SIZE=68
36
36
 
37
37
  branches:
38
38
  only:
data/README.md CHANGED
@@ -4,8 +4,6 @@
4
4
  [travis-link]: http://travis-ci.org/rack-app/rack-app
5
5
  [travis-home]: http://travis-ci.org/
6
6
 
7
- ![Rack::App](http://rack-app-website.herokuapp.com/img/msruby_old.png)
8
-
9
7
  Your next favourite rack based micro framework that is totally addition free!
10
8
  Have a cup of awesomeness with your performance designed framework!
11
9
 
@@ -169,7 +167,7 @@ class App < Rack::App
169
167
  stream do |out|
170
168
  out << 'data row'
171
169
  end
172
- end
170
+ end
173
171
 
174
172
  end
175
173
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 5.1.0
1
+ 5.2.0
@@ -2,6 +2,9 @@ require "rack/request"
2
2
  require "rack/response"
3
3
  class Rack::App::Middlewares::Configuration
4
4
 
5
+ require "rack/app/middlewares/configuration/path_info_formatter"
6
+ require "rack/app/middlewares/configuration/path_params_matcher"
7
+
5
8
  def initialize(app, options={})
6
9
  @handler_class = options[:app_class] || raise
7
10
  @serializer = options[:serializer] || raise
@@ -0,0 +1,14 @@
1
+ class Rack::App::Middlewares::Configuration::PathInfoFormatter
2
+
3
+ def initialize(app, cut_string_from_path)
4
+ @cut_string_from_path = cut_string_from_path
5
+ @app = app
6
+ end
7
+
8
+ def call(env)
9
+ env[::Rack::App::Constants::ENV::ORIGINAL_PATH_INFO]= env[::Rack::PATH_INFO].dup
10
+ env[::Rack::PATH_INFO].sub!(@cut_string_from_path, '')
11
+ @app.call(env)
12
+ end
13
+
14
+ end
@@ -0,0 +1,14 @@
1
+ class Rack::App::Middlewares::Configuration::PathParamsMatcher
2
+
3
+ def initialize(app, path_params)
4
+ @path_params = path_params
5
+ @app = app
6
+ end
7
+
8
+ def call(env)
9
+ env[::Rack::App::Constants::ENV::PATH_PARAMS_MATCHER]= @path_params.dup
10
+
11
+ @app.call(env)
12
+ end
13
+
14
+ end
@@ -8,29 +8,26 @@ class Rack::App::Router::Base
8
8
  context = fetch_context(request_method, path_info)
9
9
  return unless context.is_a?(Hash) and not context[:app].nil?
10
10
 
11
- format_env(context, env)
12
11
  context[:app].call(env)
13
-
14
12
  end
15
13
 
16
- def format_env(context, env)
17
- end
18
14
 
19
15
  def endpoints
20
16
  @endpoints ||= []
21
17
  end
22
18
 
23
19
  def register_endpoint!(request_method, request_path, endpoint, properties={})
20
+ normalized_request_path = Rack::App::Utils.normalize_path(request_path)
24
21
  endpoints.push(
25
22
  {
26
23
  :request_method => request_method,
27
- :request_path => Rack::App::Utils.normalize_path(request_path),
24
+ :request_path => normalized_request_path,
28
25
  :endpoint => endpoint,
29
26
  :properties => properties
30
27
  }
31
28
  )
32
29
 
33
- reset
30
+ compile_endpoint!(request_method, normalized_request_path, endpoint)
34
31
  return endpoint
35
32
  end
36
33
 
@@ -41,6 +38,10 @@ class Rack::App::Router::Base
41
38
 
42
39
  protected
43
40
 
41
+ def compile_endpoint!(request_method, request_path, endpoint)
42
+ raise(NotImplementedError)
43
+ end
44
+
44
45
  def clean_routes!
45
46
  raise(NotImplementedError)
46
47
  end
@@ -39,18 +39,20 @@ class Rack::App::Router::Dynamic < Rack::App::Router::Base
39
39
 
40
40
  def compile_registered_endpoints!
41
41
  endpoints.each do |endpoint_prop|
42
- compile_endpoint(endpoint_prop[:request_method], endpoint_prop[:request_path], endpoint_prop[:endpoint])
42
+ compile_endpoint!(endpoint_prop[:request_method], endpoint_prop[:request_path], endpoint_prop[:endpoint])
43
43
  end
44
44
  end
45
45
 
46
- def compile_endpoint(request_method, request_path, endpoint)
46
+ def compile_endpoint!(request_method, request_path, endpoint)
47
47
  clusters_for(request_method) do |current_cluster|
48
48
 
49
49
  break_build = false
50
50
  path_params = {}
51
- mount_path = ''
52
51
  options = {}
53
52
 
53
+ builder = Rack::Builder.new
54
+ builder.use(Rack::App::Middlewares::Configuration::PathParamsMatcher, path_params)
55
+
54
56
  request_path_parts = request_path.split('/')
55
57
  request_path_parts.each.with_index do |path_part, index|
56
58
 
@@ -64,7 +66,10 @@ class Rack::App::Router::Dynamic < Rack::App::Router::Base
64
66
 
65
67
  elsif path_part_is_a_mounted_rack_based_application?(path_part)
66
68
  break_build = true
67
- mount_path = calculate_mount_path(request_path_parts)
69
+ builder.use(
70
+ Rack::App::Middlewares::Configuration::PathInfoFormatter,
71
+ calculate_mount_path(request_path_parts)
72
+ )
68
73
  MOUNTED_APPLICATION
69
74
 
70
75
  else
@@ -76,16 +81,16 @@ class Rack::App::Router::Dynamic < Rack::App::Router::Base
76
81
 
77
82
  end
78
83
 
79
- current_cluster[:app]= as_app(endpoint)
84
+
85
+ builder.run(as_app(endpoint))
86
+ current_cluster[:app]= builder.to_app
87
+
80
88
  current_cluster[:endpoint]= endpoint
81
89
  if current_cluster[:endpoint].respond_to?(:register_path_params_matcher)
82
90
  current_cluster[:endpoint].register_path_params_matcher(path_params)
83
91
  end
84
92
 
85
- options[:mount_path]= mount_path
86
- options[:path_params]= path_params
87
93
  current_cluster[:options]= options
88
-
89
94
  end
90
95
  end
91
96
 
@@ -146,10 +151,4 @@ class Rack::App::Router::Dynamic < Rack::App::Router::Base
146
151
 
147
152
  end
148
153
 
149
- def format_env(context, env)
150
- mount_path = context[:options][:mount_path] rescue ''
151
- env[::Rack::App::Constants::ENV::PATH_PARAMS_MATCHER]= context[:options][:path_params].dup
152
- env[::Rack::PATH_INFO].sub!(mount_path, '')
153
- end
154
-
155
154
  end
@@ -15,10 +15,13 @@ class Rack::App::Router::Static < Rack::App::Router::Base
15
15
  mapped_endpoint_routes.clear
16
16
  end
17
17
 
18
+ def compile_endpoint!(request_method, request_path, endpoint)
19
+ mapped_endpoint_routes[[request_method.to_s.upcase, request_path]]= as_app(endpoint)
20
+ end
21
+
18
22
  def compile_registered_endpoints!
19
23
  endpoints.each do |endpoint|
20
- app = as_app(endpoint[:endpoint])
21
- mapped_endpoint_routes[[endpoint[:request_method].to_s.upcase, endpoint[:request_path]]]= app
24
+ compile_endpoint!(endpoint[:request_method],endpoint[:request_path], endpoint[:endpoint])
22
25
  end
23
26
  end
24
27
 
@@ -26,18 +26,16 @@ module Rack::App::Test
26
26
  end
27
27
 
28
28
  def rack_app(&block)
29
-
30
29
  @rack_app ||= lambda do
31
- app_class = defined?(__rack_app_class__) ? __rack_app_class__ : nil
32
- constructors = []
33
- if defined?(__rack_app_constructor__) and __rack_app_constructor__.is_a?(Proc)
34
- constructors << __rack_app_constructor__
30
+ if defined?(__rack_app_class__)
31
+ __rack_app_class__
32
+ elsif defined?(described_class) && described_class.respond_to?(:call)
33
+ described_class
34
+ else
35
+ raise('missing class definition')
35
36
  end
36
- Rack::App::Test::Utils.rack_app_by(app_class, constructors)
37
- end.call
38
-
37
+ end.call
39
38
  block.is_a?(Proc) ? @rack_app.instance_exec(&block) : @rack_app
40
-
41
39
  end
42
40
 
43
41
  end
@@ -1,9 +1,14 @@
1
1
  module Rack::App::Test::SingletonMethods
2
2
 
3
3
  def rack_app(rack_app_class=nil, &constructor)
4
- in_this_context(:__rack_app_class__) { rack_app_class }
5
- in_this_context(:__rack_app_constructor__) { constructor }
6
- nil
4
+ klass = if !rack_app_class.nil? && rack_app_class.respond_to?(:call)
5
+ rack_app_class
6
+ else
7
+ Class.new(Rack::App)
8
+ end
9
+
10
+ klass.class_eval(&constructor) unless constructor.nil?
11
+ return in_this_context(:__rack_app_class__){ klass }
7
12
  end
8
13
 
9
14
  def in_this_context(name, &block)
@@ -12,4 +17,4 @@ module Rack::App::Test::SingletonMethods
12
17
  define_method(name, &block)
13
18
  end
14
19
 
15
- end
20
+ end
@@ -10,12 +10,6 @@ module Rack::App::Test::Utils
10
10
  properties
11
11
  end
12
12
 
13
- def rack_app_by(subject_class, constructors)
14
- app_class = subject_class.respond_to?(:call) ? subject_class : Class.new(Rack::App)
15
- constructors.each { |constructor| app_class.class_eval(&constructor) }
16
- return app_class
17
- end
18
-
19
13
  def env_by(properties)
20
14
 
21
15
  properties = format_properties(properties)
@@ -0,0 +1,29 @@
1
+ rack_api_lib_folder = File.join(File.dirname(__FILE__), '..', 'lib')
2
+ $LOAD_PATH.unshift(rack_api_lib_folder)
3
+
4
+ require "rack/app"
5
+ require "rack/mock"
6
+ require "benchmark"
7
+
8
+ class App < Rack::App
9
+
10
+ get "/a/b/c/:d/e/f/:g/h/i/j/k/l/m/n/o/p/q/:something" do
11
+ return 'Hello, World!'
12
+ end
13
+
14
+ end
15
+
16
+
17
+ request = Rack::MockRequest.new(App)
18
+
19
+ Benchmark.bm do |x|
20
+ x.report do
21
+ request.get("/a/b/c/dog/e/f/goat/h/i/j/k/l/m/n/o/p/q/chicken" )
22
+ end
23
+ end
24
+
25
+ result = Benchmark.measure do
26
+
27
+ end
28
+
29
+ puts result
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.1.0
4
+ version: 5.2.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: 2016-08-21 00:00:00.000000000 Z
11
+ date: 2016-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -119,6 +119,8 @@ files:
119
119
  - lib/rack/app/instance_methods/streaming.rb
120
120
  - lib/rack/app/middlewares.rb
121
121
  - lib/rack/app/middlewares/configuration.rb
122
+ - lib/rack/app/middlewares/configuration/path_info_formatter.rb
123
+ - lib/rack/app/middlewares/configuration/path_params_matcher.rb
122
124
  - lib/rack/app/middlewares/header_setter.rb
123
125
  - lib/rack/app/middlewares/hooks.rb
124
126
  - lib/rack/app/middlewares/hooks/after.rb
@@ -172,6 +174,7 @@ files:
172
174
  - rack-app.gemspec
173
175
  - spec_files.txt
174
176
  - spike/array_vs_proc.rb
177
+ - spike/long_endpoint.rb
175
178
  - spike/method_vs_instance_exec.rb
176
179
  - spike/return_vs_throw.rb
177
180
  - src/Net__HTTP Cheat Sheet.pdf