App-Dochazka-REST

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

- Model/Employee.pm: fix bug "get 500 Server Error when I send a request for
  bogus resource 'privhistory/eid/asdf'"
- t/dispatch/privhistory/: add quite a few tests

0.212  2014-10-25 23:23 CEST
- update MANIFEST to current state
- change 'privhistory' to 'priv'
- add new 'priv/current/?:ts' resource
- t/: start adapting tests

0.213  2014-10-26 22:36 CET
- config/dispatch/priv_Config.pm: add "priv/current/eid/:eid/?:ts" and
  "priv/current/nick/:nick/?:ts" resources; unclear how privhistory records
  will be added and deleted
- dispatch_Message_en.conf: remove duplicate message
- Dispatch/Privhistory.pm: repurpose _current_priv so it works for the new
  resources added in this commit; rename _eid and _nick to _history_eid and
  _history_nick, respectively

0.214  2014-10-27 13:12 CET
- config/dispatch/top_Config.pm: add 'cli' property to all top-level
  resource definitions; put into alphabetical order; rename 'privhistory'
  to 'priv'
- Dispatch.pm: make 'docu' resource return "resource => ''" when called
  without an argument, instead of "resource => undef"; make
  "not_implemented" resource include HTTP method in payload

0.215  2014-10-27 13:39 CET
- config/dispatch/employee_Config.pm, config/dispatch/priv_Config.pm: add
  'cli' properties to all resource definitions
- ../development-checklist: complete manual CLI testing of all top-level
  and employee resources

0.216  2014-10-27 14:29 CET
- config/dispatch/priv_Config.pm: fix 'priv/eid/:eid/?:ts' and
  'priv/nick/:nick/?:ts' resource definitions
- config/dispatch_Message_en.conf: add DISPATCH_EMPLOYEE_CURRENT_PRIV_AT_TIMESTAMP
- Dispatch/Privhistory.pm: fix bugs in _current_priv
- Model/Shared.pm: fix bugs in priv_by_eid and _st_by_eid

0.217  2014-10-27 17:53 CET
- config/dispatch/priv_Config.pm: eliminate duplicate 'priv' resource
  definition that was giving me grief; fix two wrong ACL profiles;
  eliminate 'priv/history/?:tsrange' and replace it with
  'priv/history/current/?:tsrange'; add 'priv/history/phid/:phid' resource
- config/dispatch/top_Config.pm: tweak resource documentation
- dispatch_Message_en.conf: tweak priv-related messages
- Dispatch/Privhistory.pm: tweak priv-related messages, add
  'priv/history/phid/:phid' resource target
- t/: add new tests; adapt existing tests to current state

0.218  2014-10-27 20:31 CET
- config/dispatch_Message_en.conf: tweak bad/missing parameter message
- Dispatch/Employee.pm: handle non-integer EID values more gracefully
- Test.pm: add descriptions to docu_check tests
- t/dispatch/employee/eid.t: add descriptions to tests; add some new "negative"
  test cases

0.219  2014-10-27 22:33 CET
- t/: clean up units; merge all employee tests into a single unit (employee.t);
  merge all priv tests into a single unit (priv.t)
- config/dispatch/priv_Config.pm: alphabetical order tweak
- Test.pm: export all the test functions (EXPORT instead of EXPORT_OK); bring
  in create_testing_employee and delete_testing_employee
- STATUS: all top-level, employee, and priv resources implemented and tested,
  ready to start work on activity, interval, etc. resources

0.220  2014-10-28 09:35 CET
- MANIFEST: add Dispatch/Activity.pm
- config/dispatch/activity_Config.pm: add 'activity/all' resource definition
- config/dispatch/top_Config.pm: add 'activity' resource definition; rename
  '_not_implemented' target to 'not_implemented' because we are now exporting
  it from Dispatch/Shared.pm
- config/dispatch_Config.pm: uncomment DISPATCH_RESOURCES_ACTIVITY
- Dispatch.pm: import not_implemented target from Dispatch/Shared.pm
- Dispatch/Employee.pm: fix debug messages
- Dispatch/Privhistory.pm: import priv_by_eid from the right module
- Dispatch/Shared.pm: export 'not_implemented' routine
- Resource.pm: add 'use App::Dochazka::REST::Dispatch::Activity' so activity
  targets will work

0.221  2014-10-28 12:08 CET
- MANIFEST: add t/dispatch/activity.t 
- config/sql/: add 'SQL_ACTIVITY_SELECT_ALL'; add 'disabled'
  field to 'activities' table; adapt SQL statements where appropriate
- t/dispatch/activity.t: new unit for activity dispatch tests

0.222  2014-10-28 21:51 CET
- config/dispatch/activity_Config.pm: activate 'activity/all' resource for GET
  requests
- config/sql/activity_Config.pm: divide 'activity/all' SELECT into two variants
  (with and without disabled activities)
- Dispatch/Activity.pm: implement _get_all_without_disabled and
  _get_all_including_disabled dispatch targets
- Model/Activity.pm: eliminate superfluous 'use' lines; implement
  'get_all_activities' routine
- t/dispatch/activity.t: add tests for GET activity/all

0.223  2014-10-28 22:37 CET
- REST_MetaConfig.pm: add META_DOCHAZKA_RESOURCE_ACLS
- config/dispatch/top_Config.pm: bring comments up-to-date
- Dispatch.pm: modify "_help_post" ('docu' dispatch target) to display ACL
  profile of queried resource as well as its documentation
- Resource.pm: modify path initializer to populate META_DOCHAZKA_RESOURCE_ACLS

0.224  2014-10-29 08:07 CET
- activity_Config.pm: add 'activity/all/disabled' resource definition
- Dispatch/Activity.pm: comment out 'get_all' target
- t/dispatch/activity.t: add basic tests for 'activity/all/disabled'; add FIXME
  lines for future tests

0.225  2014-10-29 09:33 CET
- dispatch/activity_Config.pm: add 'activity/aid/:aid' resource definition
- t/dispatch/activity.t: add initial tests for 'activity/aid/:aid'

0.226  2014-10-29 10:34 CET
- Build.PL: require 0.172 of App::Dochazka (for 'disabled' field)
- config/sql/activity_Config.pm: make SELECTs return disabled field
- t/dispatch/activity.t: add some tests for 'activity/aid/:aid' resource (GET)
- Dispatch/Activity.pm: implement 'activity/aid/:aid' resource for GET requests

0.227  2014-10-29 13:54 CET
- Dispatch/{Employee,Activity}.pm: fix bug where PUT request with request body
  consisting of just a number or just a string (e.g. '9', or '"asdf"') was
  causing the server to vomit 500
- activity_Config.pm: support PUT and DELETE requests for 'activity/aid/:aid';
  add resource definition for 'activity/code/:code'
- dispatch_Message_en.conf: add DISPATCH_CODE_DOES_NOT_EXIST
- Dispatch/Activity.pm: support PUT and DELETE requests for 'activity/aid/:aid';
  add support for 'activity/code/:code'
- Model/Activity.pm: fix 'update' routine to support the new 'disabled' field
- Model/Shared.pm: make a note in 'cud' routine that order of attrs must match
  the '?' characters in the SQL statement
- Test.pm: add 'create_testing_activity' and 'delete_testing_activity'
- t/dispatch/activity.t: add a bunch of tests

0.228  2014-10-29 16:43 CET
- Dispatch/Activity.pm: trying to get _insert_activity to deal gracefully with
  bogus JSON
- t/: add DELETE tests for 'activity/aid/:aid'; add tests for
  'activity/code/:code'; tweak tests

0.229  2014-10-30 13:07 CET
- Build.PL: require App::Dochazka 0.174 for new 'filter' routine
- config/sql/dbinit_Config.pm: add check constraints for 'nick' (employees) and
  'code' (activities) fields because folks might try to insert an activity code
  like '!!!' or commit other similar bogusness
- Dispatch/Shared.pm: add new 'pre_update_comparison' routine for validating
  updates
- Dispatch/Activity.pm: refactor _update_activity and _insert_activity so they
  filter out bogus properties
- Dispatch/Employee.pm: refactor _update_employee and _insert_employee so they
  filter out bogus properties
- t/: adapt tests to current state; add some tests that attempt to
  insert/update bogus properties

0.230  2014-10-30 18:21 CET
- activity_Config.pm: add resource definitions for 'activity/aid' and 'activity/code'
- t/dispatch/activity.t: add DELETE tests for 'activity/code/:code'

0.231  2014-10-30 19:37 CET
- Dispatch/Employee.pm: handle an edge case ($eid might be undefined due to
  bogus user input)
- t/dispatch/employee.t: label some tests; add tests for some edge cases
- t/dispatch/activity.t: add tests for some edge cases

0.232  2014-10-30 22:07 CET
- activity_Config.pm: activate 'activity/code' dispatch target
- Dispatch/Activity.pm: adapt '_code' dispatch target to handle POST
- t/dispatch/activity.t: add tests

0.233  2014-10-31 13:30 CET
- realize that there are resources where the GET method needs ACL profile of,
  e.g., "active" but the remaining methods (PUT, POST, DELETE) need to be
  available only to administrators
- Resource.pm: modify 'forbidden' method to handle resources with ACL profiles
  defined for each HTTP method separately
- config/dispatch/activity_Config.pm: define per-method ACL profiles where needed
- Model/Privhistory.pm: improve documentation of 'get_privhistory' routine
- Test.pm: add 'req_active', 'req_json_active', 'create_active_employee', and
  'delete_active_employee' routines
- t/dispatch/activity.t: adapt tests to use the new routines in Test.pm and to
  test the per-method ACL profile definitions

0.234  2014-10-31 16:48 CET
- config/dispatch/: convert 'documentation' property of resource definitions
  from HTML to POD
- t/dispatch/activity.t: provide some tests for 'activity/aid' and
  'activity/code' resources

0.235  2014-10-31 17:29 CET
- Dispatch.pm: do not chomp off linebreaks when processing resource
  documentation string

0.236  2014-10-31 21:29 CET
- Build.PL: require Pod::Simple::HTML (needed by 'docu/html' target)
- config/dispatch/: activate 'activity/aid' resource for POST; add '=pod' 
  line at top of documentation string on each resource; rename 'docu' target
  from '_help_post' to '_docu'; add 'docu/html' resource definition; convert
  some remaining documentation from HTML to POD
- Dispatch.pm: add a '_docu_html' target
- Dispatch/Activity.pm: adapt '_aid' target for POST
- Test.pm: expand 'docu_check' routine to cover 'docu/html' resource as well as
  straight 'docu'
- Util.pm: add a 'pod_to_html' conversion routine
- t/dispatch/activity.t: fill in remaining tests necessary to meet minimal
  workflow expectations
- t/dispatch/top.t: add battery of 'docu/html' tests, mostly plagiarized from
  'docu'

0.237  2014-11-01 14:11 CET
- rename Dispatch/Privhistory.pm to Dispatch/Priv.pm to match 'priv' resource

