hanami-controller 2.0.0.alpha5 → 2.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +136 -3
  3. data/README.md +3 -5
  4. data/hanami-controller.gemspec +22 -20
  5. data/lib/hanami/action/base_params.rb +20 -57
  6. data/lib/hanami/action/cache/cache_control.rb +14 -10
  7. data/lib/hanami/action/cache/conditional_get.rb +8 -26
  8. data/lib/hanami/action/cache/directives.rb +8 -6
  9. data/lib/hanami/action/cache/expires.rb +10 -11
  10. data/lib/hanami/action/cache.rb +5 -3
  11. data/lib/hanami/action/configuration.rb +20 -12
  12. data/lib/hanami/action/constants.rb +261 -0
  13. data/lib/hanami/action/cookie_jar.rb +37 -55
  14. data/lib/hanami/action/cookies.rb +2 -0
  15. data/lib/hanami/action/csrf_protection.rb +28 -31
  16. data/lib/hanami/action/flash.rb +4 -0
  17. data/lib/hanami/action/halt.rb +4 -0
  18. data/lib/hanami/action/mime.rb +103 -73
  19. data/lib/hanami/action/params.rb +41 -31
  20. data/lib/hanami/action/rack/file.rb +5 -9
  21. data/lib/hanami/action/request.rb +10 -59
  22. data/lib/hanami/action/response.rb +89 -46
  23. data/lib/hanami/action/session.rb +5 -3
  24. data/lib/hanami/action/validatable.rb +18 -19
  25. data/lib/hanami/action/view_name_inferrer.rb +10 -0
  26. data/lib/hanami/action.rb +554 -98
  27. data/lib/hanami/controller/error.rb +2 -0
  28. data/lib/hanami/controller/version.rb +3 -1
  29. data/lib/hanami/controller.rb +10 -12
  30. data/lib/hanami/http/status.rb +4 -18
  31. metadata +25 -16
  32. data/lib/hanami/action/application_action.rb +0 -131
  33. data/lib/hanami/action/application_configuration/content_security_policy.rb +0 -118
  34. data/lib/hanami/action/application_configuration/cookies.rb +0 -29
  35. data/lib/hanami/action/application_configuration/sessions.rb +0 -46
  36. data/lib/hanami/action/application_configuration.rb +0 -90
  37. data/lib/hanami/action/glue.rb +0 -40
  38. data/lib/hanami/action/standalone_action.rb +0 -578
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ae6d39916d31ac8b1e741399a9a7c5606cb83c4cc154cb6d6a36106c67a24802
4
- data.tar.gz: a0ce560a5c49ec75b34da8d83d7100b8a38dde309ca4c13d2a845522557de3d1
3
+ metadata.gz: 11f51222319fd677dad5bcad139e3a9fe4ec4a9099a44cab8e1809de78ca7def
4
+ data.tar.gz: 38367d9e9a0831e0bae832ffc4a7528ba97ecafb399b57e085d723de522f0219
5
5
  SHA512:
6
- metadata.gz: 6f86405be035a7de58434a78ad466bfeb58745ed63185711b678be2a3d7f3fb30fd6ecfca19c38a96fc825d5776a8736d02a5139ef1669b4b44d643c8e068b05
7
- data.tar.gz: 7bef1138872374c4ae35433917dad8e89e6828f8893cf50e7c27efd4ea29d7924f26f2c4a06be4b4911ed89e3bc1df06a6b8f85f6ce741f10e537277490b6d77
6
+ metadata.gz: 5522815b014bd6bf4ad6750a12c80a6db7d1aaab15562004a7898bc6cf5a5f0bbfa93d171cee31268685268ead3d37d6aa42be1bfc780c7a3bba2207814df087
7
+ data.tar.gz: 379911174cd6deb4637e6dcb80731d1d221f6bb4f3c184001f6f526e8d87cdf385aa0e114a1c4fa78c2dc3361015074b5afbe428a2b630a8ff4cd17f180e5908
data/CHANGELOG.md CHANGED
@@ -1,26 +1,62 @@
1
1
  # Hanami::Controller
2
+
2
3
  Complete, fast and testable actions for Rack
3
4
 
