App-Dochazka-REST

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN


0.163  2014-08-27 17:42 CEST
- Dispatch/Employee.pm->_put_employee: allow undef as value for optional fields
  ('fullname', 'email', 'passhash', 'salt', 'remark') 
- Model/Employee.pm->expurgate: when expurgating employee objects, do not
  remove 'passhash' and 'salt' properties

0.164  2014-08-28 11:26 CEST
- Model/Shared.pm: do not put empty strings into the database

0.165  2014-09-01 07:51 CEST
- Unicode hell
- add more debug messages

0.166  2014-09-01 16:40 CEST
- Resource.pm: Unicode hell! /employee/nick/číča is handled correctly when
  sent by browser, but incorrectly when sent via App::Dochazka::WWW - yet
  the path_info string is decoded correctly in 'service_available' in both
  cases! Very strange.

0.167  2014-09-04 17:34 CEST
- respect DOCHAZKA_REST_LOG_FILE and DOCHAZKA_REST_LOG_FILE_REST core/site
  config parameters (as is already the case in App::Dochazka::WWW) - no 
  more chasing temporary files

0.168  2014-09-04 17:41 CEST
- t/: change default configuration directory (for unit testing purposes) from
  '/etc/dochazka' to '/etc/dochazka-rest', as the former is ambiguous

0.169  2014-09-17 09:59 CEST
- REST.pm: modify INSTALLATION section of POD to bring it closer to current
  reality

0.170  2014-09-17 10:30 CEST
- REST.pm: add some debug messages

0.171  2014-09-17 10:51 CEST
- REST.pm: fix bug 'Can't call method "errstr" on an undefined value' when
  connect_db_pristine can't connect to database; remove debug messages

0.172  2014-09-17 11:13 CEST
- t/001-init.t: bail out of testing if we cannot connect to database

0.173  2014-09-17 14:28 CEST
- REST.pm: expand INSTALLATION section of POD with explanation of how to test database
  connection using 'psql'

0.174  2014-09-24 16:38 CEST
- try to fix UTF-8 bug, but only make it worse

0.175  2014-09-25 09:29 CEST
- Resource.pm: encode response body in UTF-8 before sending it out on the line

0.176  2014-10-14 17:31 CEST
- Dispatch/: add some comments
- Resource.pm: add debug message; add allow_nonref; find bug #57 

0.177  2014-10-15 10:33 CEST
- start revamping path dispatch code in light of bug #57 (PUT request to
  non-existent resource returns HTTP code 200 and null entity body)
- realize that it makes no sense to return 404 on a PUT request, since the
  whole idea of PUT is to create a new resource
- the principal change is in Resource.pm->allowed_methods:
  - the definition of each resource (in config/dispatch) should contain list of allowed methods
  - when path is recognized, return the allowed methods from the resource definition
  - when the path is not recognized _AND_ the method is PUT, return 405 Method Not Allowed

0.178  2014-10-15 16:41 CEST
- the design change in 0.177 caused a lot of breakage: put the pieces back together (WIP)

0.179  2014-10-15 22:54 CEST
- Build.PL: require App::CELL 0.197 (for 'get_param')
- continue fixing brokenness following the design change in 0.177

0.180  2014-10-16 08:40 CEST
- massage Changes file
- config/dispatch: make 'help' resources for all four HTTP methods we support
  (GET, POST, PUT, DELETE)
- t/: fix or disable all broken tests - test suite running clean again, but
  many tests are missing

0.181  2014-10-16 10:35 CEST
- make 'employee/nick' and 'employee/eid' be POST requests (instead of PUT) -
  we will reserve PUT for unique resources like 'employee/nick/joedavis'

0.182  2014-10-16 10:56 CEST
- Dispatch.pm: add POD for "" and "help" resources

0.183  2014-10-16 11:12 CEST
- LDAP.pm: use EXPORT_OK instead of EXPORT
- Resource.pm: import routines from LDAP.pm explicitly

