v1.21
[catagits/Catalyst-Action-REST.git] / Changes
CommitLineData
3ba4e173 1Revision history for {{$dist->name}}
801ec379 2
3ba4e173 3{{$NEXT}}
eb3ab200 4
f789417d 51.21 2017-12-05 10:05:25-05:00 America/New_York
6
3b3fd402 71.20 2015-10-29 15:28:27-05:00 America/Chicago
8
2058bd04 9 - Documentation fixes.
10 - Don't clobber some response headers if they are already set.
11
19cd07ec 121.19 2015-02-06 09:40:02-06:00 America/Chicago
13
2f47e474 14 - Make LWP a test dep instead of a hard dep (Fixes GH#3, thanks Alexander
15 Hartmaier for the report!)
1edd63a7 16 - Hard dep on JSON::MaybeXS (Fixes RT#101854, thanks Emmanuel Seyman for the
17 report and Karen Etheridge for help tracking down the cause!)
18
78f164df 191.18 2015-01-20 12:20:46-06:00 America/Chicago
20 - Fix tests on travisci so that Catalyst proper can run on travisci
21 (Thanks André Walker!)
22
eb3ab200 231.17 2014-10-23 19:58:46-05:00 America/Chicago
27829ab7 24 - Make 3xx status codes skip serialization when there is no data to serialize
ffef3497 25 (Thanks Jesse Sheidlower!)
c3d115c8 26
271.16 2014-09-12 13:21:43-05:00 America/Chicago
27829ab7 28 - Switch from JSON to JSON::MaybeXS to get a better choice of JSON parsers.
3ba4e173 29
0aceaa9b 301.15 2014-05-07 09:02:44-05:00 CST6CDT
31
27829ab7 32 - Added new status_see_other method for returning a 303 redirect.
33 - Added new status_moved method for returning a 301 redirect. (Matthew Keller)
0aceaa9b 34
9b5736d5 351.14 2013-12-27 15:32:19 America/Chicago
36
27829ab7 37 - Stop prompting for features at install time
da6b5a45 38
3ba4e173 391.13 2013-11-08 09:40:00 EST
7566d72f 40
27829ab7 41 - Fix tests to skip if YAML::Syck is not installed (Arthur Axel fREW Schmidt)
801ec379 42
3ba4e173 431.12 2013-09-03 13:00:00 EST
47c3e6b3 44
45 WARNING BACK COMPAT BREAKAGE FOLLOWS
46
27829ab7 47 Removed The YAML and HTML parser from the distro. You
47c3e6b3 48 should install these if you actually use them. They are listed as
49 optional dependencies going forward.
50
51 This is possibly a breaking change, but necessary for security and
52 considered acceptable since those formats have not generally
53 become preferred for web services.
54
55 In addition, the default de/serialization mappings for HTML and YAML
56 have been removed. You can add that back by adding the following to
57 you Configuration for the subclass of Catalyst::Controller::REST -
58
59 package Foo::Controller::Bar;
60
61 use Moose;
62 use namespace::autoclean;
63
64 BEGIN { extends 'Catalyst::Controller::REST' }
65 __PACKAGE__->config(
66 'map' => {
67 'text/html' => 'YAML::HTML',
68 'text/x-yaml' => 'YAML',
69 },
70 );
71
72 You should do this if you are using these de/serialization formats.
73
3ba4e173 741.11 2013-06-16 15:23:03 BST
75
27829ab7 76 - Fix infinite recursion in tests under Catalyst 5.90040
3ba4e173 77
781.10 2013-04-22 14:36:53 BST
79
27829ab7 80 - Use YAML rather than JSON in basic tests
e0323f6a 81
3ba4e173 821.09 2013-04-19 13:34:38 BST
81b9fff3 83
27829ab7 84 - Don't load Data::Serializer unnecessarily in tests
45d02f45 85
3ba4e173 861.08 2013-04-16 08:33:00 BST
1bb213fc 87
27829ab7 88 - Factor Data::Serializable into it's own dist to stop breakages.
1bb213fc 89
3ba4e173 90 If you use any of:
1bb213fc 91
3ba4e173 92 * Data::Dumper
93 * Data::Denter
94 * Data::Taxi
95 * Config::General
96 * PHP::Serialization
97
98 You'll need to install Catalyst-Action-Serialize-Data-Serializer and add the
99 appropriate lines to your controller config. Said lines may be:
1bb213fc 100
101 'text/x-data-dumper' => [ 'Data::Serializer', 'Data::Dumper' ],
102 'text/x-data-denter' => [ 'Data::Serializer', 'Data::Denter' ],
103 'text/x-data-taxi' => [ 'Data::Serializer', 'Data::Taxi' ],
104 'text/x-config-general' => [ 'Data::Serializer', 'Config::General' ],
105 'text/x-php-serialization' => [ 'Data::Serializer', 'PHP::Serialization' ],
106
3ba4e173 1071.07 2013-04-11 20:20:00 BST
108
27829ab7 109 - Don't serialize if a view is explicitly set.
3ba4e173 110
111 - If the controller sets the view in $c->stash->{current_view} or
112 $c->stash->{current_view_instance}, then it is explicitly requesting a
113 certain kind of serialization and C::A::Serialize shouldn't override
114 that.
115
27829ab7 116 - Remove Storable and FreezeThaw from the list
3ba4e173 117 of serialization methods offered by default, and
118 from the docs - they're totally unsafe :/
119
1201.06 2012-12-11 22:04:00 UTC
121
27829ab7 122 - Sort list of allowed methods. RT#81825
3ba4e173 123
1241.05 2012-07-02 20:13:00 BST
125
27829ab7 126 - Bugfix get_allowed_methods list:
3ba4e173 127 - include HEAD
128 - remove "not_implemented"
129
1301.04 2012-06-30 10:25:00 BST
131
27829ab7 132 - Bugfix to _dispatch_rest_method
3ba4e173 133
1341.03 2012-06-28 00:40:00 BST
135
27829ab7 136 - Expose _get_allowed_methods to the API (wreis)
3ba4e173 137
27829ab7 138 - Fix default OPTIONS handler: As the ->body is defined, then serialization
3ba4e173 139 won't happen and we don't get wrong responses. (wreis)
140
27829ab7 141 - Add default HEAD handler: auto dispatches to _GET method if it exists (wreis)
3ba4e173 142
1431.02 2012-06-05 22:23:00 BST
144
27829ab7 145 - Fix forwarded REST methods, e.g. foo_GET to be more
3ba4e173 146 correctly displayed as a forward in the stats info.
147
27829ab7 148 - Make public response building methods for errors
3ba4e173 149 _unsupported_media_type and _serialize_bad_request which
150 can be extended from an action-role to return custom
151 error response.
152
1531.01 2012-05-29 20:19:00 BST
154
27829ab7 155 - Add Catalyst::Action::Deserialize::JSON::XS
3ba4e173 156
27829ab7 157 - Fix JSON::XS useage to depend on JSON.pm v2.0, and rely on the
3ba4e173 158 fact that can be backed by XS code, by explicitly setting
159 $ENV{'PERL_JSON_BACKEND'} = 2
160
1611.00 2012-04-13 09:31:00 BST
162
27829ab7 163 - Repack without auto_include to stop Module::Install inlining
3ba4e173 164 Test::More without Test::Builder. RT#76524
165
1660.99 2012-02-28 09:09:00 UTC
167
27829ab7 168 - Repack with new Module::Install to stop depending on an unnecessary
3ba4e173 169 ExtUtils::MakeMaker version.
170
1710.98 2012-02-21 11:40:00 UTC
6e7da253 172
27829ab7 173 - More fixes as per last release.
6e7da253 174
3ba4e173 1750.97 2012-02-21 09:58:00 UTC
7b46eb07 176
27829ab7 177 - Fix test with latest Catalyst version which passes _log into
3ba4e173 178 requests.
04f96b73 179
3ba4e173 1800.96 2012-01-20 11:22:00 UTC
91bb5224 181
27829ab7 182 - Added fix for RT 63537 (from Gerv) and tests to check it.
6da8e448 183
3ba4e173 1840.95 2012-01-04 19:34:00 UTC
c8ca5f59 185
27829ab7 186 - Fix regex for JSONP parameter name to be able to include the . character
3ba4e173 187 in Catalyst::Action::Serialize::JSONP. RT#73741
c8ca5f59 188
27829ab7 189 - Add optional location parameter to status_accepted handler. RT#73691 (ghenry)
c8ca5f59 190
3ba4e173 1910.94 2011-12-09 08:35:00 UTC
3c4306f2 192
27829ab7 193 - Add 403 Forbidden and 302 Not Found status methods to
3ba4e173 194 Catalyst::Controller::REST (Caleb Cushing)
d1158d58 195
3ba4e173 1960.93 2011-10-12 11:37:00 America/Chicago
fcc4f3f2 197
27829ab7 198 - Add a "Callback" serializer/deserializer to allow for more customization in
3ba4e173 199 how the REST data is parsed/generated (bphillips)
fcc4f3f2 200
3ba4e173 2010.92 2011-10-01 11:04:00 BST
df5f9ffc 202
27829ab7 203 - Add a Catalyst::Action::DeserializeMultiPart, allowing one part of a multipart
3ba4e173 204 request to be deserialized as the REST data (allowing other parts to be used for
205 file uploads, for example) (bphillips)
3ed677b1 206
3ba4e173 2070.91 2011-08-04 14:37:21 Europe/Berlin
351f252f 208
27829ab7 209 - For the deserialization action class, make the HTTP methods it operates on
3ba4e173 210 configurable on a per-action level (plu, rafl).
1f22d6b3 211
3ba4e173 2120.90 2011-02-25 13:56:00 UTC
8aa1a2ee 213
27829ab7 214 - Remove test which is no longer applicable and fails in the latest Catalyst
3ba4e173 215 release.
f2d34339 216
3ba4e173 2170.89 2011-01-24 21:57:42 UTC
259c53c7 218
27829ab7 219 - All classes are now made immutable. (Dave Rolsky)
f51d80cd 220
27829ab7 221 - Added a Catalyst::Action::REST::ForBrowsers class. This will try to dispatch
3ba4e173 222 GET requests to a foo_GET_html method before trying foo_GET. (Dave Rolsky)
1c4b501b 223
3ba4e173 2240.88 2011-01-11 23:07:00 UTC
8894935c 225
27829ab7 226 - Fix documentation for overriding Serialize and Deserialize actions
3ba4e173 227 in Catalyst::Controller::REST.
04eaf278 228
27829ab7 229 - Avoid warning with empty response bodies and new Catalyst version
3ba4e173 230 (>= 5.80030)
48ff1e96 231
27829ab7 232 - Returning a body of '' is now possible - Catalyst::Action::Serialize
3ba4e173 233 acts like Catalyst::Action::RenderView (>= 0.16) by using the has_body
234 predicate in Catalyst::Response (>= 5.80030)
84b1ebe6 235
3ba4e173 2360.87 2010-11-03 19:46:00 UTC
d5acc73a 237
27829ab7 238 - Fix Request class role when used with new Moose and other request
3ba4e173 239 class roles.
355d4385 240
3ba4e173 2410.86 2010-09-01 23:14:00 BST
786c212f 242
27829ab7 243 - Add rest_serializer_json_options config key useable to set options
3ba4e173 244 like relaxed => 1 to be passed to the JSON serializer (Ton Voon)
786c212f 245
27829ab7 246 - Make Data::Dumper unserializer safer by using a Safe compartment (Ton Voon)
e527bba3 247
3ba4e173 2480.85 2010-05-13 10:09:19 Europe/Berlin
e527bba3 249
27829ab7 250 - Make Catalyst::Action::Serialize::View return directly rather than serializing
3ba4e173 251 a response for 3XX status codes. This stops back-compat breakage from the
252 previous change (in 0.84), whilst also allowing actual data serializers
253 to still handle 3XX.
ad46030d 254
27829ab7 255 - Fix docs in Catalyst::TraitFor::Request::REST::ForBrowsers. (RT#54983)
0fd45d2a 256
3ba4e173 2570.84 2010-05-06 09:27:56 BST
0fd45d2a 258
27829ab7 259 - Revert always using a trait rather than Catalyst::Request::REST to improve
3ba4e173 260 debug messages.
96eccfeb 261
27829ab7 262 - Add a status_multiple_choices helper method to the Controller base class.
96eccfeb 263
27829ab7 264 - Allow 3XX responses to be serialized.
3accd912 265
3ba4e173 2660.83 2010-02-08 22:17:12 UTC
5578f739 267
27829ab7 268 - Make it possible to deserialize a request with a DELETE method. This probably
3ba4e173 269 breaks 'strict' REST guidelines, but is useful for being able to delete multiple
270 resources from a single call by providing a batch delete method.
96a61a60 271
27829ab7 272 - Remove JSONP from the list of default serializers (RT#54336)
3ba4e173 273 Fix MANIFEST (RT#54408)
96a61a60 274
3ba4e173 2750.82 2010-02-04 22:31:57 UTC
8ff24288 276
27829ab7 277 - Integrated Catalyst::Request::REST::ForBrowsers as
3ba4e173 278 Catalyst::TraitFor::Request::ForBrowsers. (Dave Rolsky)
8ff24288 279
27829ab7 280 - Clarified docs so that they encourage the use of the request traits, rather
3ba4e173 281 than using Catalyst::Request::REST. (Dave Rolsky)
8ff24288 282
27829ab7 283 - When Catalyst::Action::REST or Controller::REST automatically add the trait,
3ba4e173 284 your request class will no longer end up getting set to
285 Catalyst::Request::REST. Instead, creates an anon class with the appropriate
286 role. (Dave Rolsky)
04675068 287
27829ab7 288 - Shut up log output from the tests. (Dave Rolsky)
04675068 289
27829ab7 290 - Added a $VERSION to every module, mostly to make sure that when people
3ba4e173 291 install Catalyst::Request::REST::ForBrowsers, they get the version in this
292 distro. (Dave Rolsky)
04675068 293
27829ab7 294 - Change Catalyst::Action::Serialize, Catalyst::Action::Deserialize and
3ba4e173 295 Catalyst::Action::SerializeBase to be more Moose like.
04675068 296
27829ab7 297 - Fix JSON and JSON::XS to encode_blessed. (fREW)
298 - Fix Catalyst::Action::Serialize to use objects instead of classes. (fREW)
299 - Fix doc nits. (RT#53780)
04675068 300
3ba4e173 3010.81 2010-01-14 20:56:00 UTC
890738ab 302
27829ab7 303 - Add a JSONP serialization type.
05009b91 304
3ba4e173 3050.80 2009-12-19 14:54:00 UTC
2b1751a1 306
27829ab7 307 - Convert all classes to Moose
2b1751a1 308
27829ab7 309 - Change Catalyst::Request::REST to be a mostly empty class, with
3ba4e173 310 all the functionality in Catalyst::TraitFor::Request::REST
26b59bcb 311
27829ab7 312 - Simplify _get_allowed_methods method (aristotle)
732d8f5f 313
27829ab7 314 - Rework serializer return so that serializers throw an exception in
3ba4e173 315 the case of issues serializing the data (hobbs).
4f7a48d1 316
3ba4e173 3170.79 2009-12-11 01:08:00 UTC
a400ef8b 318
27829ab7 319 - Cope with invalid (missing required q parameter) header like:
3ba4e173 320 application/json; charset="utf-8"
489ee3ed 321
27829ab7 322 - Fix documentation to not mention deprecated things and generally be
3ba4e173 323 in better style.
489ee3ed 324
27829ab7 325 - Make author information consistant and only in one module.
e1844cd9 326
3ba4e173 3270.78 2009-09-28 15:01:03 BST
a05bebdc 328
27829ab7 329 - Require Moose for the tests (RT#50066).
5ebf67a4 330
3ba4e173 3310.77 2009-08-27 02:21:09 BST
5bbe8fb2 332
27829ab7 333 - Allow dispatching to Catalyst Actions, for use with ActionClasses
3ba4e173 334 etc - fREW
d3f3a2ed 335
27829ab7 336 - Fix test if CATALYST_DEBUG environment variable is set
d3f3a2ed 337
3ba4e173 3380.76 2009-08-21 21:20:52 BST
f3394d8c 339
27829ab7 340 - Added two new status response helpers (202 no content and 410 gone),
3ba4e173 341 and tests - Franck Cuny
5ebf67a4 342
3ba4e173 3430.75 2009-08-17 14:07:41 BST
9eb6ca8b 344
27829ab7 345 - Fix optional test failures in catalyst-action-serialize-accept.t
346 - Added a serializer for JSON::XS
347 - Made test independent of YAML::Syck bugs (dandv)
4ee24376 348
3ba4e173 3490.74 2009-07-22 23:49:16 BST (t0m)
c42820ae 350
27829ab7 351 - Switch from NEXT to MRO::Compat (agladdish).
428ec4a2 352
27829ab7 353 - Add display of additional REST actions in the stats, and also fix a warning
3ba4e173 354 in Catalyst 5.80 when you forward to another action from inside an
355 action_FOO method (as it was confusing the stats).
428ec4a2 356
27829ab7 357 - POD fixes
358 - Catalyst::Action::REST no longer @ISA Catalyst or Catalyst::Controller.
359 - Change constructor to call next::method instead of SUPER::
360 - Change method used to find the application class to be more correct
f41ab757 361
3ba4e173 3620.73 2009-06-27 20:20:09 America/New_York (hdp)
546f2871 363
27829ab7 364 - Packaging fixes
546f2871 365
3ba4e173 3660.72 2009-06-25 14:52:29 America/New_York (hdp)
d1e10509 367
27829ab7 368 - Refresh Module::Install
db8bb647 369
3ba4e173 3700.71 2009-03-28 09:16:09 America/Los_Angeles (hdp)
665a446d 371
27829ab7 372 - Fix RT#44641, missing documented 'end' action
0566b5e4 373
3ba4e173 3740.70 2009-03-27 23:21:17 America/Los_Angeles (hdp)
0566b5e4 375
27829ab7 376 - Tests that use JSON were either not checking for the version or checking in a
377 - way that was a syntax error.
c4ab3598 378
3ba4e173 3790.69 2009-03-26 14:16:03 America/Los_Angeles (hdp)
cbb06078 380
27829ab7 381 - Fix RT#32342, deprecated config loses default map (hdp)
382 - Fix broken insertion of Catalyst::Request::REST for Action::REST (jshirley)
bb55dba1 383
3ba4e173 3840.68 2009-03-25 22:33:38 America/Los_Angeles (hdp)
8088a6f3 385
27829ab7 386 - Remove prompt for ancient and deprecated Data::Denter from Makefile.PL
387 - Remove Data::Dump, which was entirely unused
388 - Stop tests from dying with Catalyst 5.80
ef7fdb48 389
3ba4e173 3900.67 2009-03-25 21:59:59 America/Los_Angeles (hdp)
888f25e3 391
27829ab7 392 - (no changes from 0.67_01)
8b010556 393
3ba4e173 3940.67_01 2009-03-25 09:36:00 America/Los_Angeles (hdp)
7b8c5be2 395
27829ab7 396 - Fix RT#43840, improper app-level config handling
397 - Fix RT#42859, 'wrong' Catalyst dependency
398 - Fix RT#42025, stepping on custom request classes
3d38a43f 399
3ba4e173 4000.65 2008-08-20 10:42:00 America/Los_Angeles (jshirley)
b946af8e 401
27829ab7 402 - Fully revamped tests to work without any JSON support
403 - Final removal of JSON::Syck
404 - Special thanks to jgoulah for helping test this release
bc48916f 405
3ba4e173 4060.64 2008-08-13 08:55:00 America/Los_Angeles (jshirley)
2f7533ed 407
27829ab7 408 - New dist to fix issue with Module::Install
6023cdb2 409
3ba4e173 4100.63 2008-07-09 11:16:00 America/Los_Angeles (jshirley)
ebba5325 411
27829ab7 412 - Changing from JSON::Syck to JSON/JSON::XS
413 - Refactored tests to be more applicable to current state of affairs
df26b361 414
3ba4e173 4150.62 2008-07-02 07:53:00 America/Los_Angeles (jshirley)
832e768d 416
27829ab7 417 - Reshipping with current Module::Install included due to error reports
3ba4e173 418 about failed installs
d6fb033c 419
3ba4e173 4200.61 2008-06-30 12:28:00 America/Los_Angeles (jshirley)
9f16ba15 421
27829ab7 422 - Support official application/json and carp about text/x-json
d4611771 423
27829ab7 424 - Accepted patch from Luke Saunders for processing all accepted content types
bc343d3a 425
3ba4e173 4260.60 2008-01-03 17:23:58 America/Los_Angeles (adam)
427
27829ab7 428 - Updated my contact information.
3ba4e173 429
27829ab7 430 - Fixed RT#30498 - REST controller references Catalyst without
3ba4e173 431 loading it first.
432
27829ab7 433 - Fixed RT#32042 - Import of Params::Validate :all plays badly
3ba4e173 434 with subclasses that have their own validate()
435
27829ab7 436 - Fixed RT#30456 - Debug messages print even with debugging disabled
3ba4e173 437
27829ab7 438 - Fixed an issue where YAML::Syck versions 0.92 require $c->request->body to
3ba4e173 439 be stringified
440
27829ab7 441 - Updated the configuration specifiers to operate more in line with the way
7d5e38b4 442 Catalyst expects. Most notably component based configuration through
443 "Controller::RestClass" now works. "serialize" at the top level simply
444 is suggested defaults that all REST classes inherit.
bc343d3a 445
27829ab7 446 - Fixed 'default' serializer to set a valid Content-Type: header. Fixes
7d5e38b4 447 RT ticket 27949. Note that behavior has changed -- the default
448 serializer must now be specified as a content-type, not as a plugin
449 name. (dmo@roaringpenguin.com)
367b3ff4 450
3ba4e173 4510.41 2007-05-24 14:01:06 America/Los_Angeles (adam)
452
27829ab7 453 - Moved a bogus $self->class to $c->component($self->class)
3ba4e173 454
4550.40 2007-03-09 14:13:29 America/Los_Angeles (adam)
456
27829ab7 457 - Refactored the Content-Type negotiation to live in Catalyst::Request::REST. (drolsky)
458 - Added some useful debugging. (drolsky)
459 - Added a View serializer/deserializer, which simply calls the correct
460 - Catalyst view. ('text/html' => [ 'View', 'TT' ]) (claco, adam)
3ba4e173 461
4620.31 2006-12-06 00:45:02 America/Los_Angeles (adam)
463
27829ab7 464 - Fixed a bug where we would report a blank content-type negotiation.
465 - Added Data::Dump as a dependency.
3ba4e173 466
27829ab7 467 - Made the YAML::HTML view automatically append content-type=text/html on
3ba4e173 468 the resulting URLs.
469
4700.30 2006-12-03 12:24:16 America/Los_Angeles (adam)
471
27829ab7 472 - Updated the Makefile to support optional installation of the different
3ba4e173 473 Serialization formats.
474
27829ab7 475 - Renamed some of the test cases, since the execution order doesn't
3ba4e173 476 matter.
477
27829ab7 478 - Fixed things so that not having a Serialization module returns 415.
479 - Fixed things so that failure to Deserialize sends the proper status.
480 - Refactored the Plugin loading to Catalyst::Action::SerializeBase.
481 - Updated the Documentation.
3ba4e173 482
27829ab7 483 - Added a whole raft of serializers. (JSON, all the Data::Serializer
3ba4e173 484 supported ones, and XML::Simple)
485
27829ab7 486 - Added test cases.
3ba4e173 487
27829ab7 488 - Refactored the Catalyst::Action::REST dispatch, so that the default
3ba4e173 489 method is called before any _METHOD handlers. In addition, moved
490 the 405 Not Implemented handler to be foo_not_implemented, instead
491 of the default sub. (daisuke++ pointed out the inconsistency and
492 provided a patch, and I added the foo_not_implemented support)
493
27829ab7 494 - Added in automated OPTIONS handler, which constructs the allow
3ba4e173 495 header for you, just like the 405 handler. Can be overridden
496 with a normal _METHOD sub.
497
27829ab7 498 - Refactored Test::Rest, so that it uses closures to create the
3ba4e173 499 very similar $test->method() subs.
500
27829ab7 501 - Added tests for Catalyst::Action::REST.
3ba4e173 502
5030.2 2006-11-30 17:14:51 America/Los_Angeles (adam)
504
27829ab7 505 - Added documentation patch from Daisuke Maki (daisuke@endeworks.jp)
506 - Added dependency patch from Daisuke Maki (daisuke@endeworks.jp)
3ba4e173 507
5080.1 2006-11-19 16:24:20 America/Los_Angeles (adam)
509
27829ab7 510 - Added status_accepted (Code 202)
511 - Added a first pass at documentation.
512 - Added in Test Suite
513 - Created Catalyst::Action::Serialize and Catalyst::Action::Deserialize
514 - Added Data::Serializer actions
515 - Added status_created helper method
516 - Added more status_ helpers
3ba4e173 517
27829ab7 518 - Converted error helpers to return an object instead of plain-text. It's
3ba4e173 519 a more consistent model than a text/plain error message.
520
27829ab7 521 - Added logging to 4xx status handlers
bdc54939 522