5
+ ## v2.0.0.beta1 - 2022-07-20
6
+
7
+ ### Fixed
8
+
9
+ - [Benjamin Klotz] Using `Hanami::Action.params` without having `hanami-validations` installed now returns a user-friendly error
10
+ - [Narinda Reeders] Ensure HEAD responses to send empty body, but preserve headers
11
+ - [Narinda Reeders] Ensure HEAD redirect responses to return redirect headers
12
+ - [Andrew Croome] Do not automatically render halted requests
13
+
14
+ ## v2.0.0.alpha8 - 2022-02-19
15
+
16
+ ### Changed
17
+
18
+ - [Tim Riley] Removed automatic integration of `Hanami::Action` subclasses with their surrounding Hanami application. Action base classes within Hanami apps should inherit from `Hanami::Application::Action` instead.
19
+
20
+ ## v2.0.0.alpha6 - 2022-02-10
21
+
22
+ ### Added
23
+
24
+ - [Luca Guidi] Official support for Ruby: MRI 3.1
25
+
26
+ ### Changed
27
+
28
+ - [Luca Guidi] Drop support for Ruby: MRI 2.6, and 2.7.
29
+ - [Sean Collins] Align with Rack list of HTTP supported status. Added: `103`, `306`, `421`, `425`, `451`, and `509`. Removed: `418`, `420`, `444`, `449`, `450`, `451`, `499`, `598`, `599`.
30
+
4
31
  ## v2.0.0.alpha5 - 2022-01-12
32
+
5
33
  ### Added
34
+
6
35
  - [Philip Arndt] Added "rss" ("application/rss+xml") to list of supported MIME types
7
36
 
8
37
  ## v2.0.0.alpha4 - 2021-12-07
38
+
9
39
  ### Added
40
+
10
41
  - [Luca Guidi] Manage Content Security Policy (CSP) defaults and new API via `Hanami::Action::ApplicationConfiguration#content_security_policy`
11
42
  - [Tim Riley & Marc Busqué] Provide access to routes inside all application actions via `Hanami::Action::ApplicationAction#routes`
12
43
 
13
44
  ## v2.0.0.alpha3 - 2021-11-09
45
+
14
46
  ### Added
47
+
15
48
  - [Luca Guidi] Automatically include session behavior in `Hanami::Action` when sessions are enabled via Hanami application config
16
49
  - [Sean Collins] Pass exposures from action to view
17
50
 
18
51
  ### Changed
52
+
19
53
  - [Tim Riley] (Internal) Updated settings to use updated `setting` API in dry-configurable 0.13.0
20
54
  - [Sean Collins] Move automatic view rendering from `handle` to `finish`
21
55
 
22
56
  ## v2.0.0.alpha2 - 2021-05-04
57
+
23
58
  ### Added
59
+
24
60
  - [Luca Guidi] Official support for Ruby: MRI 3.0
25
61
  - [Tim Riley] Introduced `Hanami::Action::ApplicationAction`
26
62
  - [Tim Riley] Introduced `Hanami::Action::Configuration`
@@ -30,21 +66,26 @@ Complete, fast and testable actions for Rack
30
66
  - [Tim Riley] Enable CSRF protection automatically when HTTP sessions are enabled
31
67
 
32
68
  ### Fixed
69
+
33
70
  - [Luca Guidi] Ensure `Hanami::Action::Response#renderable?` to return `false` when body is set
34
71
  - [Andrew Croome] Ensure `Hanami::Action.accept` to use Rack `CONTENT_TYPE` for the _before callback_ check
35
72
 
36
73
  ### Changed
74
+
37
75
  - [Luca Guidi] Drop support for Ruby: MRI 2.5.
38
76
  - [Tim Riley] Removed `Hanami::Action.handle_exception` in favor of `Hanami::Action.config.handle_exception`
39
77
  - [Tim Riley] Rewritten `Hanami::Action::Flash`, based on Roda's `FlashHash`
40
78
 
41
79
  ## v2.0.0.alpha1 - 2019-01-30
80
+
42
81
  ### Added
82
+
43
83
  - [Luca Guidi] `Hanami::Action::Request#session` to access the HTTP session as it was originally sent
44
84
  - [Luca Guidi] `Hanami::Action::Request#cookies` to access the HTTP cookies as they were originally sent
45
85
  - [Luca Guidi & Tim Riley] Allow to build a deep inheritance chain for actions
46
86
 
47
87
  ### Changed
88
+
48
89
  - [Luca Guidi] Drop support for Ruby: MRI 2.3, and 2.4.
49
90
  - [Luca Guidi] `Hanami::Action` is a superclass
50
91
  - [Luca Guidi] `Hanami::Action#initialize` requires a `configuration:` keyword argument
@@ -88,40 +129,54 @@ Complete, fast and testable actions for Rack
88
129
  - [Luca Guidi] `Hanami::Action` exception handlers now accept `Hanami::Action::Request`, `Hanami::Action::Response`, and exception arguments
89
130
 
90
131
  ## v1.3.3 - 2020-01-14
132
+
91
133
  ### Added