0.184  2014-10-16 12:59 CEST
- Resource.pm: implement basic handling of DELETE requests

0.185  2014-10-16 13:37 CEST
- t/: tweak naming scheme for dispatch unit test files; add unit test files
  for DELETE method
- config/dispatch/dispatch_Top_Config.pm: add target for DELETE on 'echo'
  resource

0.186  2014-10-16 16:44 CEST
- Dispatch/, t/: work on dispatch-related POD, unit tests

0.187  2014-10-16 17:53 CEST
- t/: more dispatch tests

0.188  2014-10-16 22:46 CEST
- t/: add a bunch of tests; refine siteparam and metaparam tests; find
  App::CELL bug ($meta can be used to access site parameters)

0.189  2014-10-17 11:10 CEST
- Resource.pm: provide hash to keys, instead of hash reference

0.190  2014-10-17 17:48 CEST
- Build.PL: require latest App::CELL to avoid bug
- implement 'bugreport' resource
- implement PUT method for 'metaparam/:param' resource
- Dispatch.pm: add POD for more resources
- t/310-dispatch-top-get.t: add test case for 'bugreport' resource
- t/312-dispatch-top-put.t: add test case "set meta parameter via REST
  call"

0.191  2014-10-20 16:53 CEST
- Hackweek Day 1
- Build.PL: depend on latest version of App::Dochazka
- config/dispatch/dispatch_Employee_Config.pm: use refactored employee
  targets
- config/sql/employee_Config.pm: do not include 'priv' and 'schedule' in
  employee objects
- Dispatch/Employee.pm: refactor employee PUT and POST targets
- Model/Employee.pm: add 'overlay' method
- Resource.pm: instead of having 'priv' property directly in the current
  employee hash, we make a separate 'current_priv' property for it; 
  push the HTTP method onto the context hash ASAP (in service_available)
- t/316-dispatch-employee-post.t: add some "real" tests involving inserting
  and update employee objects
- t/317-dispatch-employee-put.t: fix broken tests

0.192  2014-10-20 22:15 CEST
- dispatch/dispatch_Employee_Config.pm: resources into alphabetical order; add
  'employee/current/priv' resource
- dispatch/dispatch_Message_en.conf, Dispatch/Employee.pm: add
  'employee/current/priv' resource
- Model/Shared.pm: add some log messages in course of debugging a problem with
  App::Dochazka::CLI

0.193  2014-10-21 08:35 CEST
- t/: fix accumulated brokenness in data model tests
- t/315-dispatch-employee-get.t: clean up comments and add a test case

0.194  2014-10-21 09:21 CEST
- Resource.pm: if method is GET and result is "No records found", return
  404 instead of 200 + status object
- t/: adapt tests to this change

0.195  2014-10-21 10:51 CEST
- Model/Employee.pm->noof_employees_by_priv: if $priv is not a valid
  privlevel, return 'OK' status + status code DISPATCH_NO_RECORDS_FOUND
  to trigger a 404 Not Found response; also, put 'count' property in the
  payload where it belongs
- t/315-dispatch-employee-get.t: adapt existing test case

0.196  2014-10-21 11:38 CEST
- config/dispatch_Top_Config.pm: make "echo" work with POST only; put
  resources in alphabetical order
- t/: remove 'echo' tests from top-level PUT and DELETE units

0.197  2014-10-21 11:47 CEST
- work on development-checklist
- t/: standardize method order (GET, PUT, POST, DELETE); adapt units

0.198  2014-10-21 12:10 CEST
- Dispatch.pm: document all target subroutines; put into alphabetical order
  by resource name/path

0.199  2014-10-21 16:31 CEST
- Hackweek Day 2
- dispatch_Message_en.conf: add DISPATCH_RESOURCE_NOT_IMPLEMENTED
- dispatch_Top_Config.pm: implement 'not_implemented' resource
- Dispatch.pm: implement 'not_implemented' resource, alphabetical order
  tweak
- t/: add missing top-level dispatch tests
- new ../development-checklist chart to clarify and streamline
  resource-implementation workflow

