rack-app 8.1.0 → 9.0.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
  SHA256:
3
- metadata.gz: 64e849802e4a5ab4f0ecf95fa4bf5d3e6181eb27d98bd84563e37992cc7b477d
4
- data.tar.gz: 360ab75719832c97ef9e52b4db59491181fe031a2aafc86158934256b2833a98
3
+ metadata.gz: d6895f4a62b9e5714c7f31f100ffdd705dfb3af6d4e73f823b99fca71526602f
4
+ data.tar.gz: 8377e012c98cc1010ffb9af5cca8ae46d79d9bb4dd8ad80799eb2e02fef2aff9
5
5
  SHA512:
6
- metadata.gz: 171bcfff77ee8eba3aaa8d3bea901394dd6117cf00d78f8c54b072d58c3ce1e7bc4a4212823866c94539128f2f6190c836c3277fddea1322d11cd0f1f9611181
7
- data.tar.gz: 9830e2e3ef4809518e839efc745e7a9452359d0540603ad727b2832ce61e67d678159445bc3da19b13cfc3b1fbb858d0374a97b7883ca145f7ed3cdcfe81ee58
6
+ metadata.gz: 21c9910e0cea0f738cab34e536cd9c180ef29f611ceaa54cb1909feddb6e0749ad6791bec4ef2a97d17d5da2267d28371773d77e70b4c8c813d79ac776bc836b
7
+ data.tar.gz: 2ad9151b5b2570acab5b52631ec8298ac48182fc4869075ba30a42f706f666f5580143fb3fbae7332145431cee1d08e2df87538df46337f96ce1699c7a88be83
data/VERSION CHANGED
@@ -1 +1 @@
1
- 8.1.0
1
+ 9.0.0
@@ -11,17 +11,17 @@ module Rack::App::Constants
11
11
  module HTTP
12
12
 
13
13
  module METHOD
14
- ANY = 'ANY'.freeze
15
- GET = 'GET'.freeze
16
- POST = 'POST'.freeze
17
- PUT = 'PUT'.freeze
18
- PATCH = 'PATCH'.freeze
19
- DELETE = 'DELETE'.freeze
20
- HEAD = 'HEAD'.freeze
14
+ ANY = 'ANY'.freeze
15
+ GET = 'GET'.freeze
16
+ POST = 'POST'.freeze
17
+ PUT = 'PUT'.freeze
18
+ PATCH = 'PATCH'.freeze
19
+ DELETE = 'DELETE'.freeze
20
+ HEAD = 'HEAD'.freeze
21
21
  OPTIONS = 'OPTIONS'.freeze
22
- LINK = 'LINK'.freeze
23
- UNLINK = 'UNLINK'.freeze
24
- TRACE = 'TRACE'.freeze
22
+ LINK = 'LINK'.freeze
23
+ UNLINK = 'UNLINK'.freeze
24
+ TRACE = 'TRACE'.freeze
25
25
  end
26
26
 
27
27
  METHODS = (METHOD.constants - [:ANY]).map(&:to_s).freeze
@@ -40,6 +40,7 @@ module Rack::App::Constants
40
40
 
41
41
  ROUTER = 'rack-app.router'.freeze
42
42
  HANDLER = 'rack-app.handler'.freeze
43
+ HANDLERS = 'rack-app.handlers'.freeze
43
44
  EXTNAME = 'rack-app.extname'.freeze
44
45
  SERIALIZER = 'rack-app.serializer'.freeze
45
46
  CONTENT_TYPE = 'CONTENT_TYPE'.freeze
@@ -49,7 +50,7 @@ module Rack::App::Constants
49
50
 
50
51
  MERGED_PARAMS = 'rack-app.params.merged'.freeze
51
52
  VALIDATED_PARAMS = 'rack-app.params.validated'.freeze
52
- QUERY_STRING_PARAMS = 'rack-app.params.query_string'.freeze
53
+ QUERY_STRING_PARAMS = 'rack-app.params.query_string'.freeze
53
54
  PATH_SEGMENTS_PARAMS = 'rack-app.params.path_segments'.freeze
54
55
 
55
56
  PAYLOAD_PARSER = 'rack-app.payload.parser'.freeze
@@ -0,0 +1,17 @@
1
+ class Rack::App::Handlers < ::Hash
2
+ attr_reader :env, :request, :response
3
+
4
+ def initialize(env, request, response)
5
+ @env = env
6
+ @request = request
7
+ @response = response
8
+ end
9
+
10
+ def get(klass)
11
+ self[klass] ||= klass.new.tap do |h|
12
+ h.env = @env
13
+ h.request = @request
14
+ h.response = @response
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ class Rack::App::Hook
2
+
3
+ attr_accessor :Class, :block
4
+
5
+ def initialize(options = {}, &block)
6
+ self.Class = options[:class] || raise(ArgumentError, "missing :class keyword argument")
7
+ self.block = block
8
+ end
9
+
10
+ def exec(env)
11
+ env[Rack::App::Constants::ENV::HANDLERS].get(self.Class).instance_exec(&self.block)
12
+ end
13
+
14
+ end
@@ -1,6 +1,10 @@
1
1
  module Rack::App::InstanceMethods::Core
2
2
 
