Revision history for Web::MREST 0.01 2014-12-19 21:01 CET - basic module setup with code (mainly Resource.pm) taken from App::Dochazka::REST version 0.356 - MREST.pm: write POD 0.02 2014-12-22 09:52 CET - remove auto-generated build files that I committed accidentally - MREST.pm: work on POD - Resource.pm: get rid of is_authorized and associated routines 0.03 2014-12-22 16:03 CET - start development 0.04 2014-12-23 11:42 CET - rename from App::MREST to Web::MREST - get t/503-Service-Unavailable.t to work as desired 0.05 2014-12-23 16:50 CET - no longer dying in allowed_methods 0.06 2014-12-23 21:34 CET - Build.PL: add Module::Runtime dependency - MREST_Config.pm: add MREST_APPLICATION_MODULE - dispatch_MetaConfig.pm: document format of resource definitions; re-structure the resources to illustrate how individual resources can have subresources for a tree structure; add MREST_ROOT_RESOURCE - Resource.pm: fix bugs in resource initialization routines - t/405-Method-Not-Allowed.t: now that allowed_methods is doing something, add some tests 0.07 2014-12-29 15:39 CET - bin/mrest: now takes app distro as parameter - config/dispatch_MetaConfig.pm: minor fixes; add root resource definition - MREST.pm: work on POD, make init take a PARAMHASH so application can get its own meta and site parameters loaded - Resource.pm: remove Clone dependency; adapt to flat structure of resource definitions - t/405-Method-Not-Allowed.t: fix tests - t/method_not_allowed_override.t: demonstrate how a unit can define its own resources and generate HTTP requests against them 0.08 2014-12-30 15:30 CET - config/HTTP_Status_Message_en.conf: add HTTP status codes - MREST.pm: work on POD - Resource.pm: implement 'mrest_declare_error' method; use it in allowed_methods; change all instances of $self->response->body to $self->response->content; add error-handling code to 'finish_request' method; start declaring HTTP errors using the new method - Test.pm: in 'status_from_json' we call 'from_json' which might die - handle this situation more gracefully 0.09 2014-12-30 18:35 CET - implement malformed_request, is_authorized, forbidden - rename "mrest_declare_error" to "mrest_declare_status" so we can "declare" a successful status, too - try to figure out why CLI parser dies when we return a "declared" 500 status (something strange is afoot) 0.10 2014-12-31 09:54 CET - add dispatch-specific config files and module - bin/mrest: disable StackTrace middleware as it was making it difficult to return sensible 500 error entities - Resource.pm: turn warnings into errors; add 'mrest_resource_exists' method; "GET bugreport" works 0.11 2014-12-31 16:11 CET - bin/mrest: turn on Web::Machine tracing - HTTP_Status_Message_en.conf: add 501 - MREST_Config.pm: support OPTIONS method - get rid of bogus dispatch_Config.pm innards - MREST.pm: work on POD - Resource.pm: too much work to describe here 0.12 2014-12-31 23:24 CET - Resource.pm: expand 'status_declared' method; work on 'malformed_request' method; call handler in a try block - config/MREST_Config.pm: expand supported options - break tests - t/request_body_read.t: write what seem to be some sensible tests that pass - t/: address some of the brokenness 0.13 2015-01-02 14:33 CET - Util.pm: for pod_to_html - Dispatch/Docu.pm: handlers for docu resources - t/: new units t/resources/docu.t and t/4xx/415-Unsupported-Media-Type.t - get HTML responses to work - get docu resources to work - MREST.pm: POD checked up to B5 - Dispatch.pm: add 'noop' handler - Resource.pm: basic handling/checking of 'Content-Length' and 'Content-Type' headers 0.14 2015-01-02 15:19 CET - in valid_content_headers, actually check the headers against the valid set (taken from RFC2616) 0.15 2015-01-03 22:15 CET - handle and test 406 Not Acceptable - work on POD - take "content types provided" from configuration 0.16 2015-01-05 16:01 CET - dispatch_MetaConfig.pm, Dispatch.pm: add 'test/post_is_create/:bool' resource - MREST.pm: work on POD - Resource.pm: implement 'post_is_create' and 'create_path' methods - t/2xx/201.t: basic unit tests for 'post_is_create' 0.17 2015-01-06 08:28 CET - resource handlers are now method names - bin/mrest: take distro name and name of module to bless the application object into - dispatch_MetaConfig.pm: work on documentation; remove module name from handler property; generalize 'test' resource - MREST.pm: work on POD - Dispatch.pm: inherit from Web::MREST::Resource; work on 'echo' handler; generalize 'test' handler so it works for GET, POST, PUT and DELETE - Resource.pm: execute handler via method call instead of function call - Test.pm, t/: start adapting tests to current state 0.18 2015-01-06 13:44 CET - add 'forbidden' resource and test for 403 Forbidden - add site params to control "cache disablement" headers - call handlers 'handler_foo' to distinguish them from resource names - get rid of 'help' resource; rename 'not_implemented' to 'noop' 0.19 2015-01-07 16:38 CET - work on POD - change how resource handlers are called - start adapting the resource handlers (WIP) - debug Resources.pm (WIP) 0.20 2015-01-07 21:43 CET - Resource.pm: call resource targets twice (once to determine resource existence and a second time - as part of response generation - to get the status) - Dispatch.pm: adapt 'bugreport' and 'docu/..' resources to the latest change in how resource targets are called 0.21 2015-01-08 09:49 CET - add t/2xx/200-OK.t - Dispatch.pm, Resource.pm: fix post_is_create, create_path - Test.pm, t/: add low-level 'llreq' routine; make req use it 0.211 2015-01-10 08:28 CET - standardize terminology ("request entity" instead of "request body") - remove 'forbidden' resource definition and handler: they are not necessary to test 403 Forbidden response - add new modules that override 'forbidden' and 'is_authorized' methods and associated unit tests - work on POD - clarify how resource_exists is supposed to work and adapt 'handler_test' - Resource.pm: remove bogus forbidden handling code, clean up 'known_content_type', push content type onto context; add 'web_machine_metadata' accessor; work on process_post method 0.212 2015-01-12 09:01 CET - Resource.pm: add 'documentation' to hard-coded list of not-to-be-expanded properties - Test.pm: make 'llreq' handle headers argument properly, including assigning default headers if no arguments are provided - t/: adapt tests in 2xx, 4xx, and 5xx to current code state 0.213 2015-01-12 16:00 CET - config/: define resources in a site, rather than meta, config file - MANIFEST: fix omissions - Dispatch.pm: fix 'handler_echo' - t/method_not_allowed_override.t: broken unit - skip it for now 0.214 2015-01-12 19:37 CET - Resource.pm: split off init_router stuff into a separate module - Test.pm: make req really use llreq; fix a warning 0.215 2015-01-13 08:53 CET - Test.pm, t/: make initialize_unit take a PARAMHASH and prepare it to take a sitedir option 0.216 2015-01-13 10:05 CET - Resource.pm: split off "Web Services introduction" into a separate module - MREST.pm: work on POD 0.217 2015-01-13 12:03 CET - find and fix some lingering instances of 'request_body' (renamed to 'request_entity') - t/dispatch/docu.t: 'documentation_format' property renamed to 'format' - test suite running cleanly 0.218 2015-01-13 15:05 CET - InitRouter.pm: take list of non-expandable properties from a config param - MREST.pm: make 'init' take 'sitedir' property instead of inappropriately named 'path' - t/method_not_allowed_override.t: revive the unit 0.219 2015-01-14 06:20 CET - dispatch_Config.pm: add 'docu/text' resource - Dispatch.pm: resource handlers now called with ordinal number of pass - adapt and clean up; make 'handler_param_get' handle second pass properly; in 'handler_docu', return 400 if request entity missing, improve error explanations; adapt 'handler_echo' to current state - Util.pm: fix a glaring oversight 0.220 2015-01-14 16:43 CET - Build.PL, bin/mrest: use Plack::Middleware::LogErrors to redirect psgix.error to our logger object - Resource.pm: use the new 'get_acceptable_content_type_handler' method from https://github.com/stevan/webmachine-perl/pull/32 0.221 2015-01-15 09:14 CET - Dispatch.pm: have only one handler for all 'param/...' requests - Resource.pm: add accessor for declared status code; add methods for running request handler and response generator; make request handler call the response generator; properly handle empty requests in request handler; process_post just calls the _run_request_handler method; remove deprecated web_machine_metadata method 0.222 2015-01-15 16:14 CET - Resource.pm: clarify possible return values from request handler and response generator; rearrange various routines so the order in which they appear in the source file matches more closely the order in which requests propagate through the FSM 0.223 2015-01-16 08:09 CET - split off Entity.pm from Resource.pm - MREST.pm: work on POD - Resource.pm: provide a means to muffle debug-level log messages; start organizing methods according to which "part" of the FSM they belong to; move _make_json to Util.pm 0.224 2015-01-16 09:36 CET - Entity.pm: add boilerplate - Resource.pm: make 'context' initialize the context property, if needed, even when called as an accessor; do not decode_utf8 the path_info for now - Util.pm: use and export $JSON singleton; comment out 'make_json' routine as it might not be needed 0.225 2015-01-16 11:28 CET - dispatch_Config.pm, Dispatch.pm: allow DELETE method on 'param/...' resource - Entity.pm: implement get_acceptable_content_type_handler method for which patch is pending upstream; rationalize PUT/POST request processing - Resource.pm: streamline process_post 0.226 2015-01-16 14:26 CET - MREST_Config.pm: remove MREST_CONTENT_TYPES_PROVIDED - Entity.pm: rename _render_response_html -> mrest_generate_response_html; rename _render_response_json -> mrest_generate_response_json; add generic mrest_generate_response method 0.227 2015-01-16 14:35 CET - Resource.pm: include entity in responses to DELETE requests 0.228 2015-01-16 14:58 CET t/dispatch/param.t: add test cases for 'param/...' resource 0.229 2015-01-16 15:33 CET - Resource.pm: make declared status be an App::CELL::Status object from the very beginning - this simplifies finish_request - t/: adapt tests 0.230 2015-01-16 15:46 CET - Resource.pm: make mrest_declare_status optionally take a ready-made App::CELL::Status object 0.231 2015-01-16 16:02 CET - t/dispatch/noop.t: add test cases for 'noop' resource - dispatch_Config.pm: cleanup - Dispatch.pm: fix up the 'handler_noop' method 0.232 2015-01-16 22:00 CET - Dispatch.pm, t/dispatch/version.t: add handler and test cases for the 'version' resource - MREST.pm: add a 'version' method to provide access to $VERSION package variable 0.233 2015-01-18 16:19 CET - bring in CLI from App::Dochazka::CLI (0.076) 0.234 2015-01-18 23:09 CET - dispatch_Config.pm: fix 'param/..' resource definition; make root handler be 'handle_noop' - InitRouter.pm: work on POD; find some kind of weird race condition - needs a closer look 0.235 2015-01-20 07:22 CET - Build.PL: add Web::MREST::CLI::Parser module directory and move CLI configuration files to it - bin/mrest-cli: re-enable logging, add some print statements for better orientation, change prompt to Web::MREST::CLI::Parser - config_cli/: log to mrest-cli.log in home directory - CLI/UserAgent.pm: add some comments - InitRouter.pm: add debug log messages 0.236 2015-01-20 17:53 CET - Resource.pm, InitRouter.pm: get root resource to work - t/dispatch/root_resource.t: tests for the root resource 0.237 2015-01-26 15:51 CET - Test.pm: do not add content-length in llreq - MREST.pm: work on POD - bin/mrest-cli: load config parameters only once 0.238 2015-01-28 18:04 CET - Build.PL, config/: consolidate server and CLI configuration files - implement new 'configinfo' resource for displaying contents of CELL_META_SITEDIR_LIST 0.239 2015-01-29 09:57 CET - define root resource in (almost) the same way as all the other resources, - the name of the root resource is '/' - definitions of top-level resources must include parent => '/' 0.240 2015-01-29 14:42 CET - Dispatch.pm: bring in resource definitions from dispatch_Config.pm, and init_router function from InitRouter.pm - eliminate all references to $meta->RESOURCES - this data is now stored in the $resources package variable in InitRouter.pm - remove obsoleted dispatch_Config.pm (integrate documentation into MREST.pm) - t/: remove two units broken by this round of modifications 0.241 2015-01-29 17:43 CET - 503.pm: add file needed for test - Resource.pm: call init_router earlier 0.242 2015-01-30 07:50 CET - CLI/UserAgent.pm: handle exceptions more gracefully 0.243 2015-02-02 10:11 CET - bin/mrest: disable StackTrace by default since we are catching exceptions now - bin/mrest-cli: tweak how responses are displayed - InitRouter.pm: fix to handle case when a resource property is set to undef - Resource.pm: when Web::Machine catches an exception, trigger a 500 and provide a response entity with the text of the exception 0.244 2015-02-02 16:46 CET - report HTTP method in declared statuses - improve documentation of docu resource 0.245 2015-02-02 21:24 CET - Resource.pm: add explicit 'create_path_after_handler' method 0.246 2015-02-03 07:24 CET - Entity.pm: declare status when response generator is not OK - InitRouter.pm: tweak log messages 0.247 2015-02-04 17:55 CET - Resource.pm: be careful that create_path always returns a string 0.248 2015-02-11 10:18 CET - Resource.pm: add 'nullify_declared_status' method 0.249 2015-02-11 14:04 CET - Entity.pm: insert Location header only if resource does not exist - Test.pm: put Location header in return value (App::CELL::Status object) so we can test for it - t/dispatch/param.t: test for correct response code (201 or 200) and Location header in PUT requests that create/modify a resource; add more test cases 0.250 2015-02-12 07:32 CET - InitRouter.pm: make debug message more useful 0.251 2015-02-12 09:19 CET - CLI/UserAgent.pm: use URI::Escape to escape % characters - Resource.pm: make 'mrest_declare_status' take optional 'args' property so we can specify explanation as a message code 0.252 2015-02-16 21:45 CET - InitRouter.pm: expand list of non-expandable properties 0.253 2015-02-17 18:25 CET - MREST.pm: prep POD for release (WIP) - CLI/Parser.pm: enable root resource - MREST/Dispatch.pm: eliminate setting of 'resource_exists' in the response generator as I am not sure if this is useful (needs more investigation) 0.254 2015-02-18 07:06 CET - MREST.pm: mention 'curl' in SYNOPSIS - Entity.pm: handle possible \415 from get_acceptable_content_type_handler - Resource.pm: do not return scalar refs from 'process_post' 0.255 2015-02-18 07:25 CET - MREST.pm: work on POD; fix syntax error 0.256 2015-02-18 08:44 CET - implement normalize_filespec (in Util.pm) and use it to convert relative paths to absolute - eliminate all references to %ENV (for portability) 0.257 2015-02-18 16:46 CET - work on POD 0.258 2015-02-21 08:09 CET - CLI/UserAgent.pm: add 'http_code' property to return status object 0.259 2015-02-21 18:59 CET - Resource.pm: make 'known_content_type' tolerate undefined/empty content type 0.260 2015-04-06 13:42 CEST - Resource.pm: mrest_declare_status method could nominally take an App::CELL::Status object, but this functionality was not tested and, of course, didn't work properly -> fix 0.261 2015-04-06 14:59 CEST - Resource.pm: refactor 'mrest_declared_status_code' accessor, add 'mrest_declared_status_explanation' and 'declared_status' accessors - t/mrest_declared_status.t: add unit tests 0.262 2015-04-13 09:35 CEST - tweak dependencies in an attempt to fix 'Can't locate object method "create" via package "Plack::Test"' error in certain smoke tests 0.263 2015-04-13 10:06 CEST - stop generating massive README, replace it with link to metacpan.org 0.264 2015-07-04 19:03 CEST - bin/mrest: take local sitedir as a third argument 0.265 2015-07-04 19:59 CEST - bin/mrest: really load the local site configuration directory 0.266 2015-07-04 20:17 CEST - MREST.pm: make init() honor all parameters, instead of just one 0.267 2015-07-13 09:42 CEST - Test.pm: make initialize_unit() more verbose 0.268 2015-07-13 09:45 CEST - tweak release scripts 0.269 2015-07-16 11:45 CEST - bin/mrest-cli: fix version number 0.270 2015-07-16 11:48 CEST - Test.pm: make is_deeply check handle case when the value is undef? 0.271 2015-07-21 19:36 CEST - Update copyright statement to 2015 - set $VERSION in top-level module only - new release script 0.272 2015-07-22 14:42 CEST - Make MREST_CLI_URI_BASE a meta param - bin/mrest: take $VERSION from top-level module 0.273 2015-07-23 17:45 CEST - Build.PL: require recent versions of LWP::UserAgent and LWP::Protocol::https - No longer generate Makefile.PL - UserAgent.pm: enable SSL connections 0.274 2015-07-25 11:49 CEST - bin/mrest: use options instead of positional parameters - release scripting modifications - Build.PL: make LWP::Protocol::https a BuildRequires as well as a Requires 0.275 2015-07-26 21:21 CEST - Add missing "use Pod::Usage" to bin/mrest - Entity.pm: declare error statuses properly in mrest_generate_response_json() (fixes Github issue #6) - CLI/UserAgent.pm: in send_req(), be more careful when modifying the response - Build.PL: add Cwd and File::Basename to BuildRequires - bin/mrest-standalone: add wrapper for starting server in standalone mode - update documentation of standalone mode in MREST.pm 0.276 2015-07-27 - Include descriptive text with DISPATCH_VERSION and MREST_CLI_SERVER_ERROR message codes - Build.PL, MANIFEST.SKIP: release scripting modifications - Test.pm: change diag() to note() in initialize_unit() 0.277 2015-07-28 17:09 CEST - finish splitting off Web::MREST::CLI into a separate distro - bin/mrest: import normalize_filespec() from Web::MREST::CLI::UserAgent - Util.pm: drop normalize_filespec(); has been moved to Web::MREST::CLI - lib/Web/MREST/: drop entire CLI/ subtree (just two files, actually) - config/: drop all CLI-related files and keep server-related ones - Build.PL: require Web::MREST::CLI >= 0.276 0.278 2015-07-30 14:29 CEST - Early debugging feature - MREST.pm: do not call $CELL->load() with debug_mode param - bin/mrest: import normalize_filespec() from Web::MREST::CLI 0.279 2015-07-30 14:36 CEST - bin/mrest: fix a silly typo 0.280 2015-08-05 15:35 CEST - MREST.pm->init(): be more careful about early debugging filespec provided by user 0.281 2015-07-11 12:07 CET - config/: rename messages that might clash with application - global: do not convert warnings into errors - tests: use Test::Warnings to check for unexpected warnings - update release and prerelease scripts 0.282 2016-01-02 01:17 CET - bin/mrest: call app's init() function if it exists 0.283 2016-08-24 10:08 CET - Display application module in HTML header, not Web::MREST - add POD caveat: request entity not available until 2nd handler pass - release.sh: automate attachment of version number to OBS commit 0.284 2016-07-31 20:07 CET - Dispatch.pm: fix POD on _first_pass_always_exists - bin/mrest: drop deprecated comments - bin/mrest: document how to pass arguments to Plack::Runner 0.285 2016-09-05 09:02 CEST - bin/mrest: comment out a useless message - Travis CI - Merge README files into single README.rst - Add helper files for release automation scripting 0.286 2016-09-24 14:35 CEST - Drop deprecated local release scripts - cleanup: drop unused _get_sharedir() argument in bin/mrest - cleanup: fix copyright header in bin/mrest - Add get_session() function to Util.pm 0.287 2017-02-25 09:38 CET - Refrain from munging Plack::Session object - script: store sessions in a dedicated directory in /tmp 0.288 2017-10-16 22:17 CEST - build/ops: require latest App::CELL - Report MREST_DEBUG_MODE setting at startup 0.289 2022-06-29 14:46 CEST - cleanup: tweak whitespace in copyright notices - bootstrap: add (hopefully self-explanatory) bootstrap scripts - doc: Web/MREST.pm: fix error in POD - lib: update copyright year range in source files - doc: MREST.pm: point readers to CLI documentation 0.290 2022-06-29 14:49 CEST - MANIFEST.SKIP: do not include bootstrap scripts in Perl distro