hanami-action 3.0.0.rc1

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.
Files changed (38) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +985 -0
  3. data/LICENSE +20 -0
  4. data/README.md +873 -0
  5. data/hanami-action.gemspec +39 -0
  6. data/lib/hanami/action/body_parser/json.rb +20 -0
  7. data/lib/hanami/action/body_parser/multipart_form.rb +22 -0
  8. data/lib/hanami/action/body_parser.rb +109 -0
  9. data/lib/hanami/action/cache/cache_control.rb +84 -0
  10. data/lib/hanami/action/cache/conditional_get.rb +101 -0
  11. data/lib/hanami/action/cache/directives.rb +126 -0
  12. data/lib/hanami/action/cache/expires.rb +84 -0
  13. data/lib/hanami/action/cache.rb +29 -0
  14. data/lib/hanami/action/config/formats.rb +256 -0
  15. data/lib/hanami/action/config.rb +172 -0
  16. data/lib/hanami/action/constants.rb +283 -0
  17. data/lib/hanami/action/cookie_jar.rb +214 -0
  18. data/lib/hanami/action/cookies.rb +27 -0
  19. data/lib/hanami/action/csrf_protection.rb +217 -0
  20. data/lib/hanami/action/errors.rb +109 -0
  21. data/lib/hanami/action/flash.rb +176 -0
  22. data/lib/hanami/action/halt.rb +18 -0
  23. data/lib/hanami/action/mime/request_mime_weight.rb +66 -0
  24. data/lib/hanami/action/mime.rb +438 -0
  25. data/lib/hanami/action/params.rb +342 -0
  26. data/lib/hanami/action/rack/file.rb +41 -0
  27. data/lib/hanami/action/rack_utils.rb +11 -0
  28. data/lib/hanami/action/request/session.rb +68 -0
  29. data/lib/hanami/action/request.rb +141 -0
  30. data/lib/hanami/action/response.rb +481 -0
  31. data/lib/hanami/action/session.rb +47 -0
  32. data/lib/hanami/action/validatable.rb +166 -0
  33. data/lib/hanami/action/version.rb +13 -0
  34. data/lib/hanami/action/view_name_inferrer.rb +56 -0
  35. data/lib/hanami/action.rb +672 -0
  36. data/lib/hanami/http/status.rb +149 -0
  37. data/lib/hanami-action.rb +3 -0
  38. metadata +153 -0