3
- attr_writer :request, :response
3
+ attr_writer :env, :request, :response
4
+
5
+ def env
6
+ @env || raise("env object is not set for #{self.class}")
7
+ end
4
8
 
5
9
  def request
6
10
  @request || raise("request object is not set for #{self.class}")
@@ -1,6 +1,7 @@
1
1
  require "rack/builder"
2
2
  require "rack/request"
3
3
  require "rack/response"
4
+
4
5
  class Rack::App::Middlewares::Configuration
5
6
 
6
7
  def initialize(app, config)
@@ -11,10 +12,10 @@ class Rack::App::Middlewares::Configuration
11
12
  end
12
13
 
13
14
  def call(env)
14
- env[::Rack::App::Constants::ENV::HANDLER]= handler(env)
15
- env[::Rack::App::Constants::ENV::SERIALIZER]= @serializer
16
- env[::Rack::App::Constants::ENV::PAYLOAD_PARSER]= @payload_parser
17
- env[::Rack::App::Constants::ENV::PAYLOAD_GETTER]= lambda do
15
+ setup_handler(env)
16
+ env[::Rack::App::Constants::ENV::SERIALIZER] = @serializer
17
+ env[::Rack::App::Constants::ENV::PAYLOAD_PARSER] = @payload_parser
18
+ env[::Rack::App::Constants::ENV::PAYLOAD_GETTER] = lambda do
18
19
  env[::Rack::App::Constants::ENV::PARSED_PAYLOAD] ||= env[::Rack::App::Constants::ENV::PAYLOAD_PARSER].parse_env(env)
19
20
  end
20
21
  @app.call(env)
@@ -22,11 +23,17 @@ class Rack::App::Middlewares::Configuration
22
23
 
23
24
  protected
24
25
 
25
- def handler(env)
26
- new_handler = @handler_class.new
27
- new_handler.request = ::Rack::Request.new(env)
28
- new_handler.response = ::Rack::Response.new
29
- new_handler
26
+ def setup_handler(env)
27
+ request = ::Rack::Request.new(env)
28
+ response = ::Rack::Response.new
29
+ h = @handler_class.new
30
+ h.env = env
31
+ h.request = request
32
+ h.response = response
33
+ handlers = ::Rack::App::Handlers.new(env, request, response)
34
+ handlers[@handler_class] = h
35
+ env[::Rack::App::Constants::ENV::HANDLERS] = handlers
36
+ env[::Rack::App::Constants::ENV::HANDLER] = handlers[@handler_class]
30
37
  end
31
38
 
32
39
  def extname(env)
@@ -1,8 +1,8 @@
1
1
  class Rack::App::Middlewares::Hooks::Base
2
2
 
3
- def initialize(app, hook_block)
3
+ def initialize(app, hook)
4
4
  @app = app
5
- @hook_block = hook_block
5
+ @hook = hook
6
6
  end
7
7
 
8
8
  def call(env)
@@ -13,7 +13,7 @@ class Rack::App::Middlewares::Hooks::Base
13
13
 
14
14
  def execute_hook(env)
15
15
  catch :rack_response do
16
- env[Rack::App::Constants::ENV::HANDLER].instance_exec(&@hook_block)
16
+ @hook.exec(env)
17
17
  nil
18
18
  end
19
19
  end
@@ -2,13 +2,17 @@ module Rack::App::SingletonMethods::Hooks
2
2
 
3
3
  def before(&block)
4
4
  @before_hooks ||= []
5
- @before_hooks << block unless block.nil?
5
+ unless block.nil?
6
+ @before_hooks << ::Rack::App::Hook.new(class: self, &block)
7
+ end
6
8
  @before_hooks
7
9
  end
8
10
 
9
11
  def after(&block)
10
12
  @after_hooks ||= []
11
- @after_hooks << block unless block.nil?
13
+ unless block.nil?
14
+ @after_hooks << ::Rack::App::Hook.new(class: self, &block)
15
+ end
12
16
  @after_hooks
13
17
  end
14
18
 
data/lib/rack/app.rb CHANGED
@@ -10,11 +10,13 @@ class Rack::App
10
10
  require 'rack/app/utils'
11
11
  require 'rack/app/cli'
12
12
  require 'rack/app/test'
13
+ require 'rack/app/hook'
13
14
  require 'rack/app/block'
14
15
  require 'rack/app/logger'
15
16
  require 'rack/app/params'
16
- require 'rack/app/payload'
17
17
  require 'rack/app/router'
18
+ require 'rack/app/payload'
19
+ require 'rack/app/handlers'
18
20
  require 'rack/app/endpoint'
19
21
  require 'rack/app/streamer'
20
22
  require 'rack/app/extension'
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: 8.1.0
4
+ version: 9.0.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: 2023-08-18 00:00:00.000000000 Z
11
+ date: 2023-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -120,6 +120,8 @@ files:
120
120
  - lib/rack/app/error_handler.rb
121
121
  - lib/rack/app/extension.rb
122
122
  - lib/rack/app/file_server.rb
123
+ - lib/rack/app/handlers.rb
124
+ - lib/rack/app/hook.rb
123
125
  - lib/rack/app/instance_methods.rb
124
126
  - lib/rack/app/instance_methods/core.rb
125
127
  - lib/rack/app/instance_methods/http_status.rb