0.200  2014-10-21 22:29 CEST
- ../development-checklist: finish implementing top-level resources
- Dispatch.pm: when getting site and meta params, show file and line
  number along with other metadata; tweak resource documentation
- t/: some tests failing due to bug in App::CELL::Config->get_param_meta

0.201  2014-10-22 08:30 CEST
- Build.PL: require App::CELL 0.200 for bug fix
- t/: adjust two tests now that PUT metaparam/:param and PUT siteparam/:param
  are assigning the request body to the parameter directly

0.202  2014-10-22 16:47 CEST
- Hackweek Day 3
- lots of refinements to (plus documentation and test cases for) employee
  resources
- implement DELETE support for employee resources
- eliminate problematic "short-cut" 'employee/:nick' and 'employee/:eid'
  resources
- make it possible to update an employee property to null
- eliminate problematic 'overlay' method in Model/Employee.pm
- improve debug message in Resource.pm
- add negative and otherwise pathological test cases

0.203  2014-10-22 17:15 CEST
- t/317-dispatch-employee-post.t: got tests running again

0.204  2014-10-23 10:57 CEST
- t/: figure out how to run tests using 'prove -r'; make a 't/dispatch/'
  directory for dispatch tests; merge all top-level dispatch tests into a
  single file 't/dispatch/top.t'

0.205  2014-10-23 14:02 CEST
- Hackweek Day 4
- Build.PL: make Module::Build walk t/ directory recursively

Changes  view on Meta::CPAN

  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

Changes  view on Meta::CPAN

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

Changes  view on Meta::CPAN

- 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

Changes  view on Meta::CPAN

- 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

0.416  2015-04-01 09:39 CEST
- t/dispatch/schedule.t: trying to verify with tests that the new schedule
  insert logic really does what we want

0.417  2015-04-02 22:06 CEST
- use TDD to get what we want: POST schedule/new ignores scode value when given
  schedule exactly matches an existing schedule with a different (non-NULL)
  scode

0.418  2015-04-03 09:08 CEST
- SQL: split 'disabled_to_zero' function/triggers into separate variants for
  insert and update; confidently add 'NOT NULL' constraint to 'disabled' fields
- t/sql/disabled_to_zero.t: adapt to current state
- t/model/schedule.t: add notes the way it should have been from the beginning

0.419  2015-04-03 18:06 CEST
- ResourceDefs.pm: change ACL of 'GET schedule/all' so inactives and actives
  can do it, too
- t/dispatch/schedule.t: add appropriate test cases

0.420  2015-04-04 21:18 CEST
- SQL: implement 'not_before_1892' function to enforce sane timestamp policy
  (no dates before 1892 in the database)
- t/: adapt tests; add test cases

0.421  2015-04-05 13:34 CEST
- REST/Shared.pm: in 'shared_get_privsched', return 404 if no priv/schedule
  assigned (instead of returning 200 OK with a null priv/schedule) 
- t/dispatch/schedule.t: adapt tests

0.422  2015-04-05 20:45 CEST
- dbinit_Config.pm: make schedule_at_timestamp return SID instead of the
  schedule JSON itself
- Model/Shared.pm: schedule_by_eid returns SID
- REST/Shared.pm: shared_get_privsched looks up the SID and returns the
  entire schedule
- t/dispatch/schedule.t: adapt tests affected by the above change
- t/sql/disabled_to_zero.t: clean up after ourselves

0.423  2015-04-06 13:42 CEST
- REST/Shared.pm: make shared_employee_acl_part2 declare 403 status with a
  proper App::CELL::Status instead of a hard-coded string

0.424  2015-04-06 18:59 CEST
- ResourceDefs.pm: allow inactives and actives to view their own privilege
  and schedule histories; fix spelling of the word 'schedule' in the 'cli'
  property

0.425  2015-04-06 22:15 CEST
- ResourceDefs.pm, config/sql/: modifications to allow POST (update) on
  'priv/history/phid/:phid' and 'schedule/history/shid/:shid'
