The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Revision history for MVC-Neaf

0.28    Mon Oct 21 2019
        - TST Increase test coverage + some refactoring

0.2701  Thu May 30 2019
        - BUG Fix regex type check on perls <= 5.010

0.27    Thu May 30 2019
        - API call load_resources(\*DATA) upon run() automatically
        - API Add body_json(), body_raw(), body_text(), and content_type() calls to request
        - API custom error handlers (neaf 404) can be configure per-path
        - API BREAK Replace a JSON default error page with a HTML one
        - API Add magic(bool) switch
        - API Add regexp check for headers

0.2603  Sat Nov 24 2018
        - BUG Fix Apache2 test warning

0.2602  Sat Nov 24 2018
        - BUG Fix (?) failing test

0.2601  Fri Jun 22 2018
        - BUG Skip empty parameters in strict mode

0.26    Sun Jun 10 2018
        - API BREAK rework load_resources, @@ foo.tpl view=TT now supported
        - TST Improve coverage, add tests, refactor things

0.2501  Sun Jun 3 2018
        - API BREAK Restrict characters for path, in particular ":" (a warning only)
        - BUG Understand double slashes in URLs
        - BUG Fix routing bug - was treating /pathogen as /path

0.25    Sat Jun 2 2018
        - API Add 'strict' flag that makes controller emit error 422 if params/cookies pass validation
        - API Add overridable log_message, make_id to Request class
        - API BREAK Remove deprecated error_template, set_default, server_stat
        - API BREAK Remove Request->upload (use utf8/raw), Request->set_full_path (use set_path)
        - REF Use base64url instead of base64 everywhere
        - NET BREAK Deprecate Apache2 backend in favor of Plack::Handler::Apache2
        - MOD BREAK Remove ServerStat

0.24    Sat May 26 2018
        - API Add 'helper' subs - user-defined, path-restricted $req methods 
        - API BREAK Rename -serial => -payload in app response
        - API set_path_defaults can be restricetd on path + method
        - REF Rename MVC::Neaf::Route::{Recursive=>Main}
        - REF Util::Container - path&method based container util
        - REF Add Route::PreRoute stub class for hooks & helpers

0.23    Wed May 23 2018
        - API Add Route class, add $req->route() call for showing current route
        - API add prefix(), postfix(), and splat() for URI path components
        - API Make :sugar keyword optional, export get+post & neaf by default 
        - API BREAK deprecate MVC::Neaf->something() (expect new() of course)
        - API BREAK Kill deprecated neaf->pre_route for good
        - API Add -headers support to exception
        - REF A giant refactoring of the core
        - BUG A lot of bugs introduced & then fixed

0.2203  Thu Jan 25 2018
        - AUX Add github links to Makefile.PL

0.2202  Fri Jan 19 2018
        - TST Fix tests under Plack < 1.043 https://rt.cpan.org/Ticket/Display.html?id=124124

0.2201  Thu Jan 18 2018
        - DOC Fix escaping in docs

0.22    Thu Jan 18 2018
        - DOC Rearrange core doc sections
        - DOC Deprecate X::Stat module, say replacement pending
        - API BREAK Deprecate server_stat method
        - API BREAK Reprecate req->header_in_keys
        - BUG Work around HTTP::XSHeaders not providing flatten* methods
        - TST Add a performance statistics example
        - TST Fix(?) tests on older perls

0.21    Thu Dec 7 2017
        - API Add any, put, patch, and del for DELETE to sugar
        - API route(): Add 'public', 'tentative', 'override' flags
        - MOD static '/path' => [ "content" ] to serve in-memory files
        - TPL Add View::TT->preload for in-memory templates
        - API Experimental load_resources for Mojo-like @@ files in __DATA__
        - TPL Minor fixes in View::JS, add want_pretty and want_sorted options
        - DEV Add callback(\%, path, method) to get_routes
        - REF unify die 404 with MVC::Neaf::Exception
        - REF Use HTTP::Headers::Fast everywhere
        - BUG Tighten dependencies, add more workarounds for failing deps
        - BUG Fix error reporting in diamond upload test
        - TST Improve test suite somewhat

0.2002  Fri Dec 1 2017
        - BUG Fixed escapes in POD

0.2001  Fri Dec 1 2017
        - Version bump NOCODE

