# Revision history for MVC::Neaf

0.2901  Wed Aug 02 2023    - [bug] Fix path-dependent tests on windows

0.29    Fri Jul 28 2023
    - Calculate template & static content paths relative to the calling file,
    -   not current directory.
    - Allow to put get/post/... handler after, not before other options.

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.