rack-app 8.0.1 → 9.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 07a9a17e80aa8807b5a55f392d218ead2cb22f4c16e22ac53a99f311bbb03247
4
- data.tar.gz: f7f8758892156831b6e22d65d198c1d0be0d278f552826464198b1abd9b00d8e
3
+ metadata.gz: d6895f4a62b9e5714c7f31f100ffdd705dfb3af6d4e73f823b99fca71526602f
4
+ data.tar.gz: 8377e012c98cc1010ffb9af5cca8ae46d79d9bb4dd8ad80799eb2e02fef2aff9
5
5
  SHA512:
6
- metadata.gz: 9b4d34c21f4bb8dc70e0ee1e82612025b8433c64b585492c2793baddf93fa1a6f5ce9aab7fdb2d6c69b57adde13aaa5338eab888bb4e9bf533a66276dac8b7ca
7
- data.tar.gz: 12425024c7976b88c377b4b43c2f3d098b85e19690f31afb150a0093d8f1cc74033af3d97e1f212238efc47791707b0fc6063e4feabec796c290a11745fb4e4c
6
+ metadata.gz: 21c9910e0cea0f738cab34e536cd9c180ef29f611ceaa54cb1909feddb6e0749ad6791bec4ef2a97d17d5da2267d28371773d77e70b4c8c813d79ac776bc836b
7
+ data.tar.gz: 2ad9151b5b2570acab5b52631ec8298ac48182fc4869075ba30a42f706f666f5580143fb3fbae7332145431cee1d08e2df87538df46337f96ce1699c7a88be83
data/VERSION CHANGED
@@ -1 +1 @@
1
- 8.0.1
1
+ 9.0.0
@@ -9,4 +9,6 @@ Rack::App::Extension.register(:logger) do
9
9
  end
10
10
  end
11
11
 
12
+ before { logger }
13
+
12
14
  end
@@ -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.0.1
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-16 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