0.20    Fri Dec 1 2017
        - API Add 'neaf form => name => {...}' for kosher input validation
        - MOD Add X::Form::Wildcard module to handle unforeknown request params
        - API Add public log_error() method to Request, use it for all errors
        - API BREAK Split upload() into upload_utf8() and upload_raw()
        - API BREAK Remove req->set,get_default for good
        - REF Replace JSON dependency with JSON::MaybeXS
        - REF Replace concatenation with md5 in req->id generator (todo SHA3)
        - DOC Improve Neaf documentation NOCODE
        - BUG Multiple bugs fixed, new ones added

0.1901  Tue Nov 28 2017
        - BUG Fix local $SIG{__WARN__} in BEGIN section

0.19    Fri Nov 24 2017
        - CLI Add --listen option to CLI interface
        - API Add exp. path_info_split method to fetch regex capture groups
        - API BREAK default error = json + logged err_id
        - API BREAK Deprecate foo => bar => baz => sub {}-style paths in route()
        - API BREAK Remove CGI driver for good, remove CGI.pm dependency
        - BUG Add hack to prevent tests from failing on older perls

0.18    Mon Nov 20 2017
        - TST Rework examples to use the new declarative get+post syntax
        - API BREAK Use -view=>JS by default; switch to TT & issue warning if -template seen
        - API Add experimental predefined param_regex to route
        - TPL Add non-hash response support to JS view via -serial return key
        - DEV Add req->endpoint_origin method for file:line where current handler was defined
        - API BREAK Deprecate set_full_path() for good
        - DEV run_test(): add support for body, hash cookies, https
        - CLI More details in --list output
        - REF A BIG refactoring of core, handle_request() broken down
        - BUG Lots of bug fixes

0.17    Fri Apr 28 2017
        - API Add postmodern sugar: get + post '/path' => sub { ... }.
        - API Add put(), head() prototyped sugar.
        - API Add -headers => [...] to handler return hash
        - API BREAK Kill get_form_as_hash, undeprecate get_form_as_list for now
        - API BREAK Finally removed path_info w/o path_info_regex
        - API Add get_url_base, get_url_rel, and get_url_full with override capabilities
        - API Added session engine auto-load to sugar api
        - API Add deprecated warning for Req->set_default
        - MOD Add directory listing to static aka X::Files
        - MOD Add fine-grained serve_file method to X::Files (thx @akuklev)
        - DOC Add hook flow diagram NOCODE

0.16    Mon Mar 27 2017
        - API Add implicit HEAD handler whenever GET is defined
        - API MINOR Add dash-prefixed defaults to route()
        - MOD Add cookie-based session backend (X::Session::Cookie)
        - MOD Add SQL-based session backend (X::Session::SQL)
        - MOD Add session backend DIY class (X::Session::Base)
        - BUG Make Neaf::CLI work with given Neaf object and not global one
        - DEV Add some crude options to run_test()

0.15    Wed Mar 22 2017
        - API BREAK Kill session deprecated warning
        - BUG Allow utf8 path-info
        - MOD Add form->as_url, form->sign to form data object
        - BUG Fix binmode in static file serving
        - API add pre_route, pre_render hook phases, add hook prepend, fixup docs

0.14    Sun Dec 18 2016
        - API add_hook() method, hooks: pre_logic, pre_content, pre_reply, pre_cleanup
        - API set_path_defaults( '/path' => { foo => ... } )
        - API Add Request->stash(), Request->reply() for hook intercommunication
        - API Add experimental prototyped sugar: get /foo, post /bar, neaf error 404 ...;

0.1302  Thu Dec  1 2016
        - BUG Fix locale-dependent dates, create MVC::Neaf::Util class

0.13    Thu Dec  1 2016
        - API BREAK Add path_info_regex => qr/.../ parameter to route() & path_info()
        - API BREAK static() no .dotfiles by default, add allow_dots => 1 to overcome
        - NET Add Expires: header controlled by cache_ttl in static() and route()
        - NET Append Allow: header to a 405 error as per HTTP/1.1 spec

0.1201  Sun Nov 13 2016
        - BUG Fixed File::Session fail under Windows OS

0.12    Fri Nov 11 2016
        BROKE API! Incompatibilities were gently introduced with a nice
        DEPRECATED warning to account for early design mistakes.
        The warnings will NOT become errors until at least 0.15
        API BREAK Remove pre_route callback return check
        API BREAK Change session engine return format
        API BREAK path_info now requires validation regexp, just like param() and get_cookie()
        API BREAK Remove implicit default empty value in Request->param
        API BREAK Add set_error_handler (CODEREF || HASH), deprecate error_template(HASH)
        NET Add Request->body() for raw request data
        API Add multi_param() feature
        API Remove GET params from POST request, add url_param() for fetching them
        MOD Add file-based session engine
        MOD ServerStat can be subclassed with a do_write method instead of on_write callback
        MOD Make JSON view faster and more tolerant
        BUG Fix foo|bar regexps defeating RE quoting

