hanami-controller 2.0.0.alpha8 → 2.0.0.beta4

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: 9f2dcbf06a2ab59f4e97934102b22e61e6ae0d8998c1489b5e30a610357a5da3
4
- data.tar.gz: 16c6d14e8ed4eb97ba2aca1c24263f46129d84738133a1973cebfd2d0a09a300
3
+ metadata.gz: a363029b7df3ddc560e2975862f72548788a2a2910c2d32519f073556b4bfbb2
4
+ data.tar.gz: e7d67505e3b0161a656d24e1ff634bd02c11d4fad1e217a1ee482271be6dbbd9
5
5
  SHA512:
6
- metadata.gz: a13ccd638bda53b97a5ec4d12a1f3815305e674a4321ec239764ef0093ba580949be8d5efc2e1fdc7175b71b350c01f2d92defd2e460b18c4e2e2d36add171ea
7
- data.tar.gz: 11487c281a8331e5d5447f68b120b0f5dc582a5a93e9fbf8d2436bb0cee2f55f5f7ff51c6576792cab79d1be1760585c9bbbf16c019323a6701e8c0d233266ed
6
+ metadata.gz: 0a9aeb4ea44db1fe6f137dee8f3e5e05bda318a8c53f1f57c30204a0077b5dcfd82aefab569fd7169c2c728de2331fcaa52f1fcdec2e3adb6d4679c38791edf6
7
+ data.tar.gz: 726de07b87cd8055da9973ea0365c00bde1f8808a1593ef3830051e196c722f001f6dc13615182f067542c605c9437259d1d36028031867edf3abd8d9612e817
data/CHANGELOG.md CHANGED
@@ -1,39 +1,81 @@
1
1
  # Hanami::Controller
2
+
2
3
  Complete, fast and testable actions for Rack
3
4
 
