hanami-controller 1.1.1 → 1.2.0.beta1
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 +4 -4
- data/CHANGELOG.md +8 -0
- data/hanami-controller.gemspec +1 -1
- data/lib/hanami/action.rb +22 -0
- data/lib/hanami/action/mime.rb +38 -0
- data/lib/hanami/controller.rb +16 -0
- data/lib/hanami/controller/version.rb +1 -1
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5044ea5ed0faca05bc15bf6b9deeb1ba48dd973d2d54ce26adc4279f2876a3b0
|
4
|
+
data.tar.gz: f451bf0b3f4065aa31b03085f9869058615c8a9bc81314071d17a052efff3f99
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e81ba4a549949b0fd85f3143d96620bc319028ef73b6130a1f6f93df31ec32b3b2db838cdd56b62346c61d290c75e169aee41ecfe521048e9072fcc170941cf3
|
7
|
+
data.tar.gz: 33b3a4861eac4269633b1fe7343ffc3c8c011dbb9cde772f13cdc4fb72ab34a781231d903accfaa15c8755950b3e18f16123955cc1db43fb6028d071abd22456
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
# Hanami::Controller
|
2
2
|
Complete, fast and testable actions for Rack
|
3
3
|
|
4
|
+
## v1.2.0.beta1 - 2018-02-28
|
5
|
+
### Added
|
6
|
+
- [Luca Guidi] Official support for Ruby: MRI 2.5
|
7
|
+
- [Sergey Fedorov] Introduce `Hanami::Action.content_type` to accept/reject requests according to their `Content-Type` header.
|
8
|
+
|
9
|
+
### Fixed
|
10
|
+
- [wheresmyjetpack] Raise meaningful exception when trying to access `session` or `flash` and `Hanami::Action::Session` wasn't included.
|
11
|
+
|
4
12
|
## v1.1.1 - 2017-11-22
|
5
13
|
### Fixed
|
6
14
|
- [Luca Guidi] Ensure `Hanami::Action#send_file` and `#unsafe_send_file` to run `after` action callbacks
|
data/hanami-controller.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.required_ruby_version = '>= 2.3.0'
|
21
21
|
|
22
22
|
spec.add_dependency 'rack', '~> 2.0'
|
23
|
-
spec.add_dependency 'hanami-utils', '
|
23
|
+
spec.add_dependency 'hanami-utils', '1.2.0.beta1'
|
24
24
|
|
25
25
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
26
26
|
spec.add_development_dependency 'rack-test', '~> 0.6'
|
data/lib/hanami/action.rb
CHANGED
@@ -66,6 +66,28 @@ module Hanami
|
|
66
66
|
|
67
67
|
private
|
68
68
|
|
69
|
+
# Raise error when `Hanami::Action::Session` isn't included.
|
70
|
+
#
|
71
|
+
# To use `session`, include `Hanami::Action::Session`.
|
72
|
+
#
|
73
|
+
# @raise [Hanami::Controller::MissingSessionError]
|
74
|
+
#
|
75
|
+
# @since 1.2.0
|
76
|
+
def session
|
77
|
+
raise Hanami::Controller::MissingSessionError.new(:session)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Raise error when `Hanami::Action::Session` isn't included.
|
81
|
+
#
|
82
|
+
# To use `flash`, include `Hanami::Action::Session`.
|
83
|
+
#
|
84
|
+
# @raise [Hanami::Controller::MissingSessionError]
|
85
|
+
#
|
86
|
+
# @since 1.2.0
|
87
|
+
def flash
|
88
|
+
raise Hanami::Controller::MissingSessionError.new(:flash)
|
89
|
+
end
|
90
|
+
|
69
91
|
# Finalize the response
|
70
92
|
#
|
71
93
|
# This method is abstract and COULD be implemented by included modules in
|
data/lib/hanami/action/mime.rb
CHANGED
@@ -16,6 +16,12 @@ module Hanami
|
|
16
16
|
# @api private
|
17
17
|
HTTP_ACCEPT = 'HTTP_ACCEPT'.freeze
|
18
18
|
|
19
|
+
# The key that returns content mime type from the Rack env
|
20
|
+
#
|
21
|
+
# @since 1.2.0
|
22
|
+
# @api private
|
23
|
+
HTTP_CONTENT_TYPE = 'CONTENT_TYPE'.freeze
|
24
|
+
|
19
25
|
# The header key to set the mime type of the response
|
20
26
|
#
|
21
27
|
# @since 0.1.0
|
@@ -165,6 +171,38 @@ module Hanami
|
|
165
171
|
end
|
166
172
|
end
|
167
173
|
end
|
174
|
+
|
175
|
+
# Restrict the payload type to the specified mime type symbols.
|
176
|
+
#
|
177
|
+
# @param formats[Array<Symbol>] one or more symbols representing mime type(s)
|
178
|
+
#
|
179
|
+
# @since 1.2.0
|
180
|
+
#
|
181
|
+
# @example
|
182
|
+
# require 'hanami/controller'
|
183
|
+
#
|
184
|
+
# class Upload
|
185
|
+
# include Hanami::Action
|
186
|
+
# content_type :json
|
187
|
+
#
|
188
|
+
# def call(params)
|
189
|
+
# # ...
|
190
|
+
# end
|
191
|
+
# end
|
192
|
+
#
|
193
|
+
# # When called with "text/html" => 415
|
194
|
+
# # When called with "application/json" => 200
|
195
|
+
def content_type(*formats)
|
196
|
+
mime_types = formats.map { |format| format_to_mime_type(format) }
|
197
|
+
|
198
|
+
before do
|
199
|
+
mime_type = @_env[HTTP_CONTENT_TYPE] || default_content_type || DEFAULT_CONTENT_TYPE
|
200
|
+
|
201
|
+
if mime_types.none? {|mt| ::Rack::Mime.match?(mime_type, mt) }
|
202
|
+
halt 415
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
168
206
|
end
|
169
207
|
|
170
208
|
# @since 0.7.0
|
data/lib/hanami/controller.rb
CHANGED
@@ -47,6 +47,22 @@ module Hanami
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
# Missing session error
|
51
|
+
#
|
52
|
+
# This error is raised when an action sends either `session` or `flash` to
|
53
|
+
# itself and it does not include `Hanami::Action::Session`.
|
54
|
+
#
|
55
|
+
# @since 1.2.0
|
56
|
+
#
|
57
|
+
# @see Hanami::Action::Session
|
58
|
+
# @see Hanami::Action#session
|
59
|
+
# @see Hanami::Action#flash
|
60
|
+
class MissingSessionError < Hanami::Controller::Error
|
61
|
+
def initialize(session_method)
|
62
|
+
super("To use `#{session_method}', add `include Hanami::Action::Session`.")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
50
66
|
include Utils::ClassAttribute
|
51
67
|
|
52
68
|
# Framework configuration
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hanami-controller
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Guidi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: hanami-utils
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.2.0.beta1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.2.0.beta1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -153,12 +153,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
153
153
|
version: 2.3.0
|
154
154
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
155
|
requirements:
|
156
|
-
- - "
|
156
|
+
- - ">"
|
157
157
|
- !ruby/object:Gem::Version
|
158
|
-
version:
|
158
|
+
version: 1.3.1
|
159
159
|
requirements: []
|
160
160
|
rubyforge_project:
|
161
|
-
rubygems_version: 2.7.
|
161
|
+
rubygems_version: 2.7.5
|
162
162
|
signing_key:
|
163
163
|
specification_version: 4
|
164
164
|
summary: Complete, fast and testable actions for Rack and Hanami
|