0.1101  Fri Oct 28 2016
        TST Fix tests
        BUG Fix Request->session vs view_as behaviour

0.11    Sun Oct 23 2016
        API Deprecated old form() substitutes
        API Allow different handlers per (method, path) combo; default allowed methods = [GET, POST, HEAD]
        DOC Update readme & checklist, write style guide
        DOC Improve CORE docs, add example snippets there

0.10    Tue Oct 18 2016
        API Add cache_ttl to cache static files, move static to X::Files
        DEV Make MVC::Neaf call cli-debug if CGI detected w/nonempty @ARGV
        API add is_post shorthand for method() eq POST
        BUG Fix X::Session sloppy pack() and double base64

0.09    Sat Oct 01 2016
        MOD Add form validator with resubmission, redo LIVR support completely
        DEV Add CLI debugging module
        API Add delete_cookie to Request, add more stuff to dump()
        API Move neaf_err $@; function into core
        API Add set_header, push_header and remove_header to Request
        TST Reach 100% coverage on Neaf.pm & Request.pm
        BUG Replace md5 with sha1+sha224 in session generation
        BUG Bugs fixed, even more added
        DOC Better documentation on the main module

0.08    Mon Sep 26 2016
        BUG Bugfix in session, content type detection, and static files
        BUG Fix content type autodetection, enforce utf8 more rigorously
        NET Add Content-Disposition header to static mode
        API Allow passing session to view 'as is' if needed
        REF Rewrite session mechanism in a more reasonable way

0.07    Thu Sep 22 2016
        API Add X::Session for session storage, add Req->session
        API Add Validation::LIVR-based form validation
        API Add MVC::Neaf->static( uri => localdir ) for serving static content
        API Add MVC::Neaf->alias( newpath, oldpath ) for creating, well, aliases
        DEV Add Request->dump() for debugging
        DEV Add MVC::Neaf->get_routes() for introspection, fixup docs for route()
        TPL TT view now passes its args to Template engine
        TST Make ALL examples run together under CGI, PSGI, or mod_perl
        REF Use HTTP::Headers throughout the code instead of homegrown hash
        REF Rename -callback => -jsonp, callback(in view) => on_render
        BUG Bugs fixed, even more added

0.06    Tue Sep 6 2016
        API Add async content serving via -continue, write(), close()
        API Add per-route view defaults, add MVC::Neaf::View
        API Add fancy foo=>bar=>baz paths in MVC::Neaf->route
        API Add MVC::Neaf::Exception signalling, add neaf_err
        TST Increase cover -t to 70%, add autotest to load ALL modules
        BUG Bugs fixed, even more added

0.05    Sun Sep 4 2016
        API Add method => [GET, POST] restrictions to MVC::Neaf->route
        API Add fancy error templates via MVC::Neaf->error_template
        DEV Add custom error handler via MVC::Neaf->on_error
        DEV Add MVC::Neaf->server_stat and MVC::Neaf::X::ServerStat plugin
        API Add req->postpone(CODEREF) method to delay execution
        API Add a ton of getters to Request.
        TST Add examples: http request breakdown and a tiny 200-line wiki
        BUG Bugs fixed, even more introduced
        Semireal PSGI app actually released to the net, using Neaf now

0.04    Fri Sep 2 2016
        NET HEAD request handled, Content-Length served
        API Add multiparameter form validation EXPERIMENTAL
        API Add global and per-request set_default() methods
        DEV Add MVC::Neaf::View::Dumper - just dump raw reply from controller
        BUG Bugs fixed, even more introduced
        Semireal psgi app migrated from ad-hoc framework

0.03    Thu Sep 01 2016
        API Add Apache2/mod_perl2 support
        DOC Update MVC::Neaf documentation
        API Cookie now requires regexp validation
        API Add MVC::Neaf->pre_route( CODE ) for mangling initial request
        API add request->set_param( name : value )
        API Everything in utf-8 now by default
        BUG Bugs fixed, even more introduced

0.02    Wed Aug 31 2016
        API Now -content can be used to return raw content, e.g. images
        API Add uploads
        TST Add apache2 tempdir auxiliary script to test under apache
        API Add cookies, add redirects, add referer
        API Add View::JS with jsonp support
        API Add View::TT with basic Template support

0.01    Somewhere in the August
        First version, released on an unsuspecting world.