0.238  2014-11-03 10:30 CET
- add many schedule-related resources to development-checklist
- in new schedule_Config.pm file with schedule resource definitions
  copied from priv_Config.pm, edit resource descriptions and documentation
  strings 
- in Model/Privhistory.pm, move 'get_privhistory' routine to Model/Shared.pm
  and generalize into 'get_history'; make 'get_privhistory' and
  'get_schedhistory' in Model/{Privhistory, Schedhistory}.pm be wrappers for this
  new shared routine
- t/: adapt to current state

0.239  2014-11-03 12:15 CET
- renamed all 'priv/current/...' and 'schedule/current/...' resources
  to 'priv/self/...' and 'schedule/self/...', respectively
- Dispatch/Priv.pm: renamed _get_current to _get_history_self; move
  _current_priv logic to Dispatch/Shared.pm->current because we will call it
  from Dispatch/Schedule.pm as well;
- Dispatch/Schedule.pm: ongoing adaptations
- t/: adapt to current state

0.240  2014-11-03 16:19 CET
- MANIFEST: add Dispatch/Schedule.pm, t/dispatch/schedule.t
- activity_Config.pm: add 'activity/help' resource definition
- priv_Config.pm, etc.: rename some resources and targets
  (in particular s/current/self/ in resource names)
- dispatch_Config.pm, Resource.pm: activate schedule resources
- dispatch_Message_en.pm: add new DISPATCH_EMPLOYEE_SCHEDULE and
  DISPATCH_EMPLOYEE_SCHEDULE_AS_AT messages
- config/sql/schedule_Config.pm: add new SQL_SCHEDHISTORY_SELECT_RANGE_BY_EID
  and SQL_SCHEDHISTORY_SELECT_RANGE_BY_NICK params
- Dispatch/Shared.pm: adapt 'current' routine to work for both priv and
  schedule resources
- Model/Shared.pm: fix some bugs
- Resource.pm: activate schedule resources
- t/dispatch/activity.t: add tests for 'activity/help'
- t/dispatch/schedule.t: add tests for "/schedule/eid/:eid/?:ts",
  "/schedule/help", "/schedule/nick/:nick/?:ts", and "/schedule/self/?:ts"
  resources

0.241  2014-11-03 22:32 CET
- Dispatch/Shared.pm: "numify" $eid in return value payload from dispatch
  target 'current'; check for hashref instead of scalar now that we are
  converting the schedule from JSON string into Perl hashref
- Model/Schedule.pm: rename 'get_json' to 'get_schedule_json' and add
  'decode_schedule_json' for converting the schedule JSON string into a Perl
  hashref
- Model/Shared.pm: return decoded schedule (hashref) from schedule_by_eid
- t/dispatch/schedule.t: uncomment/adapt some tests
- t/: get model units to run cleanly again

0.242  2014-11-04 08:30 CET
- config/dispatch/schedule_Config.pm: put resource definitions in alphabetical order;
  add missing POD; add missing 'schedule/intervals' resource definition

0.243  2014-11-04 09:56 CET
- schedule_Config.pm, Dispatch/Schedule.pm: make 'schedule/history/...'
  resources use "not_implemented" dispatch target so they don't vomit 500

0.244  2014-11-04 11:32 CET
- schedule_Config.pm: split 'schedule/intervals/?:shid' into two separate
  resources for parsing clarity

0.245  2014-11-04 17:50 CET
- Build.PL: require App::Dochazka 0.175 for 'ssid' (instead of 'scratch_sid')
- schedule_Config.pm: 'schedule/intervals' is POST and DELETE only; activate
  DELETE on 'schedule/intervals/:sid'; rename ':shid' parameter to ':sid'
- rename 'scratch_sid' field/property of intervals to 'ssid'
- dispatch_Message_en.conf: add DISPATCH_SCHEDINTVLS_MISSING,
  DISPATCH_SCHEDULE_INSERT_OK, DISPATCH_SCHEDULE_NO_UPDATE
- Dispatch/Schedule.pm: add _intervals_post and _intervals_delete dispatch
  targets
- move 'expurgate' logic to Model/Shared.pm and implement a wrapper method
  in each model module
- Model/Schedintvls.pm: fix 'insert' method so it returns a sensible status
  payload
- Test.pm: in docu_check, run 'payload' tests only if there is a payload;
  add as-yet untested 'create_testing_schedule' and 'delete_testing_schedule'
  routines
- t/: add new 'intervals.t' unit; adapt existing units to current state

0.246  2014-11-04 21:08 CET
- stabilization after the last commit
- t/dispatch/intervals.t: add some tests called for by development workflow

0.247  2014-11-04 22:21 CET
- add 'DISPATCH_SCHEDULE_EXISTS' message
- add 'schedule/all' and 'schedule/all/disabled' resource definitions
- add 'disabled' field to 'schedules' table
- Dispatch/Schedule.pm: when schedule already exists, return
  'DISPATCH_SCHEDULE_OK'
- t/dispatch/intervals.t: test for 'DISPATCH_SCHEDULE_OK' when inserting the
  same schedule a second time

0.248  2014-11-05 11:05 CET
- Build.PL: require App::Dochazka 0.176 to ensure Schedule objects have a
  'disabled' property
- config/dispatch/schedule_Config.pm: activate 'schedule/all' and 
  'schedule/all/disabled' resources
- config/sql/schedule_Config.pm: add 'disabled' field to SQL statements;
  add two new SQL statements to get all schedule records
- Dispatch/Schedule.pm: import 'get_all_schedules' and
  'get_all_schedules_including_disabled' routines
- Model/Schedule.pm: implement 'get_all_schedules' and
  'get_all_schedules_including_disabled' routines

0.249  2014-11-05 12:18 CET
- give 'schedule/all/...' dispatch targets more sensible names
- enable POST on 'schedule/intervals/:sid', including documentation
- t/dispatch/schedule.t: add 405 tests for 'schedule/all/...'

0.250  2014-11-05 17:54 CET
- Build.PL: require App::Dochazka 0.177 for TO_JSON method; require
  App::CELL 0.201 to get rid of Data::Structure::Util
- Resource.pm: get rid of wacky debug code; add 'convert_blessed' to our
  JSON 'encode' method call now that we have TO_JSON methods in all models;
  this obviates the need to call 'unblessed'
- Data::Structure::Util does not work with perl 5.20, so it needs to go;
  remove all mentions of it; fix resulting brokenness 
- Util.pm: get rid of jury-rigged 'deep_copy' routine (use Storable::dclone
  instead!)

0.251  2014-11-06 09:42 CET
- Dispatch/Schedule.pm->_intervals_delete was reporting success even when
  nothing was actually deleted - fixed
- Model/Schedule.pm->schedule_all was crashing when no records found (because
  $counter was not initialized) - fixed
- t/104-employee.t: deprecate expurgate in favor of TO_JSON
- t/dispatch/intervals.t: when no schedule records are in the database,
  'schedule/all/...' will return 404 - fixed
- t/dispatch/schedule.t: add basic tests for 'schedule/all' and
  'schedule/all/disabled'

0.252  2014-11-06 16:43 CET
- Build.PL: require App::Dochazka 0.181 for new boilerplate code
- schedule_Config.pm: rename '/schedule/intervals/:sid' to 
  '/schedule/sid/:sid'
- dbinit_Config.pm: add a trigger to make immutable/unupdatable the 'schedule'
  field of the 'shedules' table 
- add a 'SQL_SCHEDULE_UPDATE' statement to support updates on the
  'schedules' table
- replace calls to 'expurgate' method with 'TO_JSON'
- Dispatch/Schedule.pm: implement _intervals_get and _schedule_post dispatch
  targets and '_update_schedule' routine adapted from Employee.pm
- Model/Shedule.pm: override the boilerplate 'compare' method for this
  model because the 'disabled' field needs special handling; implement
  an 'update' method
- Resource.pm: fix a debug message
- t/107-schedule.t: add test case for 'update' method
- t/dispatch/intervals.t: add GET test case for '/schedule/sid/:sid' resource

0.253  2014-11-07 14:33 CET
- Test.pm: make a new 'req' routine that to replace the current rag-tag
  collection of kludgey routines for generating HTTP requests against the
  Plack::Test object
- t/dispatch/intervals.t: add 'POST schedule/sid/:sid' test cases; migrate the
  entire unit to the new 'req' routine 
- t/: move model tests into their own subdirectory and comment out 'skip_all'
  so they run
- Model/: remove 'expurgate' method from all model modules (replaced by TO_JSON);
  remove 'compare' method overlay (replaced by compare_disabled)
- t/model/activity.t: adapt tests, remove deprecated tests, add new tests

0.254  2014-11-07 16:19 CET
- t/dispatch/activity.t: migrate to new 'req' function

0.255  2014-11-07 22:12 CET
- t/dispatch/employee.t: strenuously migrate to the new 'req' routine

0.256  2014-11-08 20:30 CET
- t/dispatch/priv.t: migrate another unit to 'req'

0.257  2014-11-08 21:35 CET
- t/dispatch/schedule.t: migrate unit to 'req'

0.258  2014-11-09 09:10 CET
- t/dispatch/top.t: migrate unit to 'req'
- Test.pm: deprecate and eliminate kludgey testing routines (replaced by 'req')

0.259  2014-11-10 08:54 CET
- Model/Shared.pm: finally get up the courage to return 'NOTICE' status level
  instead of 'OK' when SELECT statements return no records - this makes
  "nothing found" easy to distinguish from "something found", while keeping "ERR"
  reserved for DBI errors; add 'make_test_exists' to generate 'nick_exists',
  'eid_exists', etc. etc. (to be used in all model modules)
- Dispatch/Activity.pm: adapt to above change
- Model/Employee.pm: revamp nick_exists and eid_exists (generalize these routines
  and generate them at runtime for code re-use)
- Resource.pm: adapt to above change
- t/dispatch/activity.t: cleanup
- t/model/employee.t: cleanup
- not testing cleanly

0.260  2014-11-10 11:29 CET
- Dispatch/: cleanup
- Dispatch/Priv.pm: break out common code from _history_eid and _history_nick
  into a separate '_history_end_game' routine
- Model/: cleanup
- Model/Shared.pm: fix make_test_exists; make get_history include both
  EID and nick in the payload
- t/: adapt tests to current state
- tests running cleanly again

0.261  2014-11-10 12:14 CET
- Model/: add 'aid_exists', 'code_exists', 'iid_exists', etc. runtime-generated
  boilerplate functions to all models where they make sense
- Model/Employee.pm: cleanup
- Model/{Schedule,Shared}.pm: eliminate circular dependency and clean up aftermath
- t/model/: add test cases for new boilerplate

0.262  2014-11-10 14:02 CET
- release/: new docgen.plx to auto-generate POD documentation on all resources;
  adapt release.sh to use the new docgen.plx script