- Model/Privhistory.pm, Model/Schedhistory.pm: add update method
- UPDATE privhistory does not work as it should
- tests not running cleanly

0.426  2015-04-07 07:15 CEST
- dbinit_Config.pm: fix bug in 'root_immutable_old' that was causing
  NEW.* values to be replaced with OLD.* on updates
- t/sql/privhistory.t: add test case for the above bug
- t/sql/root.t: replace comments with note()s

0.427  2015-04-07 09:14 CEST
- dbinit_Config.pm: fix DBINIT_MAKE_ROOT_IMMUTABLE triggers that were causing
  UPDATE and DELETE operations to silently fail
- REST/Dispatch.pm: add targets for POST operations on
  'priv/history/phid/:phid' and 'schedule/history/shid/:shid'
- REST/Shared.pm: add 'shared_update_history' routine
- t/dispatch/: adapt tests, add tests

0.428  2015-04-14 15:40 CEST
- REST/Shared.pm: include nick in error message

0.429  2015-04-14 17:06 CEST
- fix bug "GET interval/eid/:eid/:tsrange and interval/nick/:nick/:tsrange
  should work for active employees on themselves"
  https://rt.cpan.org/Ticket/Display.html?id=103538
  http://paste.opensuse.org/7703631

0.430  2015-04-16 10:34 CEST
- fix bug "Unexpected error in t/sql/current.t"
  https://rt.cpan.org/Ticket/Display.html?id=103766
  http://paste.opensuse.org/8781484

0.431  2015-04-16 16:01 CEST
- make "GET interval" operations return the activity code as well as the AID
  to make life easier for clients

Changes  view on Meta::CPAN

- t/dispatch/supervisor.t: add more tests

0.464  2015-07-10 16:50 CEST
- ResourceDefs.pm: change ACL profile of GET lock/eid/:eid/:tsrange
  and GET lock/nick/:nick/:tsrange to 'active', so active employees
  can view their locks and supervisors can view the locks of their
  reports
- t/dispatch/supervisor.t: add more tests

0.465  2015-07-10 17:34 CEST
- t/dispatch/interval_lock.t: do not rely on IID having a particular value,
  since this only holds if/when tests are run in a particular order

0.466  2015-07-12 22:24 CEST
- t/dispatch/supervisor.t: test that inactive supervisors cannot see their
  peons' attendance data

0.467  2015-07-21 15:27 CEST
- REST.pm: define $VERSION in top-level module only
- Adapt to rename of App::Dochazka to App::Dochazka::Common
- release.sh: new release script

0.468  2015-07-21 16:01 CEST
- Update Copyright statement to include 2015
- release.sh: add "osc update"

0.469  2015-07-22 22:17 CEST
- implement new resources:
  - GET employee/eid/:eid/minimal
  - GET employee/nick/:nick/minimal
  - GET employee/sec_id/:sec_id/minimal
- t/dispatch/employee.t: add some basic test cases for the new
  GET employee/.../minimal resources
- t/: adapt test suite to App::Dochazka::Common rename

0.470  2015-07-23 14:50 CEST
- t/dispatch/employee.t: disable tests that broke when employees were allowed to modify their email address
- t/201-LDAP.t: expanded tests
- ResourceDefs.pm: add employee/nick/:nick/ldap resource
- LDAP.pm: make ldap_search() look up a property; implement populate_employee()
- Dispatch.pm: add handler_get_employee_ldap() for GET employee/nick/:nick/ldap
- Auth.pm: populate certain employee attributes from LDAP upon successful LDAP autocreate
- REST_Config.pm: default value for DOCHAZKA_LDAP_POPULATE_MATRIX
- Build.PL: require App::Dochazka::Common 0.191 for "set()" method
- Dispatch.pm: increase granularity of employee/.../minimal ACL check
- No longer auto-generate Makefile.PL