@@ -0,0 +1,149 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rack/utils"
4
+
5
+ module Hanami
6
+ # @since 0.1.0
7
+ # @api private
8
+ module Http
9
+ # An HTTP status
10
+ #
11
+ # @since 0.1.0
12
+ # @api private
13
+ class Status
14
+ # A set of standard codes and messages for HTTP statuses
15
+ #
16
+ # @since 0.1.0
17
+ # @api private
18
+ ALL = ::Rack::Utils::HTTP_STATUS_CODES
19
+
20
+ # Symbolic names for status codes
21
+ #
22
+ # @since 2.0.2
23
+ # @api private
24
+ SYMBOLS = ::Rack::Utils::SYMBOL_TO_STATUS_CODE.merge(
25
+ unprocessable_content: 422,
26
+ unprocessable_entity: 422
27
+ )
28
+
29
+ # Return a status for the given code
30
+ #
31
+ # @param code [Integer, Symbol] a valid HTTP code
32
+ #
33
+ # @return [Array] a pair of code and message for an HTTP status
34
+ #
35
+ # @raise [Hanami::Action::UnknownHttpStatusError] if the given code
36
+ # cannot be associated to a known HTTP status
37
+ #
38
+ # @since 0.1.0
39
+ # @api private
40
+ #
41
+ # @see https://guides.hanamirb.org/v2.0/actions/status-codes/
42
+ #
43
+ # @example Integer HTTP Status
44
+ # require "hanami/http/status"
45
+ #
46
+ # Hanami::Http::Status.for_code(401)
47
+ # # => [401, "Unauthorized"]
48
+ #
49
+ # @example Symbol HTTP Status
50
+ # require "hanami/http/status"
51
+ #
52
+ # Hanami::Http::Status.for_code(:unauthorized)
53
+ # # => [401, "Unauthorized"]
54
+ #
55
+ # @example Unknown HTTP Status
56
+ # require "hanami/http/status"
57
+ #
58
+ # Hanami::Http::Status.for_code(999)
59
+ # # => raise Hanami::Action::UnknownHttpStatusError
60
+ #
61
+ # Hanami::Http::Status.for_code(:foo)
62
+ # # => raise Hanami::Action::UnknownHttpStatusError
63
+ def self.for_code(code)
64
+ case code
65
+ when Integer
66
+ ALL.assoc(code)
67
+ when Symbol
68
+ ALL.assoc(SYMBOLS[code])
69
+ end or raise ::Hanami::Action::UnknownHttpStatusError.new(code)
70
+ end
71
+
72
+ # Return a status code for the given code
73
+ #
74
+ # @param code [Integer,Symbol] a valid HTTP code
75
+ #
76
+ # @return [Integer] a message for the given status code
77
+ #
78
+ # @raise [Hanami::Action::UnknownHttpStatusError] if the given code
79
+ # cannot be associated to a known HTTP status
80
+ #
81
+ # @see https://guides.hanamirb.org/v2.0/actions/status-codes/
82
+ #
83
+ # @since 2.0.2
84
+ # @api private
85
+ #
86
+ # @example Integer HTTP Status
87
+ # require "hanami/http/status"
88
+ #
89
+ # Hanami::Http::Status.lookup(401)
90
+ # # => 401
91
+ #
92
+ # @example Symbol HTTP Status
93
+ # require "hanami/http/status"
94
+ #
95
+ # Hanami::Http::Status.lookup(:unauthorized)
96
+ # # => 401
97
+ #
98
+ # @example Unknown HTTP Status
99
+ # require "hanami/http/status"
100
+ #
101
+ # Hanami::Http::Status.lookup(999)
102
+ # # => raise Hanami::Action::UnknownHttpStatusError
103
+ #
104
+ # Hanami::Http::Status.lookup(:foo)
105
+ # # => raise Hanami::Action::UnknownHttpStatusError
106
+ def self.lookup(code)
107
+ for_code(code)[0]
108
+ end
109
+
110
+ # Return a message for the given status code
111
+ #
112
+ # @param code [Integer,Symbol] a valid HTTP code
113
+ #
114
+ # @return [String] a message for the given status code
115
+ #
116
+ # @raise [Hanami::Action::UnknownHttpStatusError] if the given code
117
+ # cannot be associated to a known HTTP status
118
+ #
119
+ # @see https://guides.hanamirb.org/v2.0/actions/status-codes/
120
+ #
121
+ # @since 0.3.2
122
+ # @api private
123
+ #
124
+ # @example Integer HTTP Status
125
+ # require "hanami/http/status"
126
+ #
127
+ # Hanami::Http::Status.message_for(401)
128
+ # # => "Unauthorized"
129
+ #
130
+ # @example Symbol HTTP Status
131
+ # require "hanami/http/status"
132
+ #
133
+ # Hanami::Http::Status.message_for(:unauthorized)
134
+ # # => "Unauthorized"
135
+ #
136
+ # @example Unknown HTTP Status
137
+ # require "hanami/http/status"
138
+ #
139
+ # Hanami::Http::Status.message_for(999)
140
+ # # => raise Hanami::Action::UnknownHttpStatusError
141
+ #
142
+ # Hanami::Http::Status.message_for(:foo)
143
+ # # => raise Hanami::Action::UnknownHttpStatusError
144
+ def self.message_for(code)
145
+ for_code(code)[1]
146
+ end
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "hanami/action"
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hanami-action
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.0.rc1
5
+ platform: ruby
6
+ authors:
7
+ - Hanakai team
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: rack
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 2.2.16
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 2.2.16
26
+ - !ruby/object:Gem::Dependency
27
+ name: hanami-utils
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: 3.0.0.rc
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 3.0.0.rc
40
+ - !ruby/object:Gem::Dependency
41
+ name: dry-configurable
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.4'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.4'
54
+ - !ruby/object:Gem::Dependency
55
+ name: dry-core
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.0'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: zeitwerk
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '2.6'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '2.6'
82
+ description: Complete, fast and testable actions for Rack and Hanami
83
+ email:
84
+ - info@hanakai.org
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files:
88
+ - CHANGELOG.md
89
+ - LICENSE
90
+ - README.md
91
+ files:
92
+ - CHANGELOG.md
93
+ - LICENSE
94
+ - README.md
95
+ - hanami-action.gemspec
96
+ - lib/hanami-action.rb
97
+ - lib/hanami/action.rb
98
+ - lib/hanami/action/body_parser.rb
99
+ - lib/hanami/action/body_parser/json.rb
100
+ - lib/hanami/action/body_parser/multipart_form.rb
101
+ - lib/hanami/action/cache.rb
102
+ - lib/hanami/action/cache/cache_control.rb
103
+ - lib/hanami/action/cache/conditional_get.rb
104
+ - lib/hanami/action/cache/directives.rb
105
+ - lib/hanami/action/cache/expires.rb
106
+ - lib/hanami/action/config.rb
107
+ - lib/hanami/action/config/formats.rb
108
+ - lib/hanami/action/constants.rb
109
+ - lib/hanami/action/cookie_jar.rb
110
+ - lib/hanami/action/cookies.rb
111
+ - lib/hanami/action/csrf_protection.rb
112
+ - lib/hanami/action/errors.rb
113
+ - lib/hanami/action/flash.rb
114
+ - lib/hanami/action/halt.rb
115
+ - lib/hanami/action/mime.rb
116
+ - lib/hanami/action/mime/request_mime_weight.rb
117
+ - lib/hanami/action/params.rb
118
+ - lib/hanami/action/rack/file.rb
119
+ - lib/hanami/action/rack_utils.rb
120
+ - lib/hanami/action/request.rb
121
+ - lib/hanami/action/request/session.rb
122
+ - lib/hanami/action/response.rb
123
+ - lib/hanami/action/session.rb
124
+ - lib/hanami/action/validatable.rb
125
+ - lib/hanami/action/version.rb
126
+ - lib/hanami/action/view_name_inferrer.rb
127
+ - lib/hanami/http/status.rb
128
+ homepage: https://hanamirb.org
129
+ licenses:
130
+ - MIT
131
+ metadata:
132
+ changelog_uri: https://github.com/hanami/hanami-action/blob/main/CHANGELOG.md
133
+ source_code_uri: https://github.com/hanami/hanami-action
134
+ bug_tracker_uri: https://github.com/hanami/hanami-action/issues
135
+ funding_uri: https://github.com/sponsors/hanami
136
+ rdoc_options: []
137
+ require_paths:
138
+ - lib
139
+ required_ruby_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '3.3'
144
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ requirements: []
150
+ rubygems_version: 4.0.14
151
+ specification_version: 4
152
+ summary: Complete, fast and testable actions for Rack and Hanami
153
+ test_files: []