-
Notifications
You must be signed in to change notification settings - Fork 14
/
Changes
494 lines (397 loc) · 25 KB
/
Changes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
Revision history for Kelp
{{$NEXT}}
2.19 - 2024-10-10
[New Interface]
- Added middleware_obj attribute to Kelp
- Added NEXT_APP method to Kelp
- Added psgi_middleware attribute to Kelp::Routes::Pattern
[Changes]
- Middleware building is now done using Kelp::Middleware, making it easier to customize
- Kelp now uses a dynamic PSGI execution chain, allowing adding PSGI middlewares at route level
- Fixed trailing slash bridges not applying for deeper paths (broken in 2.18)
2.18 - 2024-10-08
[New Interface]
- Added after_unrendered hook to Kelp
- Added order attribute and compare method to Kelp::Routes::Pattern
[Changes]
- Fixed bridge without trailing slash being used for longer routes on the same level
* bridge /admin will now work for /admin and /admin/x, but not for /admins
- Hooks are now run conditionally on controller objects and fall back to main app object
- Module should now report errors with more useful locations
2.17 - 2024-07-06
[Changes]
- Fixed psgi routes not working with custom controllers
- Documentation improvements
2.16 - 2024-07-05
[New Interface]
- Added context_obj attribute to Kelp
- Added build_context method to Kelp
- Added build_controller method to Kelp::Context
[New Documentation]
- Kelp::Context package is now documented
- Kelp::Manual::Controllers has a new section: 'Use different method than reblessing'
[Changes]
- Fixed incorrect before_finalize class if last handler to execute did not belong to a controller
[Deprecations]
- Clarify that new_anon will not be removed, but rather use different implementation method in the future
2.15 - 2024-07-03
[Changes]
- Kelp's req and res attributes were moved to Context and are now just facade methods
- Added persistent_controllers config, which makes the system keep the reblessed instances
[Deprecations]
- new_anon method of Kelp is now deprecated due to incompatibilities with controllers
2.14 - 2024-07-02
[Changes]
- Fixed config files having incorrect line endings on Windows due to raw slurp
- Fixed generation templates not handling UTF8 correctly
[Tweaks]
- Minimum version of Test::Deep was bumped to avoid Test::Deep::NoTest issue in tests
2.13 - 2024-07-01
[New Interface]
- Kelp::Base can now be imported with -attr
- Added content_type_is method to Kelp::Request
- Added a couple of is_* methods to Kelp::Request to match Kelp::Response's interface
* is_text, is_html and is_xml have been added
- Added merge to Kelp::Util, which implements the merge algorithm used by config
[Changes]
- Kelp::Base no longer imports namespace::autoclean with -strict
- Fixed camelizing of controller names if they don't contain a hash sign
- Fixed config loading Test::Builder through Test::Deep - now uses Test::Deep::NoTest
2.12 - 2024-06-26
[Changes]
- Kelp::Exception->throw now also works on objects (rethrows an exception)
- Fixed installed config method not returning the default value
- Fixed Kelp::Test being sensitive to utf8 configuration of the JSON encoder
- Config module now allows overriding of the config merging routine
2.11 - 2024-06-25
[New Interface]
- Added a second optional argument to set_content_type in Response, which sets charset
[Changes]
- Fixed incorrect reading of filehandles passed to template
- Fixed load_package from Kelp::Util failing if package is loaded and not in a file matching its name
- It is now easier to customize Kelp::Response render behavior
- Added a cookbook example of extending request and response to automatically handle YAML
2.10 - 2024-06-24
[New Interface]
- PSGI-compatible applications can now be mounted directly by using 'psgi' route flag
- Added a bunch of new methods with suffix '_param' to Kelp::Request, which work like 'param' but fetch from specific place
- Added charset, charset_decode methods to Kelp::Request
- Added charset, charset_encode methods to Kelp::Response
- Added is_production, get_encoder methods and request_charset, encoder_modules, context attributes to Kelp
- Added Kelp::Module::Encoder, a base class for encoders (like JSON, to be used by the new get_encoder method)
- Added adapt_psgi, effective_charset, charset_encode, charset_decode, load_package functions to Kelp::Util
- Added a third, optional argument to camelize in Kelp::Util
[General]
- Fixed Route destination getting executed if a response was already rendered by a previous one
* Rendering a response in a bridge will work the same as if the bridge returned a false value
* If more than one normal routes were matched, they will be run until one of them renders or returns a defined value
* Delayed responses will no longer override a previously rendered normal response
* The destination will still be run if the render happened inside 'before_dispatch' hook
- Response 'render' method will now assume you passed a json-encoded string if content type is json and body is not a reference
* The json string will still get its charset encoded, so the encoder should be utf8-disabled
- Kelp now tracks its context via 'context' attribute
* App will now rememeber if it was reblessed and will only rebless once into given controller per request
* This fixes before_finalize not working when reimplemented inside a controller
* This also improves performance if a lot of bridges are defined as methods inside a controller
- Fixed Kelp attribute 'charset' being readonly (was documented as read/write)
- Fixed template bugs:
* templates named '0' are now getting properly rendered
* template is now correctly providing an 'app' object by default, with the correct rebless context
* template now correctly rewinds a filehandle after reading from it, allowing reuse
- Fixed ::Null modules containing testing behavior - now they really do nothing
- Repeatedly fetching parameters from json request with the param method is now much faster
- Kelp::Module::Logger now sorts keys in Data::Dumper output
- Kelp can now be debugged using KELP_DEBUG environmental variable
- Performance of accessors and request/response building was improved
- 'Kelp' script has been renamed to 'kelp-generator' and documented
- Documentation was vastly improved
[Encoding]
- Request data will now be properly decoded using either charset from Content-Type or request_charset
* Request body parameters and content are automatically decoded
* Path and query is automatically decoded, but always uses request_charset
* Headers, cookies and sessions are unaffected (session encoding must be configured at the middleware level)
* Explicitly setting request_charset to undef will disable all automatic decoding
* Please use methods with prefix 'raw_' from Kelp::Request to access undecoded request data if needed
* Not decoding input was a bug which needed to be fixed (the response was already being encoded correctly, so double encoding could happen)
- Calling json and xml from Kelp::Response now also sets the charset in Content-Type header
- Framework now internally uses a UTF8-disabled JSON encoder
* The extra encoder will be created with the same options as the normal one, but without utf8
* It will no longer react to runtime changes in config of the main encoder
* Application will now encode the JSON response manually using proper charset
- Methods with prefix 'raw_' were added to Kelp::Request, returning undecoded request data (see "Bug fixes" below)
[Configuration]
- Added log_format, date_format configuration values to Kelp::Module::Logger
- Added stdout configuration value to Kelp::Module::Logger::Simple
- Added default_modes attribute and an optional argument for 'get' which will be the default value returned to Module::Config
- Kelp::Module::Config method 'get' never croaks if the config value was not set at all
- Application can be now configured to do no encoding of responses by setting 'charset' to undef
- Application now has a second charset configuration used for requests: request_charset
- Fixed Kelp::Module::Config::Less using the same reference for middleware and modules
[Testing]
- Kelp::Test no longer uses HTTP::Cookies, implements a much slimmer cookie jar with the same interface
* The new cookie jar only stores key/value pairs without any special data for cookies like domains, paths or expiration dates
- Kelp::Test now has a new import flag: '-utf8'
* Importing with this flag will automatically set Test::More to encode wide characters on output
- Added charset attribute to Kelp::Test
- Added full_content_type_is and content_bytes_are methods to Kelp::Test
[Deprecations]
- Scalar context behavior of the param method called without arguments on json request is now deprecated
* This is done in effort to make param method easier to use and harder to misuse
[Backward-Incompatible Changes]
- Application now tries to decode request data - see [Encoding]
- Routes no longer allow regex unless the pattern is a Regexp object (qr//)
* This was a result of a bug - they were never documented to support regex and would not build correctly with it
* Any non-placeholder regex syntax is now correctly quoted and matched as text
* This fix helps to avoid bugs which may cause serious issues, like pattern '/index.html' matching '/index/html'
- Kelp::Exception no longer renders its body attribute, but instead logs it if it is present
* Throwing Kelp::Exception now produces error template or plaintext response with proper HTTP status string
* Log will happen at 'error' level, while regular errors are going to 'critical'
* Status 500 exceptions will behave the same as errors - print their body on non-production
* Rendering the body was dangerous as it could leak internal data if misused
- Application main handler now clears all headers when an error or exception is caught
* This fixes a class of bugs where content encoding of the error page was mismatching the rendered error
[Tweaks]
- 'kelp' template has been adjusted to match framework looks
- Added a homepage on GitHub
- Kelp now has a logo
- Kelp is now developed by the Kelp-framework organization on GitHub
2.00 - 2024-06-10
[New Features]
- Added a return value to 'add' method from Kelp::Routes,
* it can be used to call add again, adding a child and making the parent a bridge
- Added new placeholder to routes: >slurpy (a mix of optional + wildcard)
- Added before_dispatch hook in Kelp
- Added Kelp::Util, which contains some general utilities (previously as private code in Kelp::Routes)
- Added has_name and dest methods to Kelp::Routes::Pattern
- Kelp::Generator has a new filename shortcut: DOT (dotfiles support)
[Changes]
- Kelp::Routes module overhaul
* Handles reblessing the app into a controller class by itself, with rebless => 1
* Kelp::Routes::Controller is no longer required, but will be kept for backward compatibility
* Resolves all of its checks at application build time (not during the request dispatching)
* Does stricter validation of routing configuration
* Route building errors can now be turned into exceptions (rather than just being skipped), with fatal => 1
* Easier to subclass due to new overridable methods: format_to and load_destination
* More performant at runtime, especially for deeply nested trees with many bridges
- Removed safe_param configuration field, since param method is now safe by default
- Improved the quality of configuration generated by the 'kelp' template
[Backward-Incompatible Changes]
- Disable unsafe param calls (cgi_param may be used instead if necessary)
- Routes with invalid destinations will no longer be added and yield HTTP status 404 instead of 500
- Some specific extensions of Kelp::Routes may no longer work correctly due to stricter build-time route checks
[Bug fixes]
- Instances created with new_anon now have correct default 'base' for routes
- Fixed bridge behavior in some cases by removing duplicated slashes from non-regex pattern
- Fixed unnamed wildcard not being honored in non-regex patterns as documented
- Fixed ?placeholder possibly matching other routes, for example '/not/?here' matching '/nothing'
- Fixed *placeholder not honoring rules from checks while matching a pattern
- Optional capture groups in custom-regex routes no longer produce a warning when not matched
- Kelp::Generator now ignores empty lines in index files
[Examples]
- Added an example script for benchmarking router matching and dispatching speeds in ex/router_bench.pl
1.07 - 2024-06-02
[Changes]
- Kelp::Routes now uses a dedicated method to build a pattern object
1.06 - 2022-05-09
[Changes]
- Removed broken homepage link
1.05 - 2021-01-21
[New Features]
- Added HTTP exceptions through Kelp::Exception
[New Documentation]
- Added Kelp::Generator
[Changes]
- Kelp::Module::JSON now uses JSON::MaybeXS
- POD fixes and improvements
1.04 - 2021-01-18
[New Features]
- Added new_anon constructor, allowing for multiple instances of an app
- Added safe_param configuration - see Kelp::Request::param
- Added Kelp::Generator, allowing for pluggable generation templates and custom generation scripts
- Rewrote the CLI script using Kelp::Generator
- Added a welcome HTML page to generated application listing registered routes and config
[New Documentation]
- Cookbook: template layouts
- Cookbook: deploying
[Changes]
- List context Kelp::Request::param call with parameter now is deprecated without safe_param
- Kelp::Module::JSON will now prefer Cpanel::JSON::XS before other options
- Kelp script now requires --type=less for a Kelp::Less app, instead of --less
- All of Kelp file slurping is now done using Path::Tiny
- POD fixes and improvements
[Bug fixes]
- exception thrown during response JSON encoding with no explicit content_type will now show correct error cause
1.03 - 2021-01-11
[New Features]
- Kelp::Request now holds the name of a route
- Kelp script can now use tabs for indentation with --tabs flag
[New Documentation]
- Added Kelp::Manual - moved from old Kelp POD
- Added Kelp::Manual::Cookbook
[Changes]
- POD fixes
1.02 - 2018-01-08
[Bug fixes]
- clean namespace inside import, fix for Path::Tiny
1.01 - 2017-12-29
No changes. Stable version.
0.9091 - 2016-11-08
[Changes]
- Change bridge error respose. Bridges will return 403 Forbidden (Konstantin Yakunin)
- attr can be ether scalar, undef or CODEref but not HASHREF or ARRAYREF (Nikolay Mishin)
- POD (Nikolay Mishin)
0.9071 - 2015-08-10
[Bug Fixes]
- Bridges will correctly return 401 (instead of 500) when non existing location is accessed (Konstantin Yakunin)
- Undefined value warning fixed. (Ben Hengst)
- Correct handle errors on deployment and silence STDERR in Stack Trace tests (Konstantin Yakunin)
[New Features]
- New attributes request_obj and response_obj used to specify the name of the request and response classes. (Ben Hengst)
0.9051 - 2015-04-02
[Bug Fixes]
- Stringify 500 errors avoiding the JSON-ification of returned structures and blessed objects. (basiliscos)
- Increate the level of Test::Bulder in Kelp::Test, providing more relevant messages upon error. (basiliscos)
- POD typos corrected
[New Features]
- Add json_content method to Kelp::Test, allowing for the testing of the returned JSON structure.
- Abstract the initialization of the Config and Routes modules
- More POD and examples added (roy-tate, Christian Froemmel, Perlover)
0.9021 - 2014-12-14
[Bug Fixes]
- POD fixes
[New features]
- Session now accepts hashref, which also allows for the destruction
of the enitire session.
- Add "include" function to config files, making it possible to include
other file into the configuration.
0.9015 - 2014-08-08
[Bug Fixes]
- Fix a typo causing a fatal error in Routes::Controller
- Fix debug and error keywords in Kelp::Less
- Remove an explicit return undef, per Perl::Critic
[New Features and Improvements]
- Allow for route methods outside of base class
It is now possible to add a route that lives outside of the base class
by prefixing it with '+'. This works for both Perl and camelized
strings.
- Add config keyword to Kelp::Less
- Virtualize the logger instantiation
Add a _logger function in Module::Logger, which creates the logger
instance, making it easier to subclass the Logger module.
Add a Logger::Simple module, which dumps everything to STDERR
This module is convenient to use during development with Kelp::Less.
- Update bin/Kelp
* bin/Kelp --less <name> will now create a psgi file with the specified name
(previously it would always create app.psgi).
* Existing files will not be overwritten, unless --force specified.
- Simplify Less application boilerplate
Add a Config subclass with simplified configuration that will be used by
default by any Kelp::Less application. This configuration will not load
any modules or middleware, leaving it up to the user to manually load
any modules needed.
Additionally, bin/Kelp --less <name> will now only generate the psgi
application, and not any other folders, views, templates etc.
- Downgrade confess to croak and croak to die
Kelp::Response used confess and croak excessively. Both changed to die,
so that the user can control how much stack trace they want via the
'long_error' attribute or the KELP_LONG_ERROR env variable.
0.9012 - 2014-07-12
[New features]
- Add access to the application instance from the config files
- Kelp.pm methods 'requiest' and 'response' renamed to 'build_request' and 'build_response', in order
to minimize cofusion. NOTE: If your application is overriding any of those, make sure to rename them too.
- Replace explicit UTF-8 encoding with $app->charset
- Rename pattern attribute 'via' to 'method'. 'via' will still work as a shortcut to 'method', so
this will not break backwards compatibility.
[Fixes]
- POD fixes
[Other]
- Using Pod::Markdown::Github to generate README.md from Kelp.pm
0.9001 - 2014-05-30
[Bug Fixes:]
- Curly braces get stripped from pattern checks
- Remove HTTP_X headers from Kelp::Request (security hole)
[New features]
- Allow for extending Kelp::Routes and using custom routers (Maurice Aubrey)
- Create Kelp::Routes::Controller, which reblesses the web app into a controller class (Maurice Aubrey)
- Set env KELP_CONFIG_WARN to warn for missing config files
- Set rendered to true when redirecting (Julio Fraire)
- Add request_ok method to Kelp::Test
- Config module optionally registers _cfg method, to help manipulate the configuration.
- Add a cookie jar to Kelp::Test
0.4602 - 2014-03-31
Replace $json->property with $json->get_utf8 in order to maintain compatibility across different JSON implementations
0.4601 - 2014-03-27
If no placeholders in route, param array should be empty (Maurice Aubrey)
Move route cache to a CHI-like interface, in order to allow for custom cache modules
Don't double encode JSON repsonse (Ruslan Zakirov)
0.4570 - 2014-03-02
Allow attributes to set undef values
do not append default template extension if ext() is undef
Added POD
Added tests
0.4560 - 2013-11-19
Allow for fully qualified Kelp module names
Config merge sigils will now only work for ARRAY
POD and typo fixes
0.4550 - 2013-11-11
Flip nginx env vars.
Change param to accept no JSON content or non-hash JSON
Make Kelp::Test::request only load the PSGI app once
POD and comments typo fixes
0.4501 - 2013-08-14
Minor fixes
Add render_binary
Add missing header_like
POD changes
0.4011 - 2013-07-05
Removed modules_disable and middleware_disable, and added the ability to add and remove elements in an array by adding a '+' or '-' in front of the key name.
0.4001 - 2013-07-02
Added modules_disable and middleware_disable arrays in config
Added a REMOTE_USER fallback for nginx
Added loaded_modules attribute to Kelp
Fixed utf8 encoding for OSX
Added a session convenience method
PSGI creation remodeled to leverage the StackTrace middleware
Introduced render_error method in Kelp::Response, which will look for error templates (404, 500, etc)
0.3101 - 2013-06-13
Remove dependency of Template, replace it with Template::Tiny.
Reason being that Template does not pass its tests under Perl 5.18.
Use Kelp::Module::Template::Toolkit (available on CPAN) if your code
depends on Template.
0.3001 - 2013-05-25
Fix typo in test paths
Bridges accessed directly will now return 401 - Unathorized
Introduce "panic" and "finalize" methods
Add "long_error" attribute
Rename "before_render" to "before_finalize"
Change all _croak statements to return panic, improving the natural flow of the route logic
0.2191 - 2013-05-14
Add arguments to load_module
Fix tests and small issues
0.2190 - 2013-05-05
Add property for partial rendering
Address an issue with nginx and headers
Add more pod
0.2182 - 2013-05-02
Fix issue with content-type params
Set explicit utf8 encoding for module Template
Replace wizardly Perl code with Class::Inspector
0.2181 - 2013-04-20
Fix test failing under Perl 5.10
0.218 - 2013-04-19
Add auto load class when adding a route.
0.217 - 2013-04-17
Fix Github issue #1
Revamp the Template module to allow for more standard subclassing
Remove Config::Hash from test units
0.21 - 2013-04-16
Allow for using templates w/o extension.
Allow for subclassing the templates module.
Implement testing of a Less app, via the psgi attribute.
0.2 - 2013-04-13
Complete rewrite of the Config module, allow for subclassing of it.
Write more tests.
Write more POD.
0.1 - 2013-04-12
First upload to CPAN