0.471  2015-07-23 16:55 CEST
- t/201-LDAP.t: add simple test cases for GET employee/nick/:nick/ldap
- ResourceDefs.pm: enable PUT on employee/nick/:nick/ldap
- LDAP.pm: fix populate_employee() so it returns not_ok if nick is not in LDAP
- Dispatch.pm: implement handler_get_employee_ldap and handler_put_employee_ldap
- Auth.pm: fix DOCHAZKA_LDAP_AUTOCREATE_AS code path

0.472  2015-07-24 17:06 CEST
- doc: config/REST_Config.pm: tell users to not add a nick property to
  DOCHAZKA_LDAP_POPULATE_MATRIX
- t/: test POST employee/nick without required nick property
- Dispatch.pm: return 400 if POST employee/nick without nick property
  (fixes github issue #2) 
- Dispatch.pm: handler_put_employee_ldap() return 404 if nick not found in LDAP

0.473  2015-07-25 03:45 CEST
- REST_SiteConfig.pm: add config file for overriding Web::MREST core params
  since those are set first
- REST.pm: add a version() package method
- GET version now reports App::Dochazka::REST version instead of Web::MREST
  version (Github issue #3)
- t/sql/disabled_to_zero.t: fix issue where test was not cleaning up after itself
- Dispatch.pm: write a debug message if LDAP is enabled
- MANIFEST: refrain from packaging release script

0.474  2015-07-25 16:33 CEST
- t/001-init.t: skip all tests if PostgreSQL server unreachable
- REST/Test.pm: make initialize_unit() do skip_all if PostgreSQL server unreachable
- ConnBank.pm: catch exceptions in conn_status()
- REST.pm: init() routine is no longer used; move it to REST/Test.pm
- bin/dochazka-rest: enable passing of command-line options to mrest script
  (resolves github issue #4)
- Build.PL: require Web::MREST 0.274 for bin/mrest command-line options
- bin/dochazka-rest: process command-line options using GNU getopt
- REST.pm: update init_no_db() documentation to reflect current state
- release scripting mods

0.475  2015-07-25 16:57 CEST
- Build.PL: set repository and bugtracker URLs

0.476  2015-07-25 17:49 CEST
- REST/Test.pm: use conn_up() instead of conn_status()
- ConnBank.pm: add conn_up() and rewrite conn_status() as a wrapper
- Auth.pm: drop obsolete call to App::Dochazka::REST::init()
- Auth.pm: call App::Dochazka::REST::ConnBank::init_singleton() instead of deprecated App::Dochazka::REST::init()
- ConnBank.pm: make init_singleton() use values from site configuration
- ConnBank.pm: make init_singleton() be idempotent

0.477  2015-07-25 20:13 CEST
- ResourceDefs.pm: change ACL profile to passerby in two places
- config/dispatch_Message_en.conf: fix DISPATCH_KEEP_TO_YOURSELF message which
  was no longer accurate

0.478  2015-07-29 17:22 CEST
- Import normalize_filespec() from Web::MREST::CLI, where it now resides
- Dispatch.pm: do not report passhash and salt back to users

0.479  2015-07-30 14:41 CEST
- Build.PL: require Web::MREST 0.279 for early debugging feature
  Fixes: https://github.com/smithfarm/dochazka-rest/issues/13
- REST.pm: document the early debugging feature
- Test.pm: drop call to init_no_db(); use Web::MREST::init() only
- Dispatch.pm: be more careful with DOCHAZKA_EMPLOYEE_MINIMAL_FIELDS
- REST.pm: drop init_no_db() which is no longer used
- Build.PL: require a more recent version of App::CELL

0.480  2015-07-30 21:56 CEST
- Test.pm: do not send deprecated debug_mode param to Web::MREST::init()
  (fixes build failure in OBS)

0.481  2015-08-01 18:43 CEST
- Model/Shared.pm: add functions from deprecated Util/Timestamp.pm
- Model/{Priv,Sched}history.pm: get_history() is now exported
- Util/Timestamp.pm: drop deprecated module



( run in 0.804 second using v1.01-cache-2.11-cpan-39bf76dae61 )