- docs/Resources.pm: auto-generated POD documentation 
- config/docgen_Config.pm: special params for use in docgen.plx 
- config/dispatch/: clean up some of the docs
- config/dispatch_Config.pm: add POD to DISPATCH_RESOURCE_LISTS
- Resource.pm: adapt 'init_router' routine to new DISPATCH_RESOURCE_LISTS
  format

0.263  2014-11-10 14:40 CET
- REST.pm: eliminate obsolete POD; add new POD about
  App::Dochazka::REST::Docs::Resources
- config/dispatch/: add some asterisks
- config/docgen_Config.pm: add DOCHAZKA_DOCGEN_EPITAPH to make
  Docs/Resources.pm a valid module
- ../release/docgen.plx: process the epitaph

0.264  2014-11-10 17:13 CET
- ../release/docgen.plx, config/docgen_Config.pm: POD module generated by
  docgen.plx not rendering correctly on metacpan.org - tweak; add DESCRIPTION
  section
- Model/Schedule.pm: fix broken schedule_all routine (it wasn't using the right
  SQL statement)
- t/dispatch/schedules.t: add proper minimal test cases for 'schedule/all' and
  'schedule/all/disabled'

0.265  2014-11-11 17:45 CET
- config/dispatch/schedule_Config.pm: rewrite documentation of
  'schedule/intervals' resource
- Dispatch/Schedule.pm: cleanup
- major refactor of history-related dispatch targets and supporting
  code for code sharing between Privhistory and Schedhistory
- lots of regressions; not testing cleanly yet
- config/dispatch/schedule_Config.pm: activate history resources,
  etc.
- experimenting with metacpan POD rendering glitch

0.266  2014-11-11 10:10 CET
- docgen.plx: flesh out auto-generated resource documentation by adding
  permitted methods and CLI command
- more trial-and-error on metacpan POD rendering issue (change all heredocs
  so the end flags are unique)
- Model/Shared.pm: implement new 'load_multiple' routine to eliminate some
  creeping code duplication
- Model/Activity.pm: make get_all_activities use 'load_multiple'
- Model/Schedule.pm: replace 'schedule_all' and 'schedule_all_disabled' with 
  a single 'get_all_schedules' routine based on 'load_multiple'
- Dispatch/Schedule.pm: adapt to the new routines
- t/: adapt to current state; add test cases for get_all_activities

0.267  2014-11-11 22:51 CET
- complete refactor of shared history-related dispatch targets
- integrate intervals.t into schedule.t
- split history.t off from priv.t
- remove history-related tests from schedule.t
- (now ready to add schedhistory tests to history.t)

0.268  2014-11-12 09:13 CET
- t/dispatch/history.t: adapt to test both 'priv/history' and
  'schedule/history' resources
- ../release/docgen.plx: add ACL profile to each resource; tweak display of
  HTTP methods
- t/dispatch/history.t: clean up comments, variable and function names

0.269  2014-11-12 11:15 CET
- ../release/release.sh not incrementing version number of Docs/Resources.pm -
  attempt to fix

0.270  2014-11-12 11:39 CET
- ../release/docgen.plx: tweak POD formatting

0.271  2014-11-12 11:43 CET
- cleanup distro infrastructure

0.272  2014-11-12 13:38 CET
- Dispatch/Employee.pm, t/dispatch/employee.t: add current schedule to payload
  of 'employee/current/priv' resource
- Docs/Workflow.pm: new POD module describing workflow scenarios from an
  end-user perspective
- dispatch_Message_en.conf: add DISPATCH_EMPLOYEE_CURRENT_PRIV
- Test.pm: add 'create_inactive_employee'; rename 'delete_active_employee' to
  'delete_employee_by_nick' (complete re-write)
- t/dispatch/activity.t: add some tests for 'activity/help'; prepare for this
  resource to handle resources where 'acl_profile' is a HASHREF
- ../release/docgen.plx: tweak POD formatting some more

0.273  2014-11-12 16:49 CET
- Dispatch/Shared.pm: make 'make_default' handle resources that use
  fine-grained acl_profile definition
- t/dispatch/activity.t: test above handler

0.274  2014-11-13 10:43 CET
- config/dispatch/: allow 'inactive' to view own priv/schedule history
- Dispatch/Shared.pm: refactor 'current' routine to use a dispatch table
- Docs/Workflow.pm: add verbiage
- Test.pm: create_{active,inactive}_employee return $eid
- t/: start fixing regressions

0.275  2014-11-13 15:01 CET
- fix regression: "GET schedule/eid/:eid vomits 500 or returns nonsense"
- Dispatch/Shared.pm: the regression was caused by not saving the return
  value from the call to {priv,schedule}_by_eid in the 'current' routine
- t/dispatch/schedule.t: add test case for this regression 

0.276  2014-11-13 15:37 CET
- t/dispatch/schedule.t: add more positive tests focused on 'current' dispatch
  target

0.277  2014-11-13 16:30 CET
- Dispatch/Schedule.pm: cleanup
- t/dispatch/schedule.t: add negative tests for 'schedule/eid/:eid/?:ts'

0.278  2014-11-13 22:32 CET
- t/dispatch/schedule.t: add more negative tests
- ../development-checklist, Docs/Workflow.pm: start blocking in interval
  and lock resources; add verbiage
- config/dispatch/: make 'employee/self' be a synonym for 'employee/current'
  and enable POST requests on these resources so employees can, e.g., change
  their own password; update documentation of history resources
- REST_Config.pm: add 'DOCHAZKA_PROFILE_EDITABLE_FIELDS' for POST requests
  on 'employee/self' 
- t/dispatch/employee.t: run all 'employee/current' tests on 'employee/self'
  as well; realize that if a resource returns 405 it will do so regardless
  of which user we authenticate as (even non-existent user)