134
+
92
135
  - [Luca Guidi] Official support for Ruby: MRI 2.7
93
136
  - [Luca Guidi] Support `rack` 2.1
94
137
  - [Luca Guidi] Support for both `hanami-validations` 1 and 2
95
138
 
96
139
  ## v1.3.2 - 2019-06-28
140
+
97
141
  ### Fixed
142
+
98
143
  - [Ian Ker-Seymer] Ensure `Etag` to work when `If-Modified-Since` is sent from browser and upstream proxy sets `Last-Modified` automatically.
99
144
 
100
145
  ## v1.3.1 - 2019-01-18
146
+
101
147
  ### Added
148
+
102
149
  - [Luca Guidi] Official support for Ruby: MRI 2.6
103
150
  - [Luca Guidi] Support `bundler` 2.0+
104
151
 
105
152
  ## v1.3.0 - 2018-10-24
153
+
106
154
  ### Added
155
+
107
156
  - [Gustavo Caso] Swappable JSON backed for `Hanami::Action::Flash` based on `Hanami::Utils::Json`
108
157
 
109
158
  ## v1.3.0.beta1 - 2018-08-08
159
+
110
160
  ### Added
161
+
111
162
  - [Luca Guidi] Official support for JRuby 9.2.0.0
112
163
 
113
164
  ### Fixed
165
+
114
166
  - [Yuji Ueki] Ensure that if `If-None-Match` or `If-Modified-Since` response HTTP headers are missing, `Etag` or `Last-Modified` headers will be in response HTTP headers.
115
167
  - [Gustavo Caso] Don't show flash message for the request after a HTTP redirect.
116
168
  - [Gustavo Caso] Ensure `Hanami::Action::Flash#each`, `#map`, and `#empty?` to not reference stale flash data.
117
169
 
118
170
  ### Deprecated
171
+
119
172
  - [Gustavo Caso] Deprecate `Hanami::Action#parsed_request_body`
120
173
 
121
174
  ## v1.2.0 - 2018-04-11
122
175
 
123
176
  ## v1.2.0.rc2 - 2018-04-06
177
+
124
178
  ### Added
179
+
125
180
  - [Gustavo Caso] Introduce `Hanami::Action::Flash#each` and `#map`
126
181
 
127
182
  ## v1.2.0.rc1 - 2018-03-30
@@ -129,20 +184,27 @@ Complete, fast and testable actions for Rack
129
184
  ## v1.2.0.beta2 - 2018-03-23
130
185
 
131
186
  ## v1.2.0.beta1 - 2018-02-28
187
+
132
188
  ### Added
189
+
133
190
  - [Luca Guidi] Official support for Ruby: MRI 2.5
134
191
  - [Sergey Fedorov] Introduce `Hanami::Action.content_type` to accept/reject requests according to their `Content-Type` header.
135
192
 
136
193
  ### Fixed
194
+
137
195
  - [wheresmyjetpack] Raise meaningful exception when trying to access `session` or `flash` and `Hanami::Action::Session` wasn't included.
138
196
 
139
197
  ## v1.1.1 - 2017-11-22
198
+
140
199
  ### Fixed
200
+
141
201
  - [Luca Guidi] Ensure `Hanami::Action#send_file` and `#unsafe_send_file` to run `after` action callbacks
142
202
  - [Luca Guidi] Ensure Rack env to have the `REQUEST_METHOD` key set to `GET` during actions unit tests
143
203
 
144
204
  ## v1.1.0 - 2017-10-25
205
+
145
206
  ### Added
207
+
146
208
  - [Luca Guidi] Introduce `Hanami::Action::CookieJar#each` to iterate through action's `cookies`
147
209
 
148
210
  ## v1.1.0.rc1 - 2017-10-16
@@ -150,13 +212,17 @@ Complete, fast and testable actions for Rack
150
212
  ## v1.1.0.beta3 - 2017-10-04
151
213
 
152
214
  ## v1.1.0.beta2 - 2017-10-03
215
+
153
216
  ### Added
217
+
154
218
  - [Luca Guidi] Introduce `Hanami::Action::Params::Errors#add` to add errors not generated by params validations
155
219
 
156
220
  ## v1.1.0.beta1 - 2017-08-11
157
221
 
158
222
  ## v1.0.1 - 2017-07-10
223
+
159
224
  ### Fixed
225
+
160
226
  - [Marcello Rocha] Ensure validation params to be symbolized in all the environments
161
227
  - [Marcello Rocha] Fix regression (`1.0.0`) about MIME type priority, during the evaluation of a weighted `Accept` HTTP header
162
228
 