5
+ ## v2.0.0.beta4 - 2022-10-24
6
+
7
+ ### Added
8
+
9
+ - [Tim Riley] Add `Response#flash`, and delgate to request object for both `Response#session` and `Response#flash`, ensuring the same objects are used when accessed via either request or response (#399)
10
+
11
+ ### Fixed
12
+
13
+ - [Benjamin Klotz] When a params validation schema is provided (in a `params do` block), only return the validated params from `request.params` (#375)
14
+ - [Sean Collins] Handle dry-schema's messages hash now being frozen by default (#391)
15
+
16
+ ### Changed
17
+
18
+ - [Tim Riley] When `Action.accept` is declared (or `Action::Config.accepted_formats` configured), return a 406 error if an `Accept` request header is present but is not acceptable. In the absence of an `Accept` header, return a 415 error if a `Content-Type` header is present but not acceptable. If neither header is provided, accept the request. (#396)
19
+ - [Tim Riley] Add `Action.handle_exception` class method as a shortcut for `Hanami::Action::Config#handle_exception` (#394)
20
+ - [Tim Riley] Significantly reduce memory usage by leveraging recent dry-configurable changes, and relocating `accepted_formats`, `before_callbacks`, `after_callbacks` inheritable attributes to `config` (#392)
21
+ - [Tim Riley] Make params validation schemas (defined in `params do` block) inheritable to subclasses (#394)
22
+ - [Benhamin Klotz, Tim Riley] Raise `Hanami::Action::MissingSessionError` with a friendly message if `Request#session`, `Request#flash`, `Response#session` or `Response#flash` are called for an action that does not already include `Hanami::Action:Session` mixin (#379 via #395)
23
+
24
+ ## v2.0.0.beta1 - 2022-07-20
25
+
26
+ ### Fixed
27
+
28
+ - [Benjamin Klotz] Using `Hanami::Action.params` without having `hanami-validations` installed now returns a user-friendly error
29
+ - [Narinda Reeders] Ensure HEAD responses to send empty body, but preserve headers
30
+ - [Narinda Reeders] Ensure HEAD redirect responses to return redirect headers
31
+ - [Andrew Croome] Do not automatically render halted requests
32
+
4
33
  ## v2.0.0.alpha8 - 2022-02-19
5
34
 
6
35
  ### Changed
36
+
7
37
  - [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.
8
38
 
9
39
  ## v2.0.0.alpha6 - 2022-02-10
40
+
10
41
  ### Added
42
+
11
43
  - [Luca Guidi] Official support for Ruby: MRI 3.1
12
44
 
13
45
  ### Changed
46
+
14
47
  - [Luca Guidi] Drop support for Ruby: MRI 2.6, and 2.7.
15
48
  - [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`.
16
49
 
17
50
  ## v2.0.0.alpha5 - 2022-01-12
51
+
18
52
  ### Added
53
+
19
54
  - [Philip Arndt] Added "rss" ("application/rss+xml") to list of supported MIME types
20
55
 
21
56
  ## v2.0.0.alpha4 - 2021-12-07
57
+
22
58
  ### Added
59
+
23
60
  - [Luca Guidi] Manage Content Security Policy (CSP) defaults and new API via `Hanami::Action::ApplicationConfiguration#content_security_policy`
24
61
  - [Tim Riley & Marc Busqué] Provide access to routes inside all application actions via `Hanami::Action::ApplicationAction#routes`
25
62
 
26
63
  ## v2.0.0.alpha3 - 2021-11-09
64
+
27
65
  ### Added
66
+
28
67
  - [Luca Guidi] Automatically include session behavior in `Hanami::Action` when sessions are enabled via Hanami application config
29
68
  - [Sean Collins] Pass exposures from action to view
30
69
 
31
70
  ### Changed
71
+
32
72
  - [Tim Riley] (Internal) Updated settings to use updated `setting` API in dry-configurable 0.13.0
33
73
  - [Sean Collins] Move automatic view rendering from `handle` to `finish`
34
74
 
35
75
  ## v2.0.0.alpha2 - 2021-05-04
76
+
36
77
  ### Added
78
+
37
79
  - [Luca Guidi] Official support for Ruby: MRI 3.0
38
80
  - [Tim Riley] Introduced `Hanami::Action::ApplicationAction`
39
81
  - [Tim Riley] Introduced `Hanami::Action::Configuration`
@@ -43,21 +85,26 @@ Complete, fast and testable actions for Rack
43
85
  - [Tim Riley] Enable CSRF protection automatically when HTTP sessions are enabled
44
86
 
45
87
  ### Fixed
88
+
46
89
  - [Luca Guidi] Ensure `Hanami::Action::Response#renderable?` to return `false` when body is set
47
90
  - [Andrew Croome] Ensure `Hanami::Action.accept` to use Rack `CONTENT_TYPE` for the _before callback_ check
48
91
 
49
92
  ### Changed
93
+
50
94
  - [Luca Guidi] Drop support for Ruby: MRI 2.5.
51
95
  - [Tim Riley] Removed `Hanami::Action.handle_exception` in favor of `Hanami::Action.config.handle_exception`
52
96
  - [Tim Riley] Rewritten `Hanami::Action::Flash`, based on Roda's `FlashHash`
53
97
 
54
98
  ## v2.0.0.alpha1 - 2019-01-30
99
+
55
100
  ### Added
101
+
56
102
  - [Luca Guidi] `Hanami::Action::Request#session` to access the HTTP session as it was originally sent
57
103
  - [Luca Guidi] `Hanami::Action::Request#cookies` to access the HTTP cookies as they were originally sent
58
104
  - [Luca Guidi & Tim Riley] Allow to build a deep inheritance chain for actions
59
105
 
60
106
  ### Changed
107
+
61
108
  - [Luca Guidi] Drop support for Ruby: MRI 2.3, and 2.4.
62
109
  - [Luca Guidi] `Hanami::Action` is a superclass
63
110
  - [Luca Guidi] `Hanami::Action#initialize` requires a `configuration:` keyword argument
@@ -101,40 +148,54 @@ Complete, fast and testable actions for Rack
101
148
  - [Luca Guidi] `Hanami::Action` exception handlers now accept `Hanami::Action::Request`, `Hanami::Action::Response`, and exception arguments
102
149
 
103
150
  ## v1.3.3 - 2020-01-14
151
+
104
152
  ### Added
153
+
105
154
  - [Luca Guidi] Official support for Ruby: MRI 2.7
106
155
  - [Luca Guidi] Support `rack` 2.1
107
156
  - [Luca Guidi] Support for both `hanami-validations` 1 and 2
108
157
 
109
158
  ## v1.3.2 - 2019-06-28
159
+
110
160
  ### Fixed
161
+
111
162
  - [Ian Ker-Seymer] Ensure `Etag` to work when `If-Modified-Since` is sent from browser and upstream proxy sets `Last-Modified` automatically.
112
163
 
113
164
  ## v1.3.1 - 2019-01-18
165
+
114
166
  ### Added
167
+
115
168
  - [Luca Guidi] Official support for Ruby: MRI 2.6
116
169
  - [Luca Guidi] Support `bundler` 2.0+
117
170
 
118
171
  ## v1.3.0 - 2018-10-24
172
+
119
173
  ### Added
174
+
120
175
  - [Gustavo Caso] Swappable JSON backed for `Hanami::Action::Flash` based on `Hanami::Utils::Json`
121
176
 
122
177
  ## v1.3.0.beta1 - 2018-08-08
178
+
123
179
  ### Added
180
+
124
181
  - [Luca Guidi] Official support for JRuby 9.2.0.0
125
182
 
126
183
  ### Fixed
184
+
127
185
  - [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.
128
186
  - [Gustavo Caso] Don't show flash message for the request after a HTTP redirect.
129
187
  - [Gustavo Caso] Ensure `Hanami::Action::Flash#each`, `#map`, and `#empty?` to not reference stale flash data.
130
188
 
131
189
  ### Deprecated
190
+
132
191
  - [Gustavo Caso] Deprecate `Hanami::Action#parsed_request_body`
133
192
 
134
193
  ## v1.2.0 - 2018-04-11
135
194
 
136
195
  ## v1.2.0.rc2 - 2018-04-06
196
+
137
197
  ### Added
198
+
138
199
  - [Gustavo Caso] Introduce `Hanami::Action::Flash#each` and `#map`
139
200
 
140
201
  ## v1.2.0.rc1 - 2018-03-30
@@ -142,20 +203,27 @@ Complete, fast and testable actions for Rack
142
203
  ## v1.2.0.beta2 - 2018-03-23
143
204
 
144
205
  ## v1.2.0.beta1 - 2018-02-28
206
+
145
207
  ### Added
208
+
146
209
  - [Luca Guidi] Official support for Ruby: MRI 2.5
147
210
  - [Sergey Fedorov] Introduce `Hanami::Action.content_type` to accept/reject requests according to their `Content-Type` header.
148
211
 
149
212
  ### Fixed
213
+
150
214
  - [wheresmyjetpack] Raise meaningful exception when trying to access `session` or `flash` and `Hanami::Action::Session` wasn't included.
151
215
 
152
216
  ## v1.1.1 - 2017-11-22
217
+
153
218
  ### Fixed
219
+
154
220
  - [Luca Guidi] Ensure `Hanami::Action#send_file` and `#unsafe_send_file` to run `after` action callbacks
155
221
  - [Luca Guidi] Ensure Rack env to have the `REQUEST_METHOD` key set to `GET` during actions unit tests
156
222
 
157
223
  ## v1.1.0 - 2017-10-25
224
+
158
225
  ### Added
226
+
159
227
  - [Luca Guidi] Introduce `Hanami::Action::CookieJar#each` to iterate through action's `cookies`
160
228
 
161
229
  ## v1.1.0.rc1 - 2017-10-16
@@ -163,13 +231,17 @@ Complete, fast and testable actions for Rack
163
231
  ## v1.1.0.beta3 - 2017-10-04
164
232
 
165
233
  ## v1.1.0.beta2 - 2017-10-03
234
+
166
235
  ### Added
236
+
167
237
  - [Luca Guidi] Introduce `Hanami::Action::Params::Errors#add` to add errors not generated by params validations
168
238
 
169
239
  ## v1.1.0.beta1 - 2017-08-11
170
240
 
171
241
  ## v1.0.1 - 2017-07-10
242
+
172
243
  ### Fixed
244
+
173
245
  - [Marcello Rocha] Ensure validation params to be symbolized in all the environments
174
246
  - [Marcello Rocha] Fix regression (`1.0.0`) about MIME type priority, during the evaluation of a weighted `Accept` HTTP header
175
247
 
@@ -178,69 +250,92 @@ Complete, fast and testable actions for Rack
178
250
  ## v1.0.0.rc1 - 2017-03-31
179
251
 
180
252
  ## v1.0.0.beta3 - 2017-03-17
253
+
181
254
  ### Changed
255
+
182
256
  - [Luca Guidi] `Action#flash` is now public API
183
257
 
184
258
  ## v1.0.0.beta2 - 2017-03-02
259
+
185
260
  ### Added
261
+
186
262
  - [Marcello Rocha] Add `Action#unsafe_send_file` to send files outside of the public directory of a project
187
263
 
188
264
  ### Fixed
265
+
189
266
  - [Anton Davydov] Ensure HTTP Cache to not crash when `HTTP_IF_MODIFIED_SINCE` and `HTTP_IF_NONE_MATCH` have blank values
190
267
  - [Luca Guidi] Keep flash values after a redirect
191
268
  - [Craig M. Wellington & Luca Guidi] Ensure to return 404 when `Action#send_file` cannot find a file with a globbed route
192
269
  - [Luca Guidi] Don't mutate Rack env when sending files
193
270
 
194
271
  ## v1.0.0.beta1 - 2017-02-14
272
+
195
273
  ### Added
274
+
196
275
  - [Luca Guidi] Official support for Ruby: MRI 2.4
197
276
 
198
277
  ### Fixed
278
+
199
279
  - [Marcello Rocha & Luca Guidi] Avoid MIME type conflicts for `Action#format` detection
200
280
  - [Matias H. Leidemer & Luca Guidi] Ensure `Flash` to return only fresh data
201
281
  - [Luca Guidi] Ensure `session` keys to be accessed as symbols in action unit tests
202
282
 
203
283
  ### Changed
284
+
204
285
  - [Anton Davydov & Luca Guidi] Make it work only with Rack 2.0
205
286
 
206
287
  ## v0.8.1 - 2016-12-19
288
+
207
289
  ### Fixed
290
+
208
291
  - [Thorbjørn Hermansen] Don't pollute Rack env's `rack.exception` key if an exception is handled
209
292
  - [Luca Guidi] Add `flash` to the default exposures
210
293
 
211
294
  ## v0.8.0 - 2016-11-15
295
+
212
296
  ### Added
297
+
213
298
  - [Marion Duprey] Allow `BaseParams#get` to read (nested) arrays
214
299
 
215
300
  ### Fixed
301
+
216
302
  - [Russell Cloak] Respect custom formats when referenced by HTTP `Accept`
217
303
  - [Kyle Chong] Don't symbolize raw params
218
304
 
219
305
  ### Changed
306
+
220
307
  - [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')`)
221
308
 
222
309
  ## v0.7.1 - 2016-10-06
310
+
223
311
  ### Added
312
+
224
313
  - [Kyle Chong] Introduced `parsed_request_body` for action
225
314
  - [Luca Guidi] Introduced `Hanami::Action::BaseParams#each`
226
315
 
227
316
  ### Fixed
317
+
228
318
  - [Ayleen McCann] Use default content type when `HTTP_ACCEPT` is `*/*`
229
319
  - [Kyle Chong] Don't stringify uploaded files
230
320
  - [Kyle Chong] Don't stringify params values when not necessary
231
321
 
232
322
  ### Changed
323
+
233
324
  - [akhramov & Luca Guidi] Raise `Hanami::Controller::IllegalExposureError` when try to expose reserved words: `params`, and `flash`.
234
325
 
235
326
  ## v0.7.0 - 2016-07-22
327
+
236
328
  ### Added
329
+
237
330
  - [Luca Guidi] Introduced `Hanami::Action::Params#error_messages` which returns a flat collection of full error messages
238
331
 
239
332
  ### Fixed
333
+
240
334
  - [Luca Guidi] Params are deeply symbolized
241
335
  - [Artem Nistratov] Send only changed cookies in HTTP response
242
336
 
243
337
  ### Changed
338
+
244
339
  - [Luca Guidi] Drop support for Ruby 2.0 and 2.1. Official support for JRuby 9.0.5.0+.
245
340
  - [Luca Guidi] Param validations now require you to add `hanami-validations` in `Gemfile`.
246
341
  - [Luca Guidi] Removed "_indifferent access_" for params. Since now on, only symbols are allowed.
@@ -250,80 +345,110 @@ Complete, fast and testable actions for Rack
250
345
  - [Vasilis Spilka] Made `Hanami::Action::Session#errors` public
251
346
 
252
347
  ## v0.6.1 - 2016-02-05
348
+
253
349
  ### Changed
350
+
254
351
  - [Anatolii Didukh] Optimise memory usage by freezing MIME types constant
255
352
 
256
353
  ## v0.6.0 - 2016-01-22
354
+
257
355
  ### Changed
356
+
258
357
  - [Luca Guidi] Renamed the project
259
358
 
260
359
  ## v0.5.1 - 2016-01-19
360
+
261
361
  ### Fixed
362
+
262
363
  - [Alfonso Uceda] Ensure `rack.session` cookie to not be sent twice when both `Lotus::Action::Cookies` and `Rack::Session::Cookie` are used together
263
364
 
264
365
  ## v0.5.0 - 2016-01-12
366
+
265
367
  ### Added
368
+
266
369
  - [Luca Guidi] Reference a raised exception in Rack env's `rack.exception`. Compatibility with exception reporting SaaS.
267
370
 
268
371
  ### Fixed
372
+
269
373
  - [Cainã Costa] Ensure Rack environment to be always available for sessions unit tests
270
374
  - [Luca Guidi] Ensure superclass exceptions to not shadow subclasses during exception handling (eg. `CustomError` handler will take precedence over `StandardError`)
271
375
 
272
376
  ### Changed
377
+
273
378
  - [Luca Guidi] Removed `Lotus::Controller::Configuration#default_format`
274
379
  - [Cainã Costa] Made `Lotus::Action#session` a public method for improved unit testing
275
380
  - [Karim Tarek] Introduced `Lotus::Controller::Error` and let all the framework exceptions to inherit from it.
276
381
 
277
382
  ## v0.4.6 - 2015-12-04
383
+
278
384
  ### Added
385
+
279
386
  - [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
280
387
 
281
388
  ## v0.4.5 - 2015-09-30
389
+
282
390
  ### Added
391
+
283
392
  - [Theo Felippe] Added configuration entries: `#default_request_format` and `default_response_format`.
284
393
  - [Wellington Santos] Error handling to take account of inherited exceptions.
285
394
 
286
395
  ### Changed
396
+
287
397
  - [Theo Felippe] Deprecated `#default_format` in favor of: `#default_request_format`.
288
398
 
289
399
  ## v0.4.4 - 2015-06-23
400
+
290
401
  ### Added
402
+
291
403
  - [Luca Guidi] Security protection against Cross Site Request Forgery (CSRF).
292
404
 
293
405
  ### Fixed
406
+
294
407
  - [Matthew Bellantoni] Ensure nested params to be correctly coerced to Hash.
295
408
 
296
409
  ## v0.4.3 - 2015-05-22
410
+
297
411
  ### Added
412
+
298
413
  - [Alfonso Uceda Pompa & Luca Guidi] Introduced `Lotus::Action#send_file`
299
414
  - [Alfonso Uceda Pompa] Set automatically `Expires` option for cookies when it's missing but `Max-Age` is present. Compatibility with old browsers.
300
415
 
301
416
  ## v0.4.2 - 2015-05-15
417
+
302
418
  ### Fixed
419
+
303
420
  - [Luca Guidi] Ensure `Lotus::Action::Params#to_h` to return `::Hash` at the top level
304
421
 
305
422
  ## v0.4.1 - 2015-05-15
423
+
306
424
  ### Fixed
425
+
307
426
  - [Luca Guidi] Ensure proper automatic `Content-Type` working well with Internet Explorer.
308
427
  - [Luca Guidi] Ensure `Lotus::Action#redirect_to` to return `::String` for Rack servers compatibility.
309
428
 
310
429
  ### Changed
430
+
311
431
  - [Alfonso Uceda Pompa] Prevent `Content-Type` and `Content-Lenght` to be sent when status code requires no body (eg. `204`).
312
- This is for compatibility with `Rack::Lint`, not with RFC 2016.
432
+ This is for compatibility with `Rack::Lint`, not with RFC 2016.
313
433
  - [Luca Guidi] Ensure `Lotus::Action::Params#to_h` to return `::Hash`
314
434
 
315
435
  ## v0.4.0 - 2015-03-23
436
+
316
437
  ### Added
438
+
317
439
  - [Erol Fornoles] `Action.use` now accepts a block
318
440
  - [Alfonso Uceda Pompa] Introduced `Lotus::Controller::Configuration#cookies` as default cookie options.
319
441
  - [Alfonso Uceda Pompa] Introduced `Lotus::Controller::Configuration#default_headers` as default HTTP headers to return in all the responses.
320
442
  - [Luca Guidi] Introduced `Lotus::Action::Params#get` as a safe API to access nested params.
321
443
 
322
444
  ### Changed
445
+
323
446
  - [Alfonso Uceda Pompa] `redirect_to` now is a flow control method: it terminates the execution of an action, including the callbacks.
324
447
 
325
448
  ## v0.3.2 - 2015-01-30
449
+
326
450
  ### Added
451
+
327
452
  - [Alfonso Uceda Pompa] Callbacks: introduced `append_before` (alias of `before`), `append_after` (alias of `after`), `prepend_before` and `prepend_after`.
328
453
  - [Alfonso Uceda Pompa] Introduced `Lotus::Action::Params#raw` which returns unfiltered data as it comes from an HTTP request.
329
454
  - [Alfonso Uceda Pompa] `Lotus::Action::Rack.use` now fully supports Rack middleware, by mounting an internal `Rack::Builder` instance.
@@ -331,20 +456,26 @@ Complete, fast and testable actions for Rack
331
456
  - [Steve Hodgkiss] Nested params validation
332
457
 
333
458
  ### Fixed
459
+
334
460
  - [Luca Guidi] Ensure HEAD requests will return empty body
335
461
  - [Stefano Verna] Ensure HTTP status codes with empty body won't send body and non-entity headers.
336
462
  - [Luca Guidi] Only dump exceptions in `rack.errors` if handling is turned off, or the raised exception is not managed.
337
463
  - [Luca Guidi] Ensure params will return coerced values
338
464
 
339
465
  ## v0.3.1 - 2015-01-08
466
+
340
467
  ### Added
468
+
341
469
  - [Lasse Skindstad Ebert] Introduced `Action#request` which returns an instance a `Rack::Request` compliant object: `Lotus::Action::Request`.
342
470
 
343
471
  ### Fixed
472
+
344
473
  - [Steve Hodgkiss] Ensure params to return coerced values
345
474
 
346
475
  ## v0.3.0 - 2014-12-23
476
+
347
477
  ### Added
478
+
348
479
  - [Luca Guidi] Introduced `Action#request_id` as unique identifier for an incoming HTTP request
349
480
  - [Luca Guidi] Introduced `Lotus::Controller.load!` as loading framework entry point
350
481
  - [Kir Shatrov] Allow to define a default charset (`default_charset` configuration)
@@ -360,6 +491,7 @@ Complete, fast and testable actions for Rack
360
491
  - [Luca Guidi] Official support for Ruby 2.2
361
492
 
362
493
  ### Changed
494
+
363
495
  - [Trung Lê] Renamed `Configuration#modules` to `#prepare`
364
496
  - [Luca Guidi] Update HTTP status codes to IETF RFC 7231
365
497
  - [Luca Guidi] When `Lotus::Controller` is included, don't inject code
@@ -368,30 +500,37 @@ Complete, fast and testable actions for Rack
368
500
  - [Fuad Saud] Reduce method visibility where possible (Ruby `private` and `protected`)
369
501
 
370
502
  ### Fixed
503
+
371
504
  - [Luca Guidi] Don't let exposures definition to override existing methods
372
505
 
373
506
  ## v0.2.0 - 2014-06-23
507
+
374
508
  ### Added
509
+
375
510
  - [Luca Guidi] Introduced `Controller.configure` and `Controller.duplicate`
376
511
  - [Luca Guidi] Introduced `Action.use`, that let to use a Rack middleware as a before callback
377
- – [Luca Guidi] Allow to define a default mime type when the request is `Accept: */*` (`default_format` configuration)
378
- – [Luca Guidi] Allow to register custom mime types and associate them to a symbol (`format` configuration)
512
+ – [Luca Guidi] Allow to define a default mime type when the request is `Accept: */*` (`default_format` configuration)
513
+ – [Luca Guidi] Allow to register custom mime types and associate them to a symbol (`format` configuration)
379
514
  - [Luca Guidi] Introduced `Configuration#handle_exceptions` to associate exceptions to HTTP statuses
380
515
  - [Damir Zekic] Allow developers to toggle exception handling (`handle_exceptions` configuration)
381
516
  - [Luca Guidi] Introduced `Controller::Configuration`
382
517
  - [Luca Guidi] Official support for Ruby 2.1
383
518
 
384
519
  ### Changed
520
+
385
521
  - [Luca Guidi] `Lotus::Action::Params` doesn't inherit from `Lotus::Utils::Hash` anymore
386
522
  - [Luca Guidi] `Lotus::Action::CookieJar` doesn't inherit from `Lotus::Utils::Hash` anymore
387
523
  - [Luca Guidi] Make HTTP status messages compliant with IANA and Rack
388
524
  - [Damir Zekic] Moved `#throw` override logic into `#halt`, which keeps the same semantic
389
525
 
390
526
  ### Fixed
527
+
391
528
  - [Krzysztof Zalewski] Reference exception in `rack.errors`
392
529
 
393
530
  ## v0.1.0 - 2014-02-23
531
+
394
532
  ### Added
533
+
395
534
  - [Luca Guidi] Introduced `Action.accept` to whitelist accepted mime types
396
535
  - [Luca Guidi] Introduced `Action#accept?` as a query method for the current request
397
536
  - [Luca Guidi] Allow to whitelist handled exceptions and associate them to an HTTP status
data/README.md CHANGED
@@ -771,7 +771,7 @@ end
771
771
  # When called with "\*/\*" => 200
772
772
  # When called with "text/html" => 200
773
773
  # When called with "application/json" => 200
774
- # When called with "application/xml" => 406
774
+ # When called with "application/xml" => 415
775
775
  ```
776
776
 
777
777
  You can check if the requested MIME type is accepted by the client.
@@ -1,31 +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']
19
+ spec.require_paths = ["lib"]
20
20
  spec.metadata["rubygems_mfa_required"] = "true"
21
- spec.required_ruby_version = '>= 3.0'
21
+ spec.required_ruby_version = ">= 3.0"
22
22
 
23
- spec.add_dependency 'rack', '~> 2.0'
24
- spec.add_dependency 'hanami-utils', '~> 2.0.alpha'
25
- 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"
26
26
 
27
- spec.add_development_dependency 'bundler', '>= 1.6', '< 3'
28
- spec.add_development_dependency 'rack-test', '~> 1.0'
29
- spec.add_development_dependency 'rake', '~> 13'
30
- 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"
31
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