0.279  2014-11-14 10:39 CET
- Dispatch/Employee.pm: add _post_current (dispatch target for POST
  'employee/{current, self}'
- t/dispatch/employee.t: ACL checks are not working for resources with
  fine-grained ACL profile definition: add a test case for this

0.280  2014-11-14 11:29 CET
- employee_Config.pm: fix 'employee/self' acl_profile property
- Dispatch/Employee.pm: request body needs to be a hashref - check for that
  where we really care about it - in _put_post_delete_employee_by_eid
- Dispatch/Shared.pm: pre_update_comparison was causing DOCHAZKA_BAD_INPUT to
  be returned if no fields would actually change on update, but this might be
  confusing - change it to allow updates in such cases
- t/dispatch/employee.t: add test cases for POST employee/{current,self} by
  inactive and active employees; adapt tests to current state

0.281  2014-11-14 16:42 CET
- finish implementation (including test cases) of POST dispatch
  target for 'employee/{current,self}' resource

0.282  2014-11-14 21:36 CET
- dbinit_Config.pm: add trigger clause to make 'sid' field immutable
- Docs/Workflow.pm: add verbiage
- t/model/schedule.t: add test case verifying that 'update' method does not
  change the database even if the 'sid' field is changed

0.283  2014-11-18 07:45 CET
- REST_Message_en.conf: add finer-grained notice messages for 'cud'
- Model/Shared.pm: in cud, check return value of '$sth->execute' and
  return finer-grained notices to distinguish various edge cases
- t/: adapt to current state

0.284  2014-11-18 11:01 CET
- unit tests: move existing '002-root' and '003-current-priv' units to 
  new t/sql directory; add new 't/sql/immutable_id.t' unit to test 
  new triggers to make 'eid', 'iid', etc. fields immutable
- config/sql/dbinit_Config.pm: add "immutability" triggers for 'employees.eid',
  'schedhistory.shid' and 'privhistory.phid'

0.285  2014-11-18 11:53 CET
- dbinit_Config.pm, t/sql/immutable_id.t: finish making '*id' fields immutable

0.286  2014-11-18 12:49 CET
- dispatch_Config.pm, interval_Config.pm: add basic set of 'intervals'
  resources

0.287  2014-11-18 15:33 CET
- config/dispatch/HTTP_Message_en.conf: make a separate message file for codes
  that map directly to an HTTP error code
- config/, lib/: transform DOCHAZKA_BAD_INPUT and DOCHAZKA_INSUFFICENT_PRIV into 
  special status codes that map directly to HTTP error codes
- Resource.pm: when target returns certain status codes (see package variable
  %status_http_map), translate them directly into HTTP error codes
- t/: adapt to current state

0.288  2014-11-19 10:05 CET
- Dispatch/Lock.pm: lay groundwork for locks
- t/dispatch/interval.t: new tests 
- interval_Config.pm, dispatch_Message_en.conf: minor fixes
- Dispatch/Interval.pm: add special ACL handling
- Model/Interval.pm: fix bug (wrong order of properties in call to 'cud')
- Test.pm: let 'req' handle any user as long as "passhash" property is
  set the same as "nick"

0.289  2014-11-19 11:08 CET
- interval_Config.pm: make not-implemented resources use 'not_implemented'
  dispatch target
- t/dispatch/interval.pm: add some missing boilerplate tests

0.290  2014-11-19 11:23 CET
- interval_Config.pm: 'interval/nick/:nick/:tsrange' resource was broken due to
  missing EOH - fixed
- t/dispatch/interval.t: $base for 'interval/nick/:nick/:tsrange' resource was
  set to wrong value - fixed

0.291  2014-11-19 15:19 CET
- HTTP_Message_en.conf, Resources.pm: add 404 status trigger
- interval_Config.pm: call the hypothetical error code DISPATCH_TOO_MANY_RECORDS_FOUND
- top_Config.pm: fix factual error in documentation 
- dispatch_Message_en.conf: add DISPATCH_TOO_MANY_RECORDS_FOUND definition 
- Dispatch/Shared.pm->history: trigger 404 when no records found
- Model/Employee.pm: return DISPATCH_NO_RECORDS_FOUND with status level 'NOTICE'
- t/dispatch/history.t: explore more possibilities for entering an invalid EID; 
  adapt to current state (status-triggered 404 errors)
- t/dispatch/interval.t: add basic tests for 'interval/self/:tsrange'

0.292  2014-11-19 16:40 CET
- dispatch/interval_Config.pm: enable _fetch_* dispatch targets
- sql/interval_Config.pm: add SQL_INTERVAL_SELECT_BY_EID_AND_TSRANGE
- Dispatch/Interval.pm: implement _fetch_* dispatch targets
- Model/Interval.pm: implement a fetch_by_eid_and_tsrange function
- Model/Shared.pm: load_multiple had no provision for binding parameters -
  fixed
- t/dispatch/interval.t: add some basic tests for
  '/interval/eid/:eid/:tsrange', 'interval/nick/:nick/:tsrange' and
  '/interval/self/:tsrange'

0.293  2014-11-19 18:05 CET
- Dispatch/Interval.pm: let _new set EID to that of current user
  if no EID specified in request body
- t/dispatch/interval.t: add tests under 'interval/new' resource

0.294  2014-11-19 22:59 CET
- Dispatch.pm: adapt _docu* dispatch targets so they expect to receive argument
  in 'resource' property
- Dispatch/Interval.pm: pass argument with DISPATCH_PARAMETER_BAD_OR_MISSING to
  report which property is missing
- Resource.pm: only that JSON is not malformed that converts into a hashref
- Test.pm: adapt to current state
- t/dispatch/intervals.t: add two tests under 'interval/new'

0.295  2014-11-20 11:50 CET
- rename resource 'schedule/interval' to 'schedule/new'
- Resource.pm: no longer accept content bodies that do not convert cleanly into
  a hashref - this required some minor retooling of the following resources that
  had been accepting bare scalars or JSON arrays:
  - 'docu' and 'docu/html'
  - 'metaparam' and 'siteparam'
  - 'schedule/new'
- Dispatch.pm->_param_post now saves the pre-change value and attempts to
  restore it if the new value is not set properly
- t/: adapt to current state

0.296  2014-11-20 14:01 CET
- split 'metaparam' / 'metaparam/:param'

0.297  2014-11-20 18:21 CET
- config/dispatch/lock_Config.pm: add lock resource definitions
  (very similar to interval_Config.pm)
- dispatch/interval_Config.pm: adapt to generalized dispatch targets
- dispatch_Config.pm: enable lock resources
- sql/lock_Config.pm: add missing SQL statements
- Dispatch/: remove bogus "use App::Dochazka::REST::Dispatch::ACL qw( check_acl);" 
  line from all dispatch modules
- Dispatch/ACL.pm: add 'check_acl_context' routine (shared between interval
  and lock dispatch targets)
- Dispatch/{Interval,Shared}.pm: generalize most of the dispatch targets
- Dispatch/Lock.pm: get it ready for business
- Model/Lock.pm: add missing fetch_by_eid_and_tsrange routine
- t/dispatch/: rename 'interval.t' to 'interval_lock.t' and start running
  each resource's tests in a foreach loop so the same tests are run for 
  'interval/..' and 'lock/..' counterparts

0.298  2014-11-20 21:51 CET
- sql/lock_Config.pm: fix typos in SQL_LOCK_UPDATE
- Dispatch/Lock.pm: in '_new', make eid not required in request body 
- Dispatch/Shared.pm: fix bugs in interval+lock shared routines
- add several debug log messages; comment out one debug log message
- t/dispatch/interval_lock.t: test both 'interval/..' and 'lock/..'
  for all resources

0.299  2014-11-23 12:13 CET
- REST.pm: add caveat about tsranges with unbounded intervals
- Test.pm: add dbi_err routine to eliminate code duplication in units
- t/dispatch/: use the new 'dbi_err' routine everywhere

0.300  2014-11-23 14:50 CET
- t/300-ACL.t: add unit to vet the 'check_acl' routine
- Dispatch/ACL.pm: refactor the 'check_acl' routine
- Dispatch/Shared.pm: stop re-implementing check_acl in the 'make_default'
  routine
- Resource.pm: fix bug: "ACL profile of '/forbidden' resource is set to
  bogus scalar 'undefined' instead of undef"; adapt to check_acl refactor
- t/dispatch/history.t: add more tests; improve comments

0.301  2014-11-23 23:24 CET
- Dispatch/ACL.pm: make 'check_acl_context' return OK status when the
  request passes its check
- Dispatch/Shared.pm: block out an 'interval_sanity' routine (WIP)
- Dispatch/{Interval,Lock}.pm: adapt to current state

0.302  2014-11-24 14:43 CET
- dbinit_Config.pm: add 'no_intervals_after' and 'intvl_ok' stored PL/pgSQL procedures
- Dispatch/Interval.pm: make '_insert_interval' validate its arguments using Params::Validate
- Dispatch/Shared.pm: test attendance and lock intervals for bad string 'infinity';
  add 'lock_sanity' routine to perform analogous role to 'interval_sanity'

0.303  2014-11-24 16:47 CET
- config/sql/: globally replace tsrange with tstzrange and TIMESTAMP
  WITHOUT TIME ZONE to TIMESTAMP WITH TIME ZONE, etc.; add triggers to
  'intervals' and 'locsk' so all new 'intvl' values are vetted at insert/update
  using the 'intvl_ok' stored procedure
- Dispatch/Shared.pm: tweak '_no_infinity'
- t/: with the change to "WITH TIME ZONE", some return values have "+01"
  appended, so adapt tests in those cases
- t/dispatch/interval_lock.t: add a new section tests that examine handling
  of bogus tstzrange values that might be provided by the user

0.304  2014-11-24 17:13 CET
- Dispatch/Shared.pm: export lock_sanity
- Dispatch/Lock.pm: add 'lock_sanity' call to '_new'
- t/dispatch/interval_lock.t: fix tests broken by migration to 'WITH TIME ZONE';
  add a positive test illustrating a suspicious-looking interval that is acceptable
- t/model/: add '+01' to some timestamp literals because they are now timestamptz

0.305  2014-11-24 18:11 CET
- dbinit_Config.pm: notice that we already have a 'valid_intvl' trigger; revamp
  'intervals' and 'locks' triggers to use it
- t/dispatch/interval_lock.t: add a group of tests to keep track of which
  pathological tsranges ('intervals' in Dochazka terms) we are successfully
  checking for

0.306  2014-11-26 09:31 CET
- dbinit_Config.pm: add 'intvl_not_locked' trigger before update or insert on
  'intervals' table - checks to make sure the interval would not overlap with
  any existing lock
- Model/Shared.pm: fix bug where 'load' routine was needlessly adding 
  'count => 1' to the payload, which is supposed to be just an object
- t/: some tests started to fail because we were creating intervals and locks
  with the same intervals - fixed by changing the lock interval
- t/dispatch/interval_lock.t: now that we have a functioning trigger, add tests
  that attempt to insert intervals that conflict with a lock
- t/model/triggers: add new subdirectory for trigger tests
- t/model/triggers/immutable_id.t: new unit to test triggers that make ID
  fields immutable

0.307  2014-11-26 16:40 CET
- Model/: make 'update' methods return 'DOCHAZKA_ID_MISSING_IN_UPDATE' if id
  property missing
- Test.pm: add new 'gen_$class' multi-purpose routines
- t/model/general/id.t: use 'gen_$class' routines
- t/model/general/reset.t: expand to test 'reset' method in all classes

0.308  2014-11-27 11:11 CET
- Build.PL: require App::Dochazka 0.184 for 'attrs' and 'get' methods
- dbinit_Config.pm: add checks for presence of 'infinity' in tsranges
- Test.pm: bring in 'test_sql_success' and 'test_sql_failure' functions
  so we aren't duplicating them in the units
- t/model/employee.t: cleanup; eliminate some duplicated code (low-hanging
  fruit)
- t/model/general/reset.t: finishing touches
- t/sql/: cleanup
- t/sql/schedintvl.t: new tests for intvl triggers

0.309  2014-11-27 17:09 CET
- dbinit_Config.pm: have 'schedule_at_timestamp' return NULL instead of {} when
  there is no schedule in effect
- Model/Shared.pm: make decode_schedule_json handle the above NULL value
- t/: fix all the tests that were expecting {} but now get undef instead

0.310  2014-11-27 22:04 CET
- dbinit_Config.pm: add 'schedule_policy' trigger function to prevent users
  from introducing intervals in time periods when the employee has no or
  ambiguous scheduling
- t/dispatch/interval_lock.t: adapt to the above trigger (ensure testing user
  has a schedule and the schedule is in effect)
- t/: disable a bunch of tests broken by introduction of this trigger

0.311  2014-11-27 23:04 CET
- dbinit_Config.pm: expand no_lock_conflict to handle DELETE as well as INSERT/UPDATE
- t/model/{interval,lock}.t: adapt to current state
- t/model/lock.t: add test confirming that it is no longer possible to delete a
  locked interval

0.312  2014-11-28 11:27 CET
- t/dispatch/interval_lock.t: add some tests simulating: (1) create interval,
  (2) lock it, (3) attempt to update it - interval is locked, (4) attempt to
  delete it - interval is locked
- dbinit_Config.pm: add another trigger and run into problems because I didn't realize PostgreSQL
  executes triggers in alphabetical order

0.313  2014-11-28 12:20 CET
- dbinit_Config.pm: rename triggers so "alphabetical order" is aligned with
  "order of intended execution"
- Dispatch/{Interval,Lock,Shared}.pm: since all sanity checks will be
  implemented via triggers, the sanity stuff we put here before is unnecessary,
  so delete it
- t/dispatch/interval_lock.t: we are no longer returning 400 when intervals
  are malformed or non-compliant
- t/model/interval.t: now that we have enabled the 'priv_policy' trigger, make
  sure the testing user has a proper privhistory before attempting to add
  intervals in his name
- t/model/: both interval.t and lock.t required the same setup/teardown code,
  so move the lock tests to interval.t and get rid of lock.t

0.314  2014-11-28 15:23 CET
- rename t/model/interval.t -> t/model/interval_lock.t
- dbinit_Config.pm: add 'history_policy' trigger function to ensure that
  privhistory/schedhistory records are not entered if they conflict with an
  existing interval
- t/model/interval_lock.t: add minimal tests for the 'history_policy' trigger

0.315  2014-11-28 16:23 CET
- got Path::Router validations to work!!!
- config/dispatch/activity_Config.pm: added validations clauses
- config/dispatch/employee_Config.pm: added validations clauses
- config/dispatch_Message_en.conf: delete DISPATCH_AID_DOES_NOT_EXIST and
  DISPATCH_CODE_DOES_NOT_EXIST
- dbinit_Config.pm: change 'kosher_code' constraint on 'activities' table to
  match the validations clause
- Dispatch/Activity.pm: noticed that we were still returning custom codes (e.g.
  DISPATCH_AID_DOES_NOT_EXIST) instead of a simple 404 (405 on PUT) -- fixed
- t/dispatch/activity.t: fix tests broken by the above changes

0.316  2014-11-28 16:48 CET
- dispatch/employee_Config.pm: add validations clause to the
  'employee/count/:priv' resource definition
- Dispatch/Employee.pm: handle upper/mixed case priv strings gracefully
- Model/Employee.pm: noof_employees_by_priv was written long ago - update it to
  use best practices
- t/dispatch/employee.t: add 'employee/count/:priv' test cases

0.317  2014-11-28 17:26 CET
- dispatch/employee_Config.pm: add validations clause to 'employee/nick/:nick'
  resource definition
- sql/dbinit_Config.pm: change 'kosher_nick' constraint to match the above
  validations clause
- t/dispatch/: add some more tests demonstrating invalid codes caught
  by the new validations clauses

0.318  2014-11-28 18:12 CET
- Build.PL: require latest version of App::CELL
- dispatch/{interval,lock}_Config.pm: add validations clause
- dispatch/top_Config.pm: added missing 'interval' and 'lock' top-level
  resource definitions
- t/dispatch/interval_lock.t: add some test cases for the above validations
  clause

0.319  2014-11-28 18:30 CET
- dispatch/{interval,lock}_Config.pm: add validations clauses
- t/dispatch/interval_lock.t: adapt existing tests to new validations clauses;
  add new tests to demonstrate the new validations clauses; one resource 
  (lock/nick/:nick/:tsrange) was completely missing - added it

0.320  2014-11-28 19:33 CET
- config/dispatch/: add remaining validations clauses
- t/: adapt existing tests to the new validations clauses without getting hung
  up about adding new tests, because if I were to implement tests for all cases
  I'd never get this thing finished

0.321  2014-11-28 21:59 CET
- dispatch/employee_Config.pm: adjust ACLs so 'inactive' and 'active' employees
  can do various operations - trusting that later logic will prevent them from
  seeing or modifying any data but their own
- Dispatch/Employee.pm: eliminate _post_current routine after moving ACL code
  into _put_post_delete_employee_by_eid
- t/dispatch/employee.t: adapt to current state

0.322  2014-11-29 23:03 CET
- config/dispatch/employee_Config.pm: change ACL profiles of all the resources
  for which we want to let 'inactive' and 'active' employees edit certain
  fields of their own employee profile - this opens something of a bag of worms
  because we have to let these requests through to Dispatch/Employee.pm
- config/dispatch_Message_en.conf: eliminate deprecated messages
- Dispatch/Employee.pm: refactor several routines to let 'inactive' and
  'active' users update certain fields of their own employee profiles
- Dispatch/Shared.pm: eliminate deprecated messages
- t/dispatch/employee.t: adapt existing tests; add some tests to probe the 
  feature we just added
- t/dispatch/schedule.t: adapt to current state

0.323  2014-12-01 10:45 CET
- t/dispatch/interval_lock.t: have an active user try to create a lock on
  someone else's attendance

0.324  2014-12-03 09:03 CET
- Build.PL: require App::Dochazka 0.185 so employees have a sec_id property
- config/dispatch/employee_Config.pm: fix validations clause so it allows %
  sign, which we use as a wildcard in the GET method
- config/sql/{dbinit,employee}_Config.pm: add sec_id property to employees table
- REST.pm: write some POD to explain our approach to ACLs; do not mention a
  'policies' table since we never implemented it; explain how employees are
  identified (with mention of 'sec_id')
- Model/Employee.pm, Dispatch/Employee.pm: enable sec_id 
- t/dispatch/interval_lock.t: add tests for some lock edge cases
- t/{dispatch,model}/employee: adapt to the new 'sec_id' property

0.325  2014-12-03 09:40 CET
- t/dispatch/employee.t: add a basic test for GET employee/nick/:nick with a
  wildcard in the search key

0.326  2014-12-03 16:46 CET
- Dispatch/Shared.pm: make it so introspection resources do not return
  'acl_profile' property because some resources now have "mixed" acl_profiles

0.327  2014-12-03 22:26 CET
- start a substantial refactor to make each employee have her own database
  connection (thanks to DBIx::Connector)
- (test suite failing)

0.328  2014-12-05 08:57 CET
- REST.pm: refactor database (re-)initialization routines
- t/001-init.t: adapt to new routines
- dbh.pm: attempt to make get_conn handle all DBI connection scenarios
  correctly
- start migrating modules to new dbh.pm, which will be renamed to ConnBank.pm

0.329  2014-12-05 16:40 CET
- config/sql/session_Config.pm: delete (deprecated)
- rename dbh.pm to ConnBank.pm
- move Timestamp.pm (App::Dochazka::REST::Util::Timestamp) to ../staging/ as it
  is not used and the DBI calls need to be rewritten
- removed all mentions of App::Dochazka::REST::dbh from modules outside of Model/
- config/sql/dbinit_Config.pm: add SQL_NOOF_CONNECTIONS; set DEFAULT PRIVILEGES
  so user connections will work (in order to be able to revoke a user's
  privileges, it will be better to set the privileges via a trigger)
- introduce roles, fix privilege problems so now our "production" roles
  ('dochazka' and numeric "EID" roles) can see tables, etc.

0.330  2014-12-05 17:11 CET
- rename DBINIT_CONNECT_USER/DBINIT_CONNECT_AUTH to
  DBINIT_CONNECT_SUPERUSER/DBINI_CONNECT_SUPERAUTH, respectively
- ConnBank.pm: remove the $site->DOCHAZKA_DBNAME connection option,
  which was confusing - either use 'superuser' or the root EID
- REST.pm: remove deprecated 'connect_db' and 'connect_db_pristine' routines
- t/001-init.t: adapt to current state

0.331  2014-12-05 18:03 CET
- embark on a quest to eliminate all instances of the string 'dbh' from the
  entire codebase

0.332  2014-12-06 07:47 CET
- Model/Shared.pm: start converting DBI calls to DBIx::Connector; clean up some
  cruft along the way; add select_single routine for SELECT statements expected
  to return 0 or 1 record
- Test.pm: add a 'do_select_single' wrapper for 'select_single'
- t/sql/current_priv.t: refactor tests to use 'do_select_single'

0.333  2014-12-06 11:59 CET
- massive refactor ongoing to migrate the codebase to DBIx::Connector
- restore Timestamp.pm as we need it for unit tests
- t/004-shared-paramvalid.t, t/011-tsrange_equal.t, t/203-util-timestamp.t - 
  move three old and probably unnecessary units to staging because I don't have
  the patience to adapt them to the current state
- REST.pm: initialize DOCHAZKA_EID_OF_... site params in 'init' 
- Dispatch.pm: fix _get_dbstatus so the module compiles
- Dispatch/Schedule.pm, Model/Activity.pm, Model/Schedintvls.pm,
  Model/Schedule.pm, Model/Shared.pm: adapt to DBIx::Connector; cleanup
- Test.pm: add 'initialize_unit' routine to mitigate code duplication in the
  units, adapt 'test_sql_success' and 'test_sql_failure' to DBIx::Connector,
- t/sql/: adapt all units to DBIx::Connector
- t/dispatch/: start adapting to DBIx::Connector (WIP)

0.334  2014-12-06 14:39 CET
- fix Changes munge from last commit
- config/dispatch/employee_Config.pm, Dispatch/Employee.pm: re-enable 'count'
  resources
- Dispatch/: start migration to DBIx::Connector
- Model/: finish migration to DBIx::Connector
- Model/Schedule.pm: use 'select_single' in 'insert' method
- Model/Shared.pm: fix 'DISPATCH_RECORDS_FOUND' statuses; fix { isa =>
  'DBIx::Connector' } clauses
- Test.pm: finish migration to DBIx::Connector
- t/sql/, t/model/: migrate to DBIx::Connector; all tests running cleanly now
- NEXT: migrate Dispatch methods and t/dispatch/ units to DBIx::Connector

0.335  2014-12-06 21:11 CET
- REST.pm: deprecate the DOCHAZKA_DBUSER user (we are no longer using it)
- Dispatch/: migrate all modules to DBIx::Connector
- Model/Employee.pm: add $SIG{__WARN__} handler; when employee is created,
  set up the corresponding role
- Model/Shared.pm: fix bugs in make_test_exists and get_history
- Resource.pm: fix bugs introduced during migration to DBIx::Connector
- t/dispatch/activity.t now running cleanly

0.336  2014-12-07 18:37 CET
- hunt down and fix remaining bugs/errors/typos introduced during migration
- test suite running cleanly again

0.337  2014-12-08 11:26 CET
- config/sql/audit_Config.pm: bring in Audit Trigger from 
  https://wiki.postgresql.org/wiki/Audit_trigger_91plus
- Build.PL: add 'meta_merge' clause as recommended by Randy Stauner at
  https://github.com/CPAN-API/metacpan-web/issues/1418#issuecomment-62546169
- config/sql/dbinit_Config.pm: the DBINIT_CREATE parameter, where we create all
  tables, functions, triggers, etc., is a bit disorganized -- start adding
  'COMMENT' statements and taking other cleanup measures 
- REST.pm: work on documentation; add code to load and create the audit triggers
- Resource.pm: fixed bug (uncovered by the audit triggers) "all incoming HTTP
  connections are using PostgreSQL user '1', which should be reserved for the
  root employee"

0.338  2014-12-08 15:17 CET
- work on transaction auditing feature:
  - no more "shadow" db roles
  - all traffic goes through a single connection (which can be pooled)
  - pass EID to audit trigger via "SET LOCAL dochazka.eid"

0.339  2014-12-08 22:30 CET
- after discussions, reconsider my idea of creating a "shadow db role" for each
  employee; instead, I will try to get the EID into the audit trigger via a
  custom GUC (session variable)
- REST.pm: eliminate 'create_tables' routine; all database initialization now
  takes place in 'reset_db'
- ConnBank.pm: refactor 'get_conn'
- adapt all instances of 'get_conn' throughout the code base
- {Dispatch,Model}/Employee.pm: eliminate 'select_multiple_by_nick' routine;
  call load_multiple directly from the dispatch target
- t/: adapt to current state

0.340  2014-12-09 11:09 CET
- for auditing purposes we need to send not only the DBIx::Connector object,
  but also the current EID in all 'cud' calls
- Model/Shared.pm: in cud routine, add 'eid' to PARAMHASH and run
  SQL_SET_DOCHAZKA_EID_GUC to set 'dochazka.eid' GUC session variable
- {Dispatch,Model}/Activity.pm: carry out necessary modifications

0.341  2014-12-09 17:17 CET
- work on getting the current EID into Model/Shared.pm->cud
- send request context in all 'insert', 'update' and 'delete' method calls on
  datamodel objects; these methods then split out the DBIx::Connector object
  and the current EID
- Model/: make all necessary modifications
- Test.pm, Dispatch/: deal with cascade effects (WIP)
- t/sql/, t/model/: adapt tests to current state
- t/dispatch/: WIP

0.342  2014-12-10 10:52 CET
- audit_Config.pm: DROP SCHEMA is not necessary here, since the immediately
  preceding command is DROP DATABASE
- Dispatch/: completed the migration described above
- Model/: fix some lingering migration-related issues
- Test.pm, t/: migration broke lots of tests; we are now expected to send the
  request context, but with Plack::Test there is none(!); fortunately, it is
  trivial to simulate such a context ($faux_context)
- dispatch_Message_en.conf: get rid of
  DISPATCH_EMPLOYEE_{INSERT,UPDATE,DELETE}_OK message (DOCHAZKA_CUD_OK is
  sufficient)

0.343  2014-12-10 16:43 CET
- dbinit_Config.pm: fix names of parameters used to store PostgreSQL superuser
  credentials for testing purposes
- ConnBank.pm: refactor the entire module
- REST.pm: adapt to the new ConnBank.pm code; make 'init' routine return a
  status object with the Plack application in the payload
- Dispatch/, Model/, Test.pm, t/: adapt to the new ConnBank.pm code

0.344  2014-12-10 18:01 CET
- bin/dochazka-rest: adapt to recent modifications to REST.pm->init
- REST_Message_en.conf: add DOCHAZKA_NO_DBIX_CONNECTOR
- dbinit_Config.pm: sum(numbackends) is not working for some reason; work
  around the problem
- REST/Dispatch.pm: add missing 'use Try::Tiny'; add some debugging messages to
  '_get_dbstatus'; numify number of connections
- Test.pm: add some error checking; 
- t/dispatch/top.t: add subtest for 'dbstatus' resource

0.345  2014-12-11 11:35 CET
- REST.pm: add verbiage to POD
- Resource.pm, Dispatch/Employee.pm: prepare for Blowfish

0.346  2014-12-11 18:36 CET
- hash passwords using Authen::Passphrase::SaltedDigest
  - App::Dochazka::CLI authentication works fine
  - tests in t/dispatch/ are broken
- Dispatch/Employee.pm: implement 'hash_the_password' routine, call it from
  _insert_employee and _update_employee; export it for use in Test.pm
- Resource.pm: in _authenticate, compare password with stored salted hash 
- Test.pm: import hash_the_password and use it in create_testing_employee;
  adapt calls
- dbinit_Config.pm, t/sql/root.t: use the real hash+salt instead of the
  plaintext password

0.347  2014-12-11 20:13 CET
- REST_Config.pm: modify DOCHAZKA_PROFILE_EDITABLE_FIELDS so inactives and
  actives can still change their password now that we are hashing
- config/dispatch/employee_Config.pm: 'GET employee/nick/:nick' acl_profile was
  set too restrictive - fix
- dbinit_Config.pm: use real hash/salt when INSERTing 'root' and 'demo'
  employees
- Dispatch/Employee.pm: fix hash_the_password function calls
- Resource.pm: put call to Authen::Passphrase::SaltedDigest into a try/catch
  block; add some basic error-checking
- t/: adapt to current state

0.348  2014-12-12 09:39 CET
- REST_Config.pm: add DOCHAZKA_AUDITING and DOCHAZKA_AUDIT_TABLES to (1) make
  auditing optional, and (2) give site admin control over which tables are
audited
- REST.pm: make auditing optional; implement 'create_audit_triggers' and
  'delete_audit_triggers' routines to enable auditing to be disabled and
  re-enabled as and when desired

0.349  2014-12-12 16:43 CET
- get rid of DOCHAZKA_AUDITING
- Resource.pm: try to eliminate suspected double-encoding problem

0.350  2014-12-12 18:06 CET
- config/dispatch/interval_Config.pm: add resource definition for
  'interval/summary/?:qualifiers'
- dbinit_Config.pm: work on valid_schedintvl ticket
- config/REST_Config.pm: add DOCHAZKA_DBHOST, DOCHAZKA_DBPORT,
  DOCHAZKA_DBSSLMODE params
- ConnBank.pm: use the new site params in construction of data source string,
  provided they are set
- t/dispatch/interval_lock.t: start adding tests for the new
  'interval/summary/?:qualifiers' resource

0.351  2014-12-12 21:59 CET
- dbinit_Config.pm: the valid_schedintvl() function we had before was bogus -
  write a proper one
- t/model/schedintvls.t: add some tests that try to enter sets of intervals
  spanning more than 168 hours (which is banned by policy, enforced by the
  valid_schedintvl function)

0.352  2014-12-13 14:51 CET
- Build.PL: require Authen::Passphrase::SaltedDigest

0.353  2014-12-13 22:19 CET
- t/202-qualifiers.t: new unit to test Dispatch/Intervals->process_quals routine
- Dispatch/Intervals.pm: implmement 'process_quals' routine to parse qualifiers;
  start writing _get_summary (dispatch target for /interval/summary/?:qualifiers)

0.354  2014-12-14 22:47 CET
- config/dispatch/interval_Config.pm: activate the new 'interval/summary/..."
  resource
- Dispatch/Interval.pm: work on dispatch target for the new resource
- Util/Timestamp.pm: export '$current_month' and '$current_year'

0.355  2014-12-18 10:07 CET
- REST.pm: work on POD

0.356  2014-12-18 18:40 CET
- Resource.pm: add 'finish_request' routine to add 'no_cache' headers
- t/301-resource.t: test for presence of "no-cache" headers in HTTP response

===============================================
SPLIT OFF App::MREST into separate distribution
===============================================

0.357  2015-01-27 11:32 CET
- eviscerate Resource.pm and rename it to Auth.pm -> most of the Resource.pm
  functionality has been moved to Web::MREST

0.358  2015-01-29 20:00 CET
- REST.pm: emasculate init routine
- Auth.pm: inherit from Web::MREST::Entity; call init routine from is_authorized
  so we can get access to the database
- Dispatch.pm: bring in top-level resources from Web::MREST and add a couple of
  our own

0.359  2015-01-30 10:47 CET
- REST_MetaConfig.pm: delete deprecated params
- Dispatch.pm: resource defs and :ALL from Dispatch/Employee.pm
- Dispatch/Employee.pm: implement 'whoami' resource

0.360  2015-01-30 17:12 CET
- config/, Employee/Dispatch.pm: migrate four resource definitions

0.361  2015-01-30 21:02 CET
- Test.pm, t/model/, t/sql/: get all non-resource tests running again

0.362  2015-02-02 10:20 CET
- Auth.pm, ACL.pm: migrate 'forbidden' method to Web::MREST; handle cases when
  acl_profile property does not exist, is undefined, is invalid
- Dispatch.pm: give 'forbidden' resource an invalid acl_profile; add note about
  this to resource documentation string

0.363  2015-02-02 11:44 CET
- t/301-resource.t: finish migrating unit to Web::MREST
- bin/dochazka-rest: migrate server startup script to Web::MREST
- Dispatch.pm: improve documentation of docu resource
- Employee.pm: fix typo
- Test.pm: migrate 'docu_check' routine to Web::MREST
- t/dispatch/top.t: start migrating unit to Web::MREST

0.364  2015-02-02 17:03 CET
- migrate 'priv/history/...' resource definitions
- Dispatch/Priv.pm: migrate '/priv/history/self/?:tsrange' handler (working
  nicely)

0.365  2015-02-02 21:44 CET
- Dispatch/Priv.pm: rewrite the main privhistory handler (split into three parts)

0.366  2015-02-03 07:26 CET
- Dispatch/Priv.pm: get handler_priv_history_post into a working state

0.367  2015-02-03 12:23 CET
- Dispatch/: split off History.pm from Priv.pm and make it work for both
  'priv/history/...' and 'schedule/history/...' resources
- Dispatch.pm: load resource definitions from Dispatch/History.pm
- remove old, pre-migration code obsoleted by these changes

0.368  2015-02-04 17:04 CET
- migrate 'schedule/new' resource definition
- migrate 'schedule/new' resource handler (WIP)
- t/dispatch/schedule.t: migrate (WIP)

0.369  2015-02-04 18:08 CET
- Dispatch/History.pm: handle errors
- Dispatch/Schedule.pm: in handler_schedule_new, do the work in pass two,
  because in pass one 'request_entity' is not yet populated
- Test.pm: migrate dbi_err and create_testing_schedule
- t/dispatch/history.pm: migrate (WIP)

0.370  2015-02-05 09:44 CET
- Dispatch/History.pm, Dispatch/Shared.pm, t/dispatch/history.t: migrate (WIP)

0.371  2015-02-05 15:10 CET
- migrate 'priv/...' (non-history) resources (WIP)
- iron out last bugs, t/dispatch/history.t runs cleanly now

0.372  2015-02-06 06:12 CET
- Dispatch/Priv.pm: implement separate handler for 'priv/{eid,nick}'
- Dispatch/Schedule.pm: migrate 'schedule/all' and 'schedule/all/disabled' resources
- Dispatch/Shared.pm: migrate the not-very-aptly-named 'current' routine
- t/dispatch/{priv,schedule}.t: remove 'noop'/'help' tests
- t/dispatch/priv.t: unit runs cleanly

0.373  2015-02-06 15:23 CET
- migrate 'schedule/...' resources (WIP)

0.374  2015-02-08 19:49 CET
- Dispatch/Schedule.pm: migrate 'schedule/eid/...' and 'schedule/nick/...';
  start migrating 'schedule/sid/:sid'
- Dispatch/Employee.pm: migrate 'employee/count/?:priv'; move hash_the_password
  to Util.pm
- t/dispatch/schedule.t: migrate unit tests

0.375  2015-02-09 08:52 CET
- Dispatch/Shared.pm: make a generalized method ('handler_first_pass_lookup')
  for fetching objects from the database based on URI mapping
- start migrating resource handlers to the new method

0.376  2015-02-09 15:15 CET
- migrating resources to 'handler_first_pass_lookup'

0.377  2015-02-09 20:33 CET
- debugging WIP

0.378  2015-02-10 08:40 CET
- migrate 'employee/...' resources (WIP)
- get rid of 'make_default', which was used to implement 'help' resources
  but is not compatible with Web::MREST

0.379  2015-02-10 17:29 CET
- massive reorganization: move handler routines to Dispatch.pm

0.380  2015-02-10 18:27 CET
- Dispatch.pm: merge 'current' into 'handler_get_privsched'; fix _update_schedule
- t/dispatch/schedule.t: migrate unit tests - unit runs cleanly again

0.381  2015-02-11 10:42 CET
- work on employee handlers (PUT employee/eid/:eid and PUT employee/nick/:nick)
  with two-pass additional ACL check for updates; insert is working, too
- TODO: migrate rest of employee resources and t/dispatch/employee.t

0.382  2015-02-11 14:41 CET
- ResourceDefs.pm: new module; move all migrated resource defs into it;
  add missing acl_profile properties to top-level resource defs; 
- Test.pm: include location header in return status (a-la Web::MREST)
- t/dispatch/top.t: migrate unit

0.383  2015-02-11 16:43 CET
- migrate Employee resources (WIP)

0.384  2015-02-12 07:31 CET
- support 'employee/search/nick/:key'

0.385  2015-02-12 09:22 CET
- Dispatch.pm: make 404 explanation in 'handler_get_employee_search_nick' more
  descriptive
- move ACL.pm up one level in the directory structure, since the Dispatch/
  directory will soon be gone

0.386  2015-02-12 09:44 CET
- Dispatch.pm: in 'GET employee/search/nick/:key', add '%' characters to :key
  implicitly if none are provided (and note this in resource documentation)
- Model/Shared.pm: in load_multiple, mention search keys in the result

0.387  2015-02-12 10:13 CET
- Dispatch.pm: make 404 explanation more descriptive
- t/dispatch/employee.t: get unit running cleanly

0.388  2015-02-12 11:22 CET
- move Dispatch/Shared.pm up one directory level
- convert insert_employee and update_employee into ordinary functions and move
  them to Shared.pm - to be manageable, Dispatch.pm should contain resource
  handlers only

0.389  2015-02-12 14:40 CET
- Dispatch.pm, Shared.pm: migrating shared (non-handler) routines to Shared.pm

0.390  2015-02-12 15:05 CET
- drop 'test/?:specs' routine, which is specific to Web::MREST testing

0.391  2015-02-12 15:15 CET
- Dispatch.pm, Shared.pm: move shared employee ACL check routines to Shared.pm

0.392  2015-02-12 16:04 CET
- Dispatch.pm, Shared.pm: eliminate "history boilerplate" by integrating its
  functionality directly into two history handlers

0.393  2015-02-12 21:16 CET
- ResourceDefs.pm, Dispatch.pm: start migrating 'activity/...' resources
- config/dispatch_Message_en.conf: replace hard-coded strings with message
  object codes
- Shared.pm: implement 'shared_entity_check'

0.394  2015-02-13 08:28 CET
- continue migrating 'activity/...' resources
- finished moving shared routines from Dispatch.pm to Shared.pm

0.395  2015-02-13 09:04 CET
- finish migrating 'activity/...' resources
- cleanup

0.396  2015-02-13 15:15 CET
- major migration push (just four handlers left to go)

0.397  2015-02-13 21:51 CET
- migrate last resources
- cleanup (WIP)

0.398  2015-02-16 08:25 CET
- Dispatch.pm: fix syntax error
- ResourceDefs.pm: add missing resources 'activity', 'employee', 'interval', 'lock'
- Shared.pm: fix function name 'shared_process_quals'
- t/model/: clean up tests (WIP)

0.399  2015-02-16 11:01 CET
- all tests running cleanly again
- ACL.pm, Auth.pm: return to previous behavior where resources default to "403
  Forbidden" in absence of a valid acl_profile property

0.400  2015-02-16 14:42 CET
- Test.pm, t/: comment out 'diag' statements so test output is clean
- docgen.plx, Docs/Resources.pm: first shot at migrating script that generates
  resource documentation
- ResourceDefs.pm: fix 'documentation' properties so all resources have a 
  "preamble"

0.401  2015-02-16 21:59 CET
- docgen.plx: tweak to extract allowed methods for each resource
- Docs/Resource.pm: re-generate POD by latest docgen.plx

0.402  2015-02-17 18:30 CET
- t/model/schedule.t: fix brokenness previously hidden by a stale module file
  in /usr/lib/perl5/site_perl

0.403  2015-02-18 11:59 CET
- use normalize_filespec to avoid $ENV{'HOME'}, which does not work on Windows
  systems

0.404  2015-02-18 17:59 CET
- dispatch_Messages_en.conf, Auth.pm: define and use DISPATCH_ACL_CHECK_FAILED message
- Dispatch.pm: remove extraneous 'my'

0.405  2015-02-20 15:24 CET
- ACL.pm: add 'acl_check_is_me' - generalized check for handlers that have
  acl_profile "passerby" but may only used to operate on one's own records
- ResourceDefs.pm, Dispatch.pm: use 'acl_check_is_me' in several handlers

0.406  2015-02-20 20:55 CET
- config/sql: add SQL_EMPLOYEE_SELECT_BY_SEC_ID
- ResourceDefs.pm: add employee/sec_id/:sec_id

0.407  2015-02-21 15:30 CET
- t/dispatch/employee.t: adapt tests to new ACL policy

0.408  2015-02-21 15:58 CET
- Model/Employee.pm: add load_by_sec_id routine
- t/model/employee.t: add rudimentary unit tests for load_by_sec_id
- Shared.pm: change all instances of $self to $d_obj since none of the routines
  in this module use method calls; add sec_id to shared_first_pass_lookup

0.409  2015-02-22 16:36 CET
- implement shared_get_employee and use it to implement three resource handlers

0.410  2015-02-23 20:42 CET
- t/dispatch/employee.t: add rudimentary tests of "employee/sec_id/:sec_id"
  resource

0.411  2015-02-24 10:55 CET
- Build.PL: no longer re-create README on each build
- README: instead, point would-be readers to metacpan.org
- REST.pm: work on POD

0.412  2015-03-20 21:35 CET
- config/sql/dbinit_Config.pm: add disabled_to_zero trigger to convert NULL
  values to "false" in the disabled field
- t/sql/disabled_to_zero.t: test disabled_to_zero trigger

0.413  2015-03-24 21:30 CET
- allow single-character nicks

0.414  2015-03-25 16:24 CET
- Dispatch.pm: convert "hardcoded text as status codes" into proper status
  codes

0.415  2015-03-30 17:29 CEST
- require App::Dochazka 0.186 for 'scode' property in schedule class
- make test suite tolerate 'scode' property
- t/sql/schedule_Config.pm: add scode property to all SQL statements where it
  makes sense
- implement 'schedule/scode/:scode' property with basic test cases

Changes  view on Meta::CPAN

- config/REST_SiteConfig.pm: override MREST_APPNAME

0.499  2016-12-08 15:42 CEST
- README.rst: start documenting release workflow
- README.md: rename to README.rst
- README: remove deprecated README file
- Model/Tempintvls.pm: make variable names less confusing
- t/: cleanup
- LICENSE: work continues in 2015

0.500 2015-12-08 16:24 CET
- prerelease.sh: automatically update Changes file, add tag
- README.rst: describe the new release workflow in more detail

0.501 2015-12-09 14:40 CET
- README.rst: fix literal code blocks
- README.rst: add reminder to push using --follow-tags
- implement Dockerized testing environment
- docker-test.sh: bootstrap script for Dockerized testing env

0.502 2015-12-10 14:02 CET
- several Dockerfile tweaks
- Fix https://github.com/smithfarm/dochazka-rest/issues/26
  - config/REST_Config.pm: add DOCHAZKA_TIMEZONE config param
  - t/001-init.t: check DOCHAZKA_TIMEZONE sanity
  - Test.pm: check DOCHAZKA_TIMEZONE in every unit
  - Ensure PGTZ environment variable is set
- Fix https://github.com/smithfarm/dochazka-rest/issues/28
  - t/: be more careful about timezone

0.503 2015-12-10 21:04 CET
- Fix https://github.com/smithfarm/dochazka-rest/issues/30
  - t/001-init.t: bail out if DOCHAZKA_TIMEZONE not set
- Fix https://github.com/smithfarm/dochazka-rest/issues/31
  - Test.pm: initialize_unit() return PSGI app instead of status obj
  - t/: move "pure" unit tests to t/unit/
  - t/: simplify regression test init boilerplate
  - tests: rename initialize_unit() to initialize_regression_test()

0.504 2015-12-11 21:40 CET
- Make release and prerelease scripts executable
- MANIFEST.bak: remove superfluous file
- Build.PL: require App::Dochazka::Common 0.194
- docgen_Config.pm: do not convert warnings into errors
- tests: use Test::Warning to test for unexpected warnings
  (except in 001-init.t)
- dbinit_Config.pm: remove spurious warning

0.505 2016-01-01 15:42 CET
- doc: minor clarifications
- REST.pm: add Report Generation section to POD
- Build.PL: require 0.195 for Component class
- Add Component class, resources, handlers, basic tests
- t/dispatch/: add missing LogToFile lines
- Dispatch.pm: improve error checking

0.506 2016-01-02 02:36 CET
- MANIFEST: add t/dispatch/component.t
- REST.pm: name the genreport resource
- Remove component/path/:path, add component/all
- t/dispatch/component.t: add path_exists() helper function
- t/dispatch/component.t: use path_exists() to test
- component.t: rename path_exists() -> path_exists_by_dispatch()
- prerelease.sh: fix timestamp
- Component: check for invalid ACL profile
- ACL.pm: fix uninitialized value in string eq warnings
- t/dispatch/employee.t: fix "Wide char in print" warning
- Implement Feature #37:
  - Dispatch.pm: add init() function that populates Mason directory
  - Test.pm: call Dispatch.pm->init() in initialize_regression_test()
  - t/dispatch/component.t: test the sample component

0.507 2016-01-02 19:39 CET
- Mason.pm: add module for Mason interpreter singleton
- Mason.pm->init_singleton(): improve error-checking
- Mason.pm: add $comp_root package variable
- Util/Date.pm: drop unused dependency
- REST/Test.pm: skip tests if Mason initialization fails
- Implement Feature #39:
  - REST.pm: implement, use, test reset_mason_dir() routine
  - REST.pm->reset_mason_dir(): return comp_root in payload
  - REST.pm->reset_mason_dir(): return payload only on success
  - Model/Component.pm: add create_file method
  - Model/Component.pm: call create_file on successful insert and update
  - Model/Component.pm: add delete_file method

0.508 2016-01-02 20:24 CET
- Build.PL: add Mason dependency
- docker: add Mason dependency
- t/mason.t: skip tests if state directory inaccessible

0.509 2016-01-02 21:56 CET
- docker: add new dependencies and create state directory
- ResourceDefs.pm: add genreport resource definition
- Implement basic "POST genreport" operation

0.510 2016-01-02 23:24 CET
- Model/Component.pm: improve error handling in generate method
- Add sample/site_param.mc Mason template
- Mason.pm: add basic class_header parameter
- t/dispatch/component.t: do not complain when we add sample templates
- Dispatch.pm->handler_genreport: pass arguments to generate method
- Model/Component.pm->generate: accept and process template arguments

0.511 2016-01-04 00:43 CET
- various documentation fixes
- bin/docgen.plx: reinstate resource POD generation script (lost in
  migration from SourceForge to GitHub)
- REST/Test.pm: use accessors to get employee EID
- Docs/Workflow.pm: cover report generation and Mason components
- Model/Shared.pm->tsrange_equal(): return true or false
- Model/Shared.pm: implement tsrange_intersection()
- Partial intervals feature (#43)
  - Build.PL: require Common 0.196 for partial intervals
  - interval_Config.pm: use overlap instead of contained by
  - sql: define SQL_INTERVAL_SELECT_BY_EID_AND_TSRANGE_PARTIAL_INTERVALS
  - sql: make SQL_INTERVAL_SELECT_BY_EID_AND_TSRANGE ignore partial intervals
  - config/sql/interval_Config.pm: fix syntax error
  - Model/Interval.pm: get whole and partial intervals
  - Model/Interval.pm: use tsrange_intersection() to create partial intervals
  - t/model/interval_lock.t: add partial interval tests

0.512 2016-01-04 11:43 CET
- Fix "Partial intervals not shown in temporal order" (#46)
  - bin/create_active_employee.t: script to create employee in empty database
  - sql/interval_Config.pm: refrain from sorting intervals
  - Model/Interval.pm: sort concatenated set of intervals
  - Model/Shared.pm: use tstzrange instead of tsrange
  - t/model/interval_lock.t: test case for #46

0.513 2016-01-04 20:39 CET
- Implement feature "No database operations on partial intervals" (#47)
  - config/: add DOCHAZKA_PARTIAL_INTERVAL_ILLEGAL_OPERATION message
  - Model/Interval.pm: no database operations on partial intervals
- Implement "Test function to delete all attendance data" (#49)
  - REST.pm: split insert initial set of activities code into separate function
  - Model/Shared.pm->cud_generic(): make bind_params parameter optional
  - REST/Test.pm: delete_all_attendance_data() function
  - t/{dispatch,model}: use delete_all_attendance_data()

0.514 2016-01-05 11:41 CET
- Fix "INTERVAL DELETE operations clobber partial intervals" (#50)
  - Model/Shared.pm: improve cud() and cud_generic() return status
  - t/: adapt tests to current state
  - config: SQL_INTERVAL_DELETE_BY_EID_AND_TSRANGE ignore partial intervals
- sql/interval_Config.pm: do not apply LIMIT when selecting partial intervals
- Dispatch.pm: fix a double my
- REST.pm: rearrange sections; new high-level content; move details to
  REST/Guide.pm

0.515 2016-01-06 21:15 CET
- doc: fix GitHub issue tracker URL
- Model/Interval.pm: drop obsolete comment
- ResourceDefs.pm: rethink interval/summary/...
- interval/summary/eid/:eid/:tsrange skeleton implementation
- Dispatch.pm: make _handler_intlock aware of interval/summary
- Implement handler for interval/summary/eid/:eid/:tsrange
- Util/Date.pm: implement calculate_hours() function
- Model/Activity.pm: implement code_by_aid() function
- Improve interval/summary/eid/:eid/:tsrange handling

0.516 2016-01-09 20:42 CET
- cleanup: merge Utils::Date into Utils::Holiday
- cleanup: move REST::Util::Holiday to REST::Holiday
- cleanup: refrain from using the /a modifier
- Component_Config.pm: enclose siteparam template in HTML 4.0
- doc: improve comments in Util.pm
- doc: expand documentation of genreport resource
- Model/Interval.pm: simplify interval summary data structure
- Dispatch.pm: require 'source', 'acl' properties for insert only
- t/dispatch/interval_lock.t: add interval/summary tests
- Implement feature "Component class: add validations property" (#54)
  - sql/component_Config.pm: add validations to SQL statements
  - sql/dbinit_Config.pm: add validations to components table
  - REST.pm->reset_db: add validations to SQL_COMPONENT_INSERT
  - Model/Component.pm: add validations property
  - t/dispatch/component.t: add validations property
  - Build.PL: require App::Dochazka::Common 0.199 for component validations
- Fix bug "genreport resource does not validate parameters" (#53)
  - genreport resource: apply validations, if any
  - REST/Dispatch.pm->handler_genreport(): vet parameters more carefully

0.517 2016-01-11 00:29 CET
- config/Component_Config.pm: use Data::Dumper in component
- config/Component_Config.pm: beginnings of monthly report template
- t/model/tempintvls.t: change Util::Date to Holiday
- Dispatch.pm->handler_genreport(): refactor function
- Revamp Docker testing environment:
  - version.plx: Perl script to print App::Dochazka::REST version
  - .gitignore: ignore docker/Dockerfile
  - bin/dochazka-dbinit: add database reset script
  - docker: Makefile to generate 3 different images from a single
    Dockerfile.in
  - docker-test.sh: adapt to current state

0.518 2016-01-11 18:29 CET
- version.plx: use the right library directory
- docker/: split into two separate subdirs "production" and "testing"
- docker/: fix CMD so it runs dochazka-rest --initialize
- bin/dochazka-rest: finish adding --initialize option

0.519 2016-01-14 19:42 CET
- docker:
  - Dockerfile: delete file which should not be here
  - .gitignore: adapt to current state
  - Makefile: push the images/tags to dochazka organization
  - test-drive.sh: rename test drive script and update README
  - test-drive.sh: remove silly exit statement
  - test-drive.sh: use longer --link form
  - test-drive.sh: increase wait times
- documentation:
  - ACL.pm: fix POD
  - Model/Employee.pm: adapt POD to current state
  - REST/Guide.pm: adapt INSTALLATION chapter to current state

0.520 2016-01-19 15:17 CET
- dispatch: vastly simplify interval/fillup resource(s)
- t/dispatch/fillup.t: drop all tests
- Dispatch: rename handler_post_interval_fillup -> handler_fillup
- Dispatch.pm: delete employee key fields after employee has been determined
- dispatch_Message_en.conf: DISPATCH_EMPLOYEE_CANNOT_BE_DETERMINED
- refactor Tempintvl and Fillup modules
  - Model/Tempintlvs.pm: support date lists
  - t/model/tempintvls.t: wipe out database at beginning as well as at end
  - Model/Interval.pm: tweak POD
  - Model/Tempintvls.pm: fix syntax error

Changes  view on Meta::CPAN

  - Model/Tempintvls.pm: drop include_holidays parameter
  - Model/Tempintvls.pm: drop deprecated SQL_TEMPINTVLS_SELECT_EXCLUSIVE
  - Rename Tempintvls->Fillup and add Tempintvl class
  - Rename ::Model::Fillup to just plain ::Fillup
  - Fillup.pm: refactor accessors and reset() method
  - t/unit/holiday.t: add canonicalized interval test case
  - Holiday.pm->calculate_hours(): return 0 if problem
  - Fillup.pm, Tempintvl.pm: refactor
- Build.PL: require latest App::Dochazka::Common

0.521 2016-01-19 16:28 CET
- Dispatch.pm: remove references to deprecated Tempintvls.pm

0.522 2016-01-20 10:02 CET
- MANIFEST.SKIP: ignore test-drive.sh
- Implement "fillup needs to gracefully avoid existing intervals"
  https://github.com/smithfarm/dochazka-rest/issues/22
  - Fillup.pm->commit: collect basic statistics (success/failure)
  - Fillup.pm->new(): correctly set boolean attributes
  - t/fillup.t: new test case - conflicting interval

0.523 2016-01-20 10:15 CET
- Docs/Resources.pm: re-generate resource documentation
- release.sh: automatically fill in OBS commit message

0.524 2016-01-20 15:55 CET
- WISHLIST: holding area for stale feature requests
- Fillup.pm->new(): fix date_list and tsrange validations
- t/fillup.pm: add a date_list test case
- Fix bug "interval/fillup returns wrong intervals for very short tsrange"
  https://github.com/smithfarm/dochazka-rest/issues/21
  - Fillup.pm: remove too-short tsrange check
  - t/fillup.t: add too-short tsrange test cases
- Fix bug "fillup: enforce configurable limit on length of date_list"
  https://github.com/smithfarm/dochazka-rest/issues/65
  - config/: add "date_list too long" config param and message
  - Fillup.pm: complain when date_list is too long

0.525 2016-01-22 09:26 CET
- Fillup.pm: "clobber conflicting intervals" feature

0.526 2016-01-24 23:55 CET
- Test.pm: add create_testing_interval and delete_testing_interval
- t/dispatch/interval_lock.t: rename helper function
- t/dispatch/fillup.t: get ready to start adding test cases
- Dispatch.pm: re-implement interval/fillup resource (#61)
- Fix bug "Holiday problems when employee has weekend work scheduled"
  (#67)
  - t/fillup-bug-67.t: add test case demonstrating the bug
  - t/unit/holiday.t: add test confirming bug #67
  - Holiday.pm: get holidays that fall on weekends
- Fillup.pm: fix various date_list bugs

0.527 2016-01-30 23:59 CET
- MANIFEST: add t/fillup-bug-67.t
- Fillup.pm->commit: return OK even if no intervals created
- Fillup.pm: give fillup intervals a fig leaf
- Fillup.pm->commit(): do not overwrite long_desc parameter
- document the DBIx::Connector object in the request context
- factory-progress: working document for Factory submission

0.528 2016-02-01 00:58 CET
- factory-progress: submit Starman to Factory
- Dispatch.pm: do not reinitialize Path::Router object on every request

0.529 2016-04-23 18:26 CEST
- factory-progress: add dependencies missing from SLES-12-SP1
- Guide.pm: add some clarifications from testing on humans
- systemd: add dochazka-rest.service file (#59)
- Build.PL: bump Date::Holidays::CZ dependency to 0.12 (#76)

0.530 2016-09-01 23:38 CEST

Changes  view on Meta::CPAN

0.546 2016-09-25 09:44 CEST
- Revamp session management
- doc: update session management section of Guide

0.547 2016-09-26 14:00 CEST
- run-tests.sh: do not make an empty "1" file
- Auth.pm: require 'eid' property in _validate_session()
- model: stricter match for system users in ldap_sync()
- dispatch: improve error messages generated by LDAP handlers

0.548 2016-11-01 15:43 CET
- build/ops: move project back to Application:Dochazka (in OBS)
- Dispatch.pm: fix session resource
- Implement new "session/terminate" resource

0.549 2017-03-02 00:57 CET
- tests: fix top-level resource sanity test
- doc: dump session to log in Auth.pm
- scripts: cleanup dochazka-rest startup script
- build/ops: require Web::MREST 0.287
- doc: clarify schedule/scode/:scode
- make POST schedule/history accept scode as well as sid
- doc: clean up comments in Model/Shared.pm
- Make dbinit create DEFAULT schedule
- tests: add scode tests to t/sql/schedhistory.t
- tests: adapt tests to preserve DEFAULT schedule

Changes  view on Meta::CPAN

- Model/Shared: make canonicalize_tsrange() fail on empty tsranges
- fillup: get conflicting intervals list in chronological order

0.553 2017-10-25 23:37 CEST
- WISHLIST: add "GET ldap/info"
- Dispatch: implement POST interval/scheduled
- Shared.pm: rip out dead code
- t/fillup.t: expand test coverage of Fillup
- Fix {priv,schedule}_change_during_range, {priv,sched}history_at_timestamp

0.554 2017-10-31 14:31 CET
- Fillup: return different code when dry_run is set
- tests: add 'interval/scheduled' coverage to t/dispatch/fillup.t
- Fillup: fix success and failure messages
- dbinit_Config: disallow modification of root supervisor field

0.555 2017-11-02 20:23 CET
- Model/Shared: introduce DOCHAZKA_SQL_TRACE to control SQL debugging info
- sql: add trigger preventing employees from supervising themselves
- Resource "POST interval/scheduled" no longer requires AID
- ResourceDefs: adjust POD of "interval/scheduled"

0.556 2017-11-02 23:20 CET
- Fillup: fix status code when no intervals created/identified
- Dispatch: fix regression in POST interval/fillup

0.557 2017-11-15 12:07 CET
- Add has_reports property to GET employee/.../full
- doc: ResourceDefs: mention URI encoding in employee/search/nick/:key
- ResourceDefs: let inactive and above search employee profiles
- Dispatch: refrain from returning 400 on certain harmless updates

0.558 2020-02-11 19:49 CET
- ResourceDefs: allow inactives to get full employee profiles of supervisees
- Dispatch: allow supervisor to generate scheduled intervals of supervisee
- build/ops: drop Makefile.PL, add t/critic.t and t/manifest.t

0.559 2022-06-29 17:49 CEST
- bootstrap: add bootstrap scripts
- ext/docker/testing/Makefile: convert from docker to podman
- bootstrap.sh: run tests recursively
- Guide.pm: use correct POD comment syntax
- t/: adapt tests to "invalid input syntax for type integer" error message



( run in 0.479 second using v1.01-cache-2.11-cpan-49f99fa48dc )