@@ -165,69 +231,92 @@ Complete, fast and testable actions for Rack
165
231
  ## v1.0.0.rc1 - 2017-03-31
166
232
 
167
233
  ## v1.0.0.beta3 - 2017-03-17
234
+
168
235
  ### Changed
236
+
169
237
  - [Luca Guidi] `Action#flash` is now public API
170
238
 
171
239
  ## v1.0.0.beta2 - 2017-03-02
240
+
172
241
  ### Added
242
+
173
243
  - [Marcello Rocha] Add `Action#unsafe_send_file` to send files outside of the public directory of a project
174
244
 
175
245
  ### Fixed
246
+
176
247
  - [Anton Davydov] Ensure HTTP Cache to not crash when `HTTP_IF_MODIFIED_SINCE` and `HTTP_IF_NONE_MATCH` have blank values
177
248
  - [Luca Guidi] Keep flash values after a redirect
178
249
  - [Craig M. Wellington & Luca Guidi] Ensure to return 404 when `Action#send_file` cannot find a file with a globbed route
179
250
  - [Luca Guidi] Don't mutate Rack env when sending files
180
251
 
181
252
  ## v1.0.0.beta1 - 2017-02-14
253
+
182
254
  ### Added
255
+
183
256
  - [Luca Guidi] Official support for Ruby: MRI 2.4
184
257
 
185
258
  ### Fixed
259
+
186
260
  - [Marcello Rocha & Luca Guidi] Avoid MIME type conflicts for `Action#format` detection
187
261
  - [Matias H. Leidemer & Luca Guidi] Ensure `Flash` to return only fresh data
188
262
  - [Luca Guidi] Ensure `session` keys to be accessed as symbols in action unit tests
189
263
 
190
264
  ### Changed
265
+
191
266
  - [Anton Davydov & Luca Guidi] Make it work only with Rack 2.0
192
267
 
193
268
  ## v0.8.1 - 2016-12-19
269
+
194
270
  ### Fixed
271
+
195
272
  - [Thorbjørn Hermansen] Don't pollute Rack env's `rack.exception` key if an exception is handled
196
273
  - [Luca Guidi] Add `flash` to the default exposures
197
274
 
198
275
  ## v0.8.0 - 2016-11-15
276
+
199
277
  ### Added
278
+
200
279
  - [Marion Duprey] Allow `BaseParams#get` to read (nested) arrays
201
280
 
202
281
  ### Fixed
282
+
203
283
  - [Russell Cloak] Respect custom formats when referenced by HTTP `Accept`
204
284
  - [Kyle Chong] Don't symbolize raw params
205
285
 
206
286
  ### Changed
287
+
207
288
  - [Luca Guidi] Let `BaseParams#get` to accept a list of keys (symbols) instead of string with dot notation (`params.get(:customer, :address, :city)` instead of `params.get('customer.address.city')`)
208
289
 
209
290
  ## v0.7.1 - 2016-10-06
291
+
210
292
  ### Added
293
+
211
294
  - [Kyle Chong] Introduced `parsed_request_body` for action
212
295
  - [Luca Guidi] Introduced `Hanami::Action::BaseParams#each`
213
296
 
214
297
  ### Fixed
298
+
215
299
  - [Ayleen McCann] Use default content type when `HTTP_ACCEPT` is `*/*`
216
300
  - [Kyle Chong] Don't stringify uploaded files
217
301
  - [Kyle Chong] Don't stringify params values when not necessary
218
302
 
219
303
  ### Changed
304
+
220
305
  - [akhramov & Luca Guidi] Raise `Hanami::Controller::IllegalExposureError` when try to expose reserved words: `params`, and `flash`.
221
306
 
222
307
  ## v0.7.0 - 2016-07-22
308
+
223
309
  ### Added
310
+
224
311
  - [Luca Guidi] Introduced `Hanami::Action::Params#error_messages` which returns a flat collection of full error messages
225
312
 
226
313
  ### Fixed
314
+
227
315
  - [Luca Guidi] Params are deeply symbolized
228
316
  - [Artem Nistratov] Send only changed cookies in HTTP response
229
317
 
230
318
  ### Changed
319
+
231
320
  - [Luca Guidi] Drop support for Ruby 2.0 and 2.1. Official support for JRuby 9.0.5.0+.
232
321
  - [Luca Guidi] Param validations now require you to add `hanami-validations` in `Gemfile`.
233
322
  - [Luca Guidi] Removed "_indifferent access_" for params. Since now on, only symbols are allowed.
@@ -237,80 +326,110 @@ Complete, fast and testable actions for Rack
237
326
  - [Vasilis Spilka] Made `Hanami::Action::Session#errors` public
238
327
 
239
328
  ## v0.6.1 - 2016-02-05
329
+
240
330
  ### Changed
331
+
241
332
  - [Anatolii Didukh] Optimise memory usage by freezing MIME types constant
242
333
 
243
334
  ## v0.6.0 - 2016-01-22
335
+
244
336
  ### Changed
337
+
245
338
  - [Luca Guidi] Renamed the project
246
339
 
247
340
  ## v0.5.1 - 2016-01-19
341
+
248
342
  ### Fixed
343
+
249
344
  - [Alfonso Uceda] Ensure `rack.session` cookie to not be sent twice when both `Lotus::Action::Cookies` and `Rack::Session::Cookie` are used together
250
345
 
251
346
  ## v0.5.0 - 2016-01-12
347
+
252
348
  ### Added
349
+
253
350
  - [Luca Guidi] Reference a raised exception in Rack env's `rack.exception`. Compatibility with exception reporting SaaS.
254
351
 
255
352
  ### Fixed
353
+
256
354
  - [Cainã Costa] Ensure Rack environment to be always available for sessions unit tests
257
355
  - [Luca Guidi] Ensure superclass exceptions to not shadow subclasses during exception handling (eg. `CustomError` handler will take precedence over `StandardError`)
258
356
 
259
357
  ### Changed
358
+
260
359
  - [Luca Guidi] Removed `Lotus::Controller::Configuration#default_format`
261
360
  - [Cainã Costa] Made `Lotus::Action#session` a public method for improved unit testing
262
361
  - [Karim Tarek] Introduced `Lotus::Controller::Error` and let all the framework exceptions to inherit from it.
263
362
 
264
363
  ## v0.4.6 - 2015-12-04
364
+
265
365
  ### Added
366
+
266
367
  - [Luca Guidi] Allow to force custom headers for responses that according to RFC shouldn't include them (eg 204). Override `#keep_response_header?(header)` in action
267
368
 
268
369
  ## v0.4.5 - 2015-09-30
370
+
269
371
  ### Added
372
+
270
373
  - [Theo Felippe] Added configuration entries: `#default_request_format` and `default_response_format`.
271
374
  - [Wellington Santos] Error handling to take account of inherited exceptions.
272
375
 
273
376
  ### Changed
377
+
274
378
  - [Theo Felippe] Deprecated `#default_format` in favor of: `#default_request_format`.
275
379
 
276
380
  ## v0.4.4 - 2015-06-23
381
+
277
382
  ### Added
383
+
278
384
  - [Luca Guidi] Security protection against Cross Site Request Forgery (CSRF).
279
385
 
280
386
  ### Fixed
387
+
281
388
  - [Matthew Bellantoni] Ensure nested params to be correctly coerced to Hash.
282
389
 
283
390
  ## v0.4.3 - 2015-05-22
391
+
284
392
  ### Added
393
+
285
394
  - [Alfonso Uceda Pompa & Luca Guidi] Introduced `Lotus::Action#send_file`
286
395
  - [Alfonso Uceda Pompa] Set automatically `Expires` option for cookies when it's missing but `Max-Age` is present. Compatibility with old browsers.
287
396
 
288
397
  ## v0.4.2 - 2015-05-15
398
+
289
399
  ### Fixed
400
+
290
401
  - [Luca Guidi] Ensure `Lotus::Action::Params#to_h` to return `::Hash` at the top level
291
402
 
292
403
  ## v0.4.1 - 2015-05-15
404
+
293
405
  ### Fixed
406
+
294
407
  - [Luca Guidi] Ensure proper automatic `Content-Type` working well with Internet Explorer.
295
408
  - [Luca Guidi] Ensure `Lotus::Action#redirect_to` to return `::String` for Rack servers compatibility.
296
409
 
297
410
  ### Changed
411
+
298
412
  - [Alfonso Uceda Pompa] Prevent `Content-Type` and `Content-Lenght` to be sent when status code requires no body (eg. `204`).
299
- This is for compatibility with `Rack::Lint`, not with RFC 2016.
413
+ This is for compatibility with `Rack::Lint`, not with RFC 2016.
300
414
  - [Luca Guidi] Ensure `Lotus::Action::Params#to_h` to return `::Hash`
301
415
 
302
416
  ## v0.4.0 - 2015-03-23
417
+
303
418
  ### Added
419
+
304
420
  - [Erol Fornoles] `Action.use` now accepts a block
305
421
  - [Alfonso Uceda Pompa] Introduced `Lotus::Controller::Configuration#cookies` as default cookie options.
306
422
  - [Alfonso Uceda Pompa] Introduced `Lotus::Controller::Configuration#default_headers` as default HTTP headers to return in all the responses.
307
423
  - [Luca Guidi] Introduced `Lotus::Action::Params#get` as a safe API to access nested params.
308
424
 
309
425
  ### Changed
426
+
310
427
  - [Alfonso Uceda Pompa] `redirect_to` now is a flow control method: it terminates the execution of an action, including the callbacks.
311
428
 
312
429
  ## v0.3.2 - 2015-01-30
430
+
313
431
  ### Added
432
+
314
433
  - [Alfonso Uceda Pompa] Callbacks: introduced `append_before` (alias of `before`), `append_after` (alias of `after`), `prepend_before` and `prepend_after`.
315
434
  - [Alfonso Uceda Pompa] Introduced `Lotus::Action::Params#raw` which returns unfiltered data as it comes from an HTTP request.
316
435
  - [Alfonso Uceda Pompa] `Lotus::Action::Rack.use` now fully supports Rack middleware, by mounting an internal `Rack::Builder` instance.
@@ -318,20 +437,26 @@ Complete, fast and testable actions for Rack
318
437
  - [Steve Hodgkiss] Nested params validation
319
438
 
320
439
  ### Fixed
440
+
321
441
  - [Luca Guidi] Ensure HEAD requests will return empty body
322
442
  - [Stefano Verna] Ensure HTTP status codes with empty body won't send body and non-entity headers.
323
443
  - [Luca Guidi] Only dump exceptions in `rack.errors` if handling is turned off, or the raised exception is not managed.
324
444
  - [Luca Guidi] Ensure params will return coerced values
325
445
 
326
446
  ## v0.3.1 - 2015-01-08
447
+
327
448
  ### Added
449
+
328
450
  - [Lasse Skindstad Ebert] Introduced `Action#request` which returns an instance a `Rack::Request` compliant object: `Lotus::Action::Request`.
329
451
 
330
452
  ### Fixed
453
+
331
454
  - [Steve Hodgkiss] Ensure params to return coerced values
332
455
 
333
456
  ## v0.3.0 - 2014-12-23
457
+
334
458
  ### Added
459
+
335
460
  - [Luca Guidi] Introduced `Action#request_id` as unique identifier for an incoming HTTP request
336
461
  - [Luca Guidi] Introduced `Lotus::Controller.load!` as loading framework entry point
337
462
  - [Kir Shatrov] Allow to define a default charset (`default_charset` configuration)
@@ -347,6 +472,7 @@ Complete, fast and testable actions for Rack
347
472
  - [Luca Guidi] Official support for Ruby 2.2
348
473
 
349
474
  ### Changed
475
+
350
476
  - [Trung Lê] Renamed `Configuration#modules` to `#prepare`
351
477
  - [Luca Guidi] Update HTTP status codes to IETF RFC 7231
352
478
  - [Luca Guidi] When `Lotus::Controller` is included, don't inject code
@@ -355,30 +481,37 @@ Complete, fast and testable actions for Rack
355
481
  - [Fuad Saud] Reduce method visibility where possible (Ruby `private` and `protected`)
356
482
 
357
483
  ### Fixed
484
+
358
485
  - [Luca Guidi] Don't let exposures definition to override existing methods
359
486
 
360
487
  ## v0.2.0 - 2014-06-23
488
+
361
489
  ### Added
490
+
362
491
  - [Luca Guidi] Introduced `Controller.configure` and `Controller.duplicate`
363
492
  - [Luca Guidi] Introduced `Action.use`, that let to use a Rack middleware as a before callback
364
- – [Luca Guidi] Allow to define a default mime type when the request is `Accept: */*` (`default_format` configuration)
365
- – [Luca Guidi] Allow to register custom mime types and associate them to a symbol (`format` configuration)
493
+ – [Luca Guidi] Allow to define a default mime type when the request is `Accept: */*` (`default_format` configuration)
494
+ – [Luca Guidi] Allow to register custom mime types and associate them to a symbol (`format` configuration)
366
495
  - [Luca Guidi] Introduced `Configuration#handle_exceptions` to associate exceptions to HTTP statuses
367
496
  - [Damir Zekic] Allow developers to toggle exception handling (`handle_exceptions` configuration)
368
497
  - [Luca Guidi] Introduced `Controller::Configuration`
369
498
  - [Luca Guidi] Official support for Ruby 2.1
370
499
 
371
500
  ### Changed
501
+
372
502
  - [Luca Guidi] `Lotus::Action::Params` doesn't inherit from `Lotus::Utils::Hash` anymore
373
503
  - [Luca Guidi] `Lotus::Action::CookieJar` doesn't inherit from `Lotus::Utils::Hash` anymore
374
504
  - [Luca Guidi] Make HTTP status messages compliant with IANA and Rack
375
505
  - [Damir Zekic] Moved `#throw` override logic into `#halt`, which keeps the same semantic
376
506
 
377
507
  ### Fixed
508
+
378
509
  - [Krzysztof Zalewski] Reference exception in `rack.errors`
379
510
 
380
511
  ## v0.1.0 - 2014-02-23
512
+
381
513
  ### Added
514
+
382
515
  - [Luca Guidi] Introduced `Action.accept` to whitelist accepted mime types
383
516
  - [Luca Guidi] Introduced `Action#accept?` as a query method for the current request
384
517
  - [Luca Guidi] Allow to whitelist handled exceptions and associate them to an HTTP status
data/README.md CHANGED
@@ -26,14 +26,14 @@ Complete, fast and testable actions for Rack and [Hanami](http://hanamirb.org)
26
26
 
27
27
  ## Rubies
28
28
 
29
- __Hanami::Controller__ supports Ruby (MRI) 2.6+
29
+ __Hanami::Controller__ supports Ruby (MRI) 3.0+
30
30
 
31
31
  ## Installation
32
32
 
33
33
  Add this line to your application's Gemfile:
34
34
 
35
35
  ```ruby
36
- gem "hanami/controller"
36
+ gem "hanami-controller"
37
37
  ```
38
38
 
39
39
  And then execute:
@@ -967,6 +967,4 @@ __Hanami::Controller__ uses [Semantic Versioning 2.0.0](http://semver.org)
967
967
 
968
968
  ## Copyright
969
969
 
970
- Copyright © 2014-2021 Luca Guidi – Released under MIT License
971
-
972
- This project was formerly known as Lotus (`lotus-controller`).
970
+ Copyright © 2014-2022 Hanami Team – Released under MIT License
@@ -1,30 +1,32 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path("../lib", __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'hanami/controller/version'
5
+ require "hanami/controller/version"
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = 'hanami-controller'
8
+ spec.name = "hanami-controller"
8
9
  spec.version = Hanami::Controller::VERSION
9
- spec.authors = ['Luca Guidi']
10
- spec.email = ['me@lucaguidi.com']
11
- spec.description = %q{Complete, fast and testable actions for Rack}
12
- spec.summary = %q{Complete, fast and testable actions for Rack and Hanami}
13
- spec.homepage = 'http://hanamirb.org'
14
- spec.license = 'MIT'
10
+ spec.authors = ["Luca Guidi"]
11
+ spec.email = ["me@lucaguidi.com"]
12
+ spec.description = "Complete, fast and testable actions for Rack"
13
+ spec.summary = "Complete, fast and testable actions for Rack and Hanami"
14
+ spec.homepage = "http://hanamirb.org"
15
+ spec.license = "MIT"
15
16
 
16
17
  spec.files = `git ls-files -- lib/* CHANGELOG.md LICENSE.md README.md hanami-controller.gemspec`.split($/)
17
18
  spec.executables = []
18
- spec.test_files = spec.files.grep(%r{^(spec)/})
19
- spec.require_paths = ['lib']
20
- spec.required_ruby_version = '>= 2.6.0'
19
+ spec.require_paths = ["lib"]
20
+ spec.metadata["rubygems_mfa_required"] = "true"
21
+ spec.required_ruby_version = ">= 3.0"
21
22
 
22
- spec.add_dependency 'rack', '~> 2.0'
23
- spec.add_dependency 'hanami-utils', '~> 2.0.alpha'
24
- spec.add_dependency 'dry-configurable', '~> 0.13', '>= 0.13.0'
23
+ spec.add_dependency "rack", "~> 2.0"
24
+ spec.add_dependency "hanami-utils", "~> 2.0.beta"
25
+ spec.add_dependency "dry-configurable", "~> 0.13", ">= 0.13.0"
25
26
 
26
- spec.add_development_dependency 'bundler', '>= 1.6', '< 3'
27
- spec.add_development_dependency 'rack-test', '~> 1.0'
28
- spec.add_development_dependency 'rake', '~> 13'
29
- spec.add_development_dependency 'rspec', '~> 3.9'
27
+ spec.add_development_dependency "bundler", ">= 1.6", "< 3"
28
+ spec.add_development_dependency "rack-test", "~> 2.0"
29
+ spec.add_development_dependency "rake", "~> 13"
30
+ spec.add_development_dependency "rspec", "~> 3.9"
31
+ spec.add_development_dependency "rubocop", "~> 1.0"
30
32
  end
@@ -1,46 +1,11 @@
1
- require 'rack/request'
2
- require 'hanami/utils/hash'
1
+ # frozen_string_literal: true
2
+
3
+ require "rack/request"
4
+ require "hanami/utils/hash"
3
5
 
4
6
  module Hanami
5
7
  class Action
6
8
  class BaseParams
7
- # The key that returns raw input from the Rack env
8
- #
9
- # @since 0.7.0
10
- # @api private
11
- RACK_INPUT = 'rack.input'.freeze
12
-
13
- # The key that returns router params from the Rack env
14
- # This is a builtin integration for Hanami::Router
15
- #
16
- # @since 0.7.0
17
- # @api private
18
- ROUTER_PARAMS = 'router.params'.freeze
19
-
20
- # The key that returns Rack session params from the Rack env
21
- # Please note that this is used only when an action is unit tested.
22
- #
23
- # @since 1.0.0
24
- # @api private
25
- #
26
- # @example
27
- # # action unit test
28
- # action.call('rack.session' => { 'foo' => 'bar' })
29
- # action.session[:foo] # => "bar"
30
- RACK_SESSION = 'rack.session'.freeze
31
-
32
- # HTTP request method for Rack env
33
- #
34
- # @since 1.1.1
35
- # @api private
36
- REQUEST_METHOD = 'REQUEST_METHOD'.freeze
37
-
38
- # Default HTTP request method for Rack env
39
- #
40
- # @since 1.1.1
41
- # @api private
42
- DEFAULT_REQUEST_METHOD = 'GET'.freeze
43
-
44
9
  # @attr_reader env [Hash] the Rack env
45
10
  #
46
11
  # @since 0.7.0
@@ -89,24 +54,22 @@ module Hanami
89
54
  # @since 0.7.0
90
55
  #
91
56
  # @example
92
- # require 'hanami/controller'
57
+ # require "hanami/controller"
93
58
  #
94
59
  # module Deliveries
95
- # class Create
96
- # include Hanami::Action
97
- #
98
- # def call(params)
99
- # params.get(:customer_name) # => "Luca"
100
- # params.get(:uknown) # => nil
60
+ # class Create < Hanami::Action
61
+ # def handle(req, *)
62
+ # req.params.get(:customer_name) # => "Luca"
63
+ # req.params.get(:uknown) # => nil
101
64
  #
102
- # params.get(:address, :city) # => "Rome"
103
- # params.get(:address, :unknown) # => nil
65
+ # req.params.get(:address, :city) # => "Rome"
66
+ # req.params.get(:address, :unknown) # => nil
104
67
  #
105
- # params.get(:tags, 0) # => "foo"
106
- # params.get(:tags, 1) # => "bar"
107
- # params.get(:tags, 999) # => nil
68
+ # req.params.get(:tags, 0) # => "foo"
69
+ # req.params.get(:tags, 1) # => "bar"
70
+ # req.params.get(:tags, 999) # => nil
108
71
  #
109
- # params.get(nil) # => nil
72
+ # req.params.get(nil) # => nil
110
73
  # end
111
74
  # end
112
75
  # end
@@ -118,7 +81,7 @@ module Hanami
118
81
  #
119
82
  # @api private
120
83
  # @since 0.8.0
121
- alias dig get
84
+ alias_method :dig, :get
122
85
 
123
86
  # Provide a common interface with Params
124
87
  #
@@ -157,12 +120,12 @@ module Hanami
157
120
  def _extract_params
158
121
  result = {}
159
122
 
160
- if env.key?(RACK_INPUT)
123
+ if env.key?(Action::RACK_INPUT)
161
124
  result.merge! ::Rack::Request.new(env).params
162
125
  result.merge! _router_params
163
126
  else
164
127
  result.merge! _router_params(env)
165
- env[REQUEST_METHOD] ||= DEFAULT_REQUEST_METHOD
128
+ env[Action::REQUEST_METHOD] ||= Action::DEFAULT_REQUEST_METHOD
166
129
  end
167
130
 
168
131
  result
@@ -172,8 +135,8 @@ module Hanami
172
135
  # @api private
173
136
  def _router_params(fallback = {})
174
137
  env.fetch(ROUTER_PARAMS) do
175
- if session = fallback.delete(RACK_SESSION) # rubocop:disable Lint/AssignmentInCondition
176
- fallback[RACK_SESSION] = Utils::Hash.deep_symbolize(session)
138
+ if session = fallback.delete(Action::RACK_SESSION)
139
+ fallback[Action::RACK_SESSION] = Utils::Hash.deep_symbolize(session)
177
140
  end
178
141
 
179
142
  fallback