Revision history for Dochazka-REST

0.001  2014-06-07 22:35 CEST
- start distro using 'module-starter'
- bring in useful scripts from perl-CELL project (release.sh, dev.sh,
  test.sh)
- set license to BSD-3-Clause
- Spec.pm: add technical specification (current state)
- add empty shells: bin/dochazka-rest, REST.pm, Activity.pm, Employee.pm,
  History.pm, Interval.pm, Lock.pm, Policy.pm, Status.pm
- generate a proper README

0.002  2014-06-07 23:07 CEST
- tweak release script
- update MANIFEST (put files in alphabetical order)

0.003  2014-06-09 10:53 CEST
- move outdated top-level README to doc/
- add a new top-level README stub
- git repo cleanup
- t/001-init.t: test for server initialization routine
- REST.pm: start implementing init routine

0.004  2014-06-09 18:23 CEST
- REST.pm: produce a more convincing 'init' method
- t/000-depends.t: check dependencies
- t/001-init.t: unit tests for the 'init' method
- t/pod-coverage.t: check pod only in taxative list of modules (i.e.,
  ignore config/*.pm)

0.005  2014-06-11 10:01 CEST
- REST.pm: add $REST singleton, flesh out init routine

0.006  2014-06-13 15:38 CEST
- add project-web.sh script to update http://dochazka.sourceforge.net
  with contents of Spec.pm
- Spec.pm: work on "intervals" table -- use tsrange and EXCLUDE constraint
  with gist index to exclude overlapping intervals for a given employee
- config/dbinit_Config.pm: fix data_source in DBINIT_CONNECT
- REST.pm: flesh out initialization routine
- t/001-init.t: improve initialization routine unit test
- add missing distro files to MANIFEST
- add auto-generated README file to top-level git repo
- get rid of old OBS CI stuff (moved to archive)

0.007  2014-06-13 21:59 CEST
- config/dbinit_Config.pm: revamp
- REST.pm: add reset_db routine, make separate connect_db routine that can
  connect to any database, add create_tables routine
- t/001-init.t: unit test now drops and re-creates the testing database

0.008  2014-06-19 09:34 CEST
- REST.pm: minor cleanup in connect_db(), init now optionally takes verbose
  parameter (and passes it to $CELL->load)

0.009  2014-06-19 15:51 CEST
- status-strings.pod: Status string verbiage removed from Spec.pm because
  we will not implement status strings in version 1.0
- dbinit_Config.pm: add lots more SQL
- Spec.pm: try to keep documentation in stride with dbinit_Config.pm

0.010  2014-06-19 22:38 CEST
- add more SQL to dbinit_Config.pm
- Spec.pm: keep documenting the table definitions

0.011  2014-06-21 16:51 CEST
- dbinit_Config.pm: AutoCommit default to 1, add nicks table, add
  current_priv SQL function
- employee_Config.pm: add configuration file just for employee 
- t/001-init.t: cleanup
- t/002-insert-employee.t: new tests
- REST.pm: improve create_tables
- Spec.pm: blearily try to write employee-related verbiage

0.012  2014-07-04 02:08 CEST
- t/: add license boilerplate
- t/: rename 002-insert-employee.t to 002-nick.t
- start writing App::Dochazka::REST::Model::Nick
- release.sh: run bash-ism with bash instead of sh

0.013  2014-07-04 10:17 CEST
- Nick.pm: make it a little less naive
- t/002-nick.t: add tests

0.014  2014-07-04 13:37 CEST
- t/002-nick.t: test for non-existent IDs and nicks

0.015  2014-07-04 16:19 CEST
- got rid of Nick as a separate entity after figuring out that a simple
  UNIQUE constraint in the employees table does what I needed
- create_tables now adds superuser employee with admin privs

0.016  2014-07-06 02:37 CEST
- Dochazka_Message_en.conf: add "db not reachable" error message
- break employeehistory table into schedhistory and privhistory
- add a second round of dbinit SQL statements to ensure that the root
  employee is immutable
- Employee.pm: refactoring (WIP)
- Spec.pm: update verbiage
- stored procedure 'current_priv' now returns 'passerby' if current priv
  level cannot be determined
- t/002-root.t: new tests for immutable root employee
- t/003-current-priv.t: new tests for current_priv stored procedure
- t/004-employee.t: skip tests for Employee.pm (WIP)

0.016  2014-07-06 02:41 CEST
- fix MANIFEST

0.017  2014-07-06 22:17 CEST
- refactored Employee.pm
- t/004-employee.pm: new unit tests for Employee.pm
- dbinit_Config.pm: add remark field to employees table

0.018  2014-07-07 12:30 CEST
- config/Dochazka_Config.pm: add comments
- config/employee_Config.pm: add SQL_EMPLOYEE_CURRENT_PRIV
- Employee.pm: _load now resets employee object, start working on ACL
  checks
- t/004-employee.t: finished refactoring old tests

0.019  2014-07-07 14:44 CEST
- REST.pm: implement connect_db_pristine and set DOCHAZKA_EID_OF_ROOT
  site param
- t/: adjust tests for same

0.020  2014-07-07 16:08 CEST
- Employee.pm: implement UPDATE functionality

0.021  2014-07-07 16:48 CEST
- Employee.pm: add accessor functions
- t/004-employee.pm: add tests for accessors

0.022  2014-07-07 19:23 CEST
- remove Policy.pm as it is only a stub and might not be needed
- config/dbinit_Config.pm: make a generalized priv_at_timestamp function
  and change current_priv into a wrapper around that function
- Priv.pm: move priv_by_eid to the new Priv.pm module
- Employee.pm: add 'priv' accessor method, edit POD a little

0.023  2014-07-07 20:35 CEST
- rename Priv.pm to Privhistory.pm
- Privhistory.pm: start working on insert_priv
- t/005-privhistory.t: start implementing privhistory tests

0.024  2014-07-07 21:27 CEST
- fix some nitpicks

0.025  2014-07-08 01:30 CEST
- employee_Config.pm, Employee.pm: eliminate double DBI call by
  including call to current_priv() in SELECT statement
- add stub Timestamp.pm for timestamp-related utilities
- dbinit_Config.pm: make priv_at_timestamp use '<=' instead of '<'
- Privhistory.pm, t/005-privhistory.t: add privhistory_by_eid

0.026  2014-07-08 10:46 CEST
- Employee.pm: make _load return DOCHAZKA_RECORDS_FETCHED when SELECT
  succeeds

0.027  2014-07-08 12:35 CEST
- Employee.pm, t/004-employee.pm: fix buggy eid_by_nick function, export
  it, add test for it
- Spec.pm: write verbiage for employee Perl API current state

0.028  2014-07-08 22:51 CEST
- Privhistory.pm: implementing OO interface to privhistory table
- Factory.pm: add new module under Util/ with 'makereset' function
- Employee.pm: use new makereset function

0.029  2014-07-08 23:46 CEST
- Privhistory.pm: use the new function 'makereset', move priv_by_eid to
  Factory.pm (not sure if it really belongs here, though)
- Factory.pm: refactor makereset

0.030  2014-07-09 00:29 CEST
- Factory.pm, Employee.pm, Privhistory.pm: add and use 'make_spawn'
- t/006-reset.t: add test demonstrating how spawn "validates" the
  attributes provided in PARAMHASH
- Privhistory.pm no longer exports any functions

0.031  2014-07-09 01:32 CEST
- t/005-privhistory.t: add unit tests
- Privhistory.pm: make 'load' trigger warning if nothing found

0.032  2014-07-09 12:09 CEST
- make privhistory SQL statements return int_id where appropriate
- t/005-privhistory.t: add some int_id tests
- start working on a delete method for privhistory objects

0.033  2014-07-09 14:41 CEST
- dbinit_Config.pm: fix valid_sched_intvl trigger, add translate_interval
  function
- Spec.pm: fix date in sample schedule tsrange (year was wrong)
- rename privhistory_Config.pm to priv_Config.pm

0.034  2014-07-09 15:07 CEST
- schedule_Config.pm: add SQL_SCHEDULE_INSERT param
- add stubby Schedule.pm and Schedintvl.pm in lib/Dochazka/REST/Model

0.035  2014-07-09 23:12 CEST
- dbinit_Config.pm: rename translate_interval to translate_schedintvl,
  merge 'schedhistory' table into 'schedules'
- schedule_Config.pm: add definitions for SQL_SCHEDINTVL_INSERT and
  SQL_SCHEDINTVL_SELECT
- add Schedintvl.pm, remove Schedhistory.pm
- Spec.pm: update schedule verbiage to reflect table structure change
- Interval.pm: make a stub class for activity intervals
- t/007-interval.t: add stub unit-test file for interval objects

0.036  2014-07-10 00:48 CEST
- Model/Schedule.pm: fix up boilerplate, flesh out insert method
- Util/Timestamp.pm: add qw( $today $yesterday $tomorrow ) exports
- t/005-privhistory.t: import $today, $yesterday from Timestamp.pm
- rename t/007-interval.t to t/007-schedule.t 
- t/007-schedule.t: import $today, $yesterday from Timestamp.pm, add tests for
  insert method

0.037  2014-07-10 15:57 CEST
- begin implementing new schedules concept (table structure and other
  database artifacts, objects, object methods, unit tests)
- rename Schedintvl.pm to Schedintvls.pm because the object will contain
  all the intervals that make up a single schedule
- for now, the new schedules concept is described in tickets/tickets
  pending re-write of schedule-related verbiage in Spec.pm
- Factory.pm: make_reset function now calls 'populate' method _iff_ there
  is one
- Schedintvls.pm now uses populate method to automatically load a new
  "scratch SID" every time an object is spawned/reset

0.038  2014-07-10 16:32 CEST
- Spec.pm: adjust verbiage to accommodate revamped schedule logic

0.039  2014-07-10 17:31 CEST
- Spec.pm: re-organize sections, add note concerning 'jsonb' type in
  PostgreSQL 9.4
- re-generate project web page http://dochazka.sourceforget.net

0.040  2014-07-11 10:03 CEST
- Schedintvls, t/007-schedule.t: implement basic insert method, start working
  on a translate method
- dbinit_Config.pm, schedule_Config.pm: fix translate_schedintvl

0.041  2014-07-11 15:38 CEST
- schedule_Config.pm: develop SQL_SCHEDINTVLS_SELECT statement
- Schedintvls.pm: rename translate to load, load now succesfully converts
  tsranges array to our more-readable schedule format (but doesn't yet sort
  the array), added json method, started work on sort method
- t/007-schedule.t: add tests for $schedintvls->load

0.042  2014-07-11 20:27 CEST
- schedule_Config.pm: add ORDER BY to SQL_SCHEDINTVLS_SELECT, so the intervals
  come out of the database pre-sorted
- Schedintvls.pm: get rid of sort method
- t/007-schedule.t: insert schedule intervals in reverse chronological order 
  to test sorting functionality

0.043  2014-07-11 22:40 CEST
- dbinit_Config.pm: add remark field to schedules table, fix a small bug
  (round_effective trigger applies to schedhistory table, not schedules)
- schedule_Config.pm: tweak param names, fix SQL_SCHEDULE_INSERT, add
  SQL_SCHEDULE_SELECT
- Schedule.pm: fix attributes, revamp insert method
- t/007-schedule.t: add seven more unit tests

0.044  2014-07-12 22:08 CEST
- schedule_Config.pm: add SQL_SCHEDHISTORY_INSERT,
  SQL_SCHEDHISTORY_SELECT_ARBITRARY, and SQL_SCHEDHISTORY_SELECT_CURRENT
- Schedintvls.pm: add debugging code to populate method
- t/007-schedule.pm: add unit tests for $schedhistory->insert,
  $schedhistory->load

0.045  2014-07-13 09:26 CEST
- schedule_Config.pm: make two schedule SELECT statements: "select sid
  given schedule" and "select schedule given sid"
- Schedule.pm: get rid of load method, add get_json exported function
- t/007-schedule.pm: add tests for get_json

0.046  2014-07-13 10:20 CEST
- Schedintvls.pm: cleanup; put translated intervals into a separate attribute,
  $self->{schedule}, instead of overwriting $self->{intvls}

0.047  2014-07-13 11:08 CEST
- schedule_Config.pm, Schedintvls.pm, t/007-schedule.t: implement and test
  delete method for Schedintvls objects
- Spec.pm: clarifications

0.048  2014-07-13 11:46 CEST
- Spec.pm: write up the "Privilege levels in the Perl API" section

0.049  2014-07-13 13:12 CEST
- tickets/tickets: add new tickets, clean up old tickets
- regenerate project webpage
- REST.pm: rename init -> init_no_db and make a new 'init' that "does
  everything", including connecting to the database
- t/: adjust tests to use the new 'init' and 'init_no_db' methods

0.050  2014-07-13 16:15 CEST
- dbinit_Config.pm: implement schedule_at_timestamp and current_schedule stored
  procedures
- employee_Config.pm: have SELECTs get employee's current_schedule
- t/007-schedule.t: test for presence of schedule attribute in employee object

0.051  2014-07-13 16:55 CEST
- employee_Config.pm: add SQL_EMPLOYEE_SCHEDULE_AT_TIMESTAMP and
  SQL_EMPLOYEE_CURRENT_SCHEDULE
- REST.pm: add 'eid_of_root' method
- Employee.pm: add 'schedule' accessor
- Factory.pm: add 'schedule_by_eid' function
- t/002-root.t: add several 'eid_of_root' unit tests 
- t/004-employee.t: clean up, add more tests

0.052  2014-07-13 20:27 CEST
- Spec.pm: update to reflect current state of code
- dbinit_Config.pm, Schedintvls.pm, t/007-schedule.t: minor cleanup

0.053  2014-07-13 22:24 CEST
- dbinit_Config.pm: add activities and intervals tables
- Spec.pm: work on Activities, Intervals, and Locks sections

0.054  2014-07-14 10:08 CEST
- Activity.pm: adapt existing code from Employee.pm
- rename 'name' column to 'code' in 'activities' table
- activity_Config.pm: new file

0.055  2014-07-14 12:10 CEST
- Spec.pm: change L<...> to C<...> to avoid pod2html's annoying practice of
  rendering the links as "the ... manpage"
- bin/dochazka-rest: add license boilerplate
- moved 'cud' subroutine into new module App::Dochazka::REST::Model::Shared
  to avoid code duplication in Activity.pm and Employee.pm
- t/008-activity.t: add stub for activity-related unit tests
- config/Dochazka_Message_en.conf: add a DOCHAZKA_DBI_ERR message for
  reporting DBI errors
- config/employee_Config.pm: add SQL_EMPLOYEE_DELETE

0.056  2014-07-14 12:43 CEST
- Spec.pm: cleanup
- config/Dochazka_Config.pm: add DOCHAZKA_ACTIVITY_DEFINITIONS
- REST.pm: have 'create_tables' insert initial set of activities

0.057  2014-07-14 12:59 CEST
- config/Dochazka_Messages.conf: remove colon from DOCHAZKA_DBI_ERR
- model/Shared.pm: fix bug in cud (wasn't returning err status on DBI err)
- t/008-activity.t: add lots of unit tests

0.058  2014-07-14 15:59 CEST
- activity_Config.pm: add 'upper' safeguards to make sure no lower-case
  activity code makes it into the database, yet to accept lower-case in 
  SELECTs
- dbinit_Config.pm: add 'code_to_upper' trigger on activities table,
  split off valid_intvl from valid_schedintvl so it can be applied to 
  both 'schedintvls' and 'intervals'
- Spec.pm: update to reflect latest code
- t/008-activity.t: add more unit tests

0.059  2014-07-14 16:24 CEST
- Privhistory.pm: block in 'get_privhistory' function
- rename t/008-activity.t to t/009-activity.t
- add stub t/008-schedintvls.t for testing "illegal" schedintvls

0.060  2014-07-14 20:38 CEST
- REST.pm: put 'create_tables' SQL incantations into a transaction
- Schedintvls: put 'insert' SQL incantations into a transaction that
  gets rolled back if any of the intervals are bad
- t/008-schedintvls.t: test with bogus intervals, test that no 
  intervals are inserted if any of them are bad

0.061  2014-07-15 11:06 CEST
- t/001-init.t: make diagnostic messages more useful
- config/sql/interval_Config.pm: new SQL for use in Interval.pm
- Interval.pm: start developing the stub into something useful
- dochazka_Config.pm: add DOCHAZKA_ADVANCE_INTERVALS_MAX_DAYS
- dbinit_Config.pm: rename intervals.int_id to intervals.iid (Interval ID)
- REST.pm: revamp 'try' code block in 'create_tables'
- Activity.pm, Employee.pm: use new best practice for 'cud' calls
- Privhistory.pm, Schedhistory.pm: rewrite insert and delete methods to use 'cud'
- Schedule.pm: rewrite insert method to use 'cud'
- Shared.pm: add 'open_transaction' and 'close_transaction', revamp 'cud' to use
  Try::Tiny

0.062  2014-07-15 13:17 CEST
- make adjustments so test suite succeeds even if PostgreSQL server not
  present

0.063  2014-07-15 16:56 CEST
- dbinit_Config.pm, REST.pm: get rid of DBINIT_AUTOCOMMIT
- dbinit_Config.pm, Dochazka_Config.pm, REST.pm: use DOCHAZKA_DBNAME
  instead of DBINIT_DBNAME
- REST.pm: reset_db now drops/re-creates 'dochazka' user and grants all
  dochazka database privileges to that user, 'create_tables' runs as 
  user 'dochazka'
- REST.pm: connect_db_pristine takes full PARAMHASH

0.064  2014-07-15 17:48 CEST
- more modifications to ensure test suite doesn't fail on build workers and
  other automatons (CPAN Testers, Open Build Service)

0.065  2014-07-15 18:00 CEST
- rename to App::Dochazka::REST

0.066  2014-07-15 18:02 CEST
- fix current_ver.plx and prepare release script for CPAN

0.067  2014-07-15 22:36 CEST
- dbinit_Config.pm: fix 'intervals' table definition
- interval_Config.pm, Interval.pm: add missing 'long_desc' everywhere
- t/010-interval.t: start unit test file for activity intervals
- move priv_by_eid and sched_by_eid functions from Factory.pm to Shared.pm,
  populate 'aclpriv' attribute in each function that consults it, instead of in
  Factory.pm->make_reset
- POD cleanup
- Util/Timestamp.pm, t/011-tsrange_equal.t: add tsrange_equal function
- Util/Timestamp.pm, t/: split $today into two ($today and $today_ts), and
  do the same for $yesterday and $tomorrow -- hopefully this makes the code
  _less_ complicated

0.068  2014-07-16 08:35 CEST
- Build.PL: add DBD::Pg and DBI dependencies

0.069  2014-07-16 22:11 CEST
- move 'make_spawn' and 'reset' from Util/Factory.pm to Model/Shared.pm,
  delete Util/Factory.pm

0.070  2014-07-17 11:42 CEST
- Shared.pm, REST.pm: get rid of open_transaction and close_transaction as they
  don't work as expected
- Schedintvls.pm, t/007-schedule.t: revamp 'delete' method
- Dochazka_Message_en.conf: add DOCHAZKA_RECORDS_DELETED

0.071  2014-07-17 21:37 CEST
- dbinit_Config.pm: add locks table
- Spec.pm: work on Lock section
- Interval.pm: make load_by_iid also load the long_desc, add 'update' and 
  'delete' methods
- Lock.pm: first crack at lock data model
- Activity.pm: fix order of attributes in update and make delete reset the 
  object on success

0.072  2014-07-17 21:42 CEST
- MANIFEST: minor fix

0.073  2014-07-18 08:19 CEST
- Schedule.pm: add an untested 'delete' method
- Privhistory.pm, Schedhistory.pm, Schedintvls.pm: add 'no update method' verbiage
- Shared.pm: when croaking on odd number of arguments, stringify the actual
  arguments and include them in the error message
- t/009-activity.pm: add tests for 'update' method

0.074  2014-07-18 08:39 CEST
- Build.PL: add another missing dependency (JSON.pm)

0.075  2014-07-18 09:44 CEST
- now that App::Dochazka::REST is on CPAN, and since Spec.pm was getting to
  be too big, make the following documentation changes:
  - break out the "... in the database" and "... in the Perl API" sections
    into the respective data model modules under C<App::Dochazka::REST::Model>
  - move the rest of the Spec.pm verbiage into L<App::Dochazka::REST>

0.076  2014-07-18 10:20 CEST
- MANIFEST: update to reflect current state
- REST.pm, Privhistory.pm, Schedhistory.pm: work on POD

0.077  2014-07-18 13:16 CEST
- REST.pm: POD cleanup
- Interval.pm: add missing POD verbiage
- release.sh: attempt to fix minor brokenness that sometimes causes version
  numbers to get messed up when switching from one development machine to
  another
- Shared.pm: add 'noof' function
- t/001-init.t: add comments and two unit tests
- t/003-current_priv.t, t/004-employee.t: rework tests, clean up database
  when done

0.078  2014-07-18 13:43 CEST
- Privhistory.pm, etc.: change privhistory.int_id to privhistory.phid
- Schedhistory.pm, etc.: change schedhistory.int_id to schedhistory.shid
- schedule_Config.pm: add missing SQL_SCHEDHISTORY_DELETE parameter

0.079  2014-07-18 16:13 CEST
- schedule_Config.pm: add SQL_SCHEDULE_SELECT and SQL_SCHEDULE_DELETE
- Schedule.pm: fix bug in 'delete' method, implement 'load_by_sid' method
- t/: clean up several unit test files (unit test files no longer leave
  any database artifacts behind, so each one starts from a clean slate
  and can be run independently)

0.080  2014-07-19 18:03 CEST
- lock_Config.pm, t/012-lock.t: add the beginnings of some SQL and unit tests
  for lock objects
- privhistory_Config.pm: add SQL_PRIVHISTORY_SELECT_BY_PHID and
  SQL_PRIVHISTORY_SELECT_RANGE
- Privhistory.pm, t/005-privhistory.t: add load_by_phid method and get_privhistory function
- Timestamp.pm: add untested functions 'split_tsrange' and 'canonicalize_ts'

0.081  2014-07-21 09:08 CEST
- minor edit to bump version number as PAUSE refuses to accept version 0.080

0.082  2014-07-21 19:44 CEST
- Build.PL: add another dependency to appease CPAN Testers
- bin/*, config/dochazka-rest.psgi, Resource.pm: start working on executable
  for starting the server

0.083  2014-07-22 10:18 CEST
- dochazka-rest.psgi: minimize
- Resource.pm: add POD, work on 'resource_exists' (path dispatcher)
- Dispatch.pm: put path dispatch state machine into separate module

0.084  2014-07-22 14:32 CEST
- bin/dochazka-rest: rework into standalone server startup script
- t/301-psgi.t: start testing web server functionality
- REST.pm: add POD re: starting server and authentication, include PSGI
  $app coderef in $REST singleton
- config/Dochazka_Config.pm, Resource.pm: add DOCHAZKA_REST_HTML param
  defining the HTML displayed when someone accesses the server from a
  browser
- Resource.pm: enable HTTP Basic Authorization for authentication, using a
  hard-coded dummy username/password pair for now
- Build.PL, t/000-dependencies.t: update dependencies

0.085  2014-07-23 09:12 CEST
- t/000-depends.t: fix bug (wrong number of tests)
- dispatch_Message_en.conf: new file for path dispatch messages
- Dispatch.pm: work on '_get_response'
- Resource.pm: use 'expurgate' method (new in App::CELL::Status 0.194)
- t/301-dispatch.t: rename from 301-psgi.t and add unit tests

0.086  2014-07-23 09:40 CEST
- REST.pm, Dispatch.pm: document request syntax

0.087  2014-07-23 11:16 CEST
- Dochazka_Config.pm: improve default HTML (DOCHAZKA_REST_HTML)
- t/301-dispatch.t: add unit tests
- Dispatch.pm: remove SYNOPSIS so the meat of the POD starts higher up on
  the page
- obs.sh: add OBS CI script

0.088  2014-07-23 12:53 CEST
- bin/dochazka-rest: load the local sitedir
- REST.pm: explain current installation/bootstrap process in detail in the
  "INSTALLATION" section

0.089  2014-07-23 15:19 CEST
- config/Dochazka_Config.pm: add DOCHAZKA_URI_MAX_LENGTH
- REST.pm: work on "REST INTERFACE" POD
- Dispatch.pm: fix methods so they all set "extraneous_url_part" if
  appropriate
- Resource.pm: add uri_too_long method
- t/: rename 301-dispatch.t to 301-resource.t and split off 330-dispatch.t
  from it, test uri_too_long in 301-resource.t

0.090  2014-07-23 17:23 CEST
- Employee.pm: add 'expurgate' and 'select_multiple_by_nick' methods
- Dispatch: add '/lookup/employee/nick' request (doesn't quite work yet)
- remove all mentions of 'acleid' and 'aclpriv' from data model;
  authorization will take place at the web resource level

0.091  2014-07-23 23:08 CEST
- Employee.pm: finally find and fix problem with 'expurgate'
- t/004-employee.t: add tests for expurgate method
- REST.pm: get rid of $REST singleton: 'init' now acts as a constructor
  returning an object
- lots of modifications to all files to make them work without $REST singleton

0.092  2014-07-24 08:12 CEST
- Dispatch: deprecate '_get_response' in favor of 'is_auth' which will be
  called from Response.pm->is_authorized

0.093  2014-07-24 08:18 CEST
- Build.PL: require perl 5.012 (RT#97442 -- thanks, Slaven!)

0.094  2014-07-24 10:52 CEST
- bin/: eliminate $REST singleton
- /version now reports whether server is UP or DOWN

0.095  2014-07-24 11:58 CEST
- config/: DOCHAZKA_REST_HTML is now a message, no longer a site param,
  and it also newly reports the version number and server status
- dbh.pm: add 'status' routine that reports database server status
- Dispatch.pm: use the new dbh.pm->status routine in '_version'
- Resource.pm: use the new dbh.pm->status routine in 'render_html'

0.096  2014-07-24 14:19 CEST
- Employee.pm: revamp load_by_nick and load_by_eid
  so they now work as both instance and class methods
- Schedintvls.pm: fix parentage and use dbh.pm->dbh method
- Shared.pm: spawn no longer sticks dbh into objects
- Resource.pm: use $CELL->msg in render_html
- t/: update tests to current state

0.097  2014-07-24 15:37 CEST
- bin/dochazka-rest: force Plack::Middleware::StackTrace to be used on
  _all_ errors
- Resource.pm: make the server display HTML by default, with the
  JSON response embedded in the HTML

0.098  2014-07-24 17:49 CEST
- Resource.pm, Dispatch.pm: finished converting to 'is_auth',
  eliminated deprecated 'resource_exists' and '_get_response'
  routines, added a 'forbidden' request that always triggers a
  403

0.099  2014-07-25 14:50 CEST
- config/Dochazka_Config.pm: add DOCHAZKA_URI and DOCHAZKA_DOCUMENTATION_URI
  site params
- REST.pm: work on POD
- Dispatch.pm: a flurry of modifications
- Resource.pm: change $self->{'context'} into a hashref, implement a _push
  method to make it easy to add to it
- t/: disable all data model tests except 001-init.t, tests can be activated by
  setting an environment variable

0.100  2014-07-25 17:19 CEST
- added CSS to our HTML template to enable line wrapping in <pre></pre>
  blocks
- Build.PL: require Path::Router 

0.101  2014-07-26 23:24 CEST
- Resource.pm, Dispatch.pm: major revamp to implement Path::Router
- Resource.pm, Dispatch.pm, LDAP.pm: authentication
- Dispatch/Employee.pm: get ready for each resource to have its own controller
  (dispatch) module
- Employee.pm: authentication
- t/: update tests to current state, add some HTTP tests

0.102  2014-07-27 19:18 CEST
- each major resource will have its own controller, e.g.: 
  App::Dochazka::REST::Dispatch::Employee
- each controller will inherit from App::Dochazka::REST::Dispatch, 
  where the 'init' method will also run the 'init' methods in 
  all of its sub-controllers (taken from the DISPATCH_CONTROLLERS
  site param)
- implement separate Path::Router instances for GET, POST, etc.

0.103  2014-07-27 20:42 CEST
- Resource.pm, Dispatch.pm, Dispatch/Employee.pm: separate router accessor and
  router initialization routines so there are separate routers for each HTTP
  method (just 'GET' and 'POST' for now) -- this is necessary to be able to 
  handle a GET request for, e.g., '/employee/nick/bud' differently than a
  POST request for the same path/resource

0.104  2014-07-27 21:03 CEST
- add GET route /employee/eid/:param

0.105  2014-07-27 22:44 CEST
- move 'authenticate' from Model/Employee.pm to Resource.pm and rename to
  '_authenticate')
- Dispatch/Employee.pm: add default GET target
- cleanup
- t/: rename data model tests to 1??-something.t and tweak them so they run
  cleanly again

0.106  2014-07-28 10:26 CEST
- cleanup
- put current employee object in request context
- Resource.pm, Dispatch*: send entire context to targets and let them pick out
  what they need from it

0.107  2014-07-28 12:16 CEST
- add core dependencies to Build.PL
- clean up test suite
- t/: fix 3?? tests so they don't break builds in OBS

0.108  2014-07-28 13:16 CEST
- Resource.pm: expurgate employee objects (to remove passhash and salt)
  before displaying them; if DOCHAZKA_DEBUG environment variable is set,
  display the entire context, otherwise display 'entity' only
- Model/Employee.pm: make 'expurgate' method delete 'passhash' and 'salt'
  attributes
- Dispatch/Employee.pm: make 'employee/nick/:param' resource return 
  an array only when the search finds more than one employee

0.109  2014-07-28 14:28 CEST
- bring back 'employee/current' resource
- fix 'link' attribute displayed for each resource by '_get_default' targets

0.110  2014-07-28 16:23 CEST
- working on LDAP authentication

0.111  2014-07-28 21:12 CEST
- work on LDAP authentication
- add a 'privhistory' resource
- start working on 'privhistory/current' and 'privhistory/current/:tsrange'
  resources, implement ACL restriction ('active' and 'admin' only)
- t/332-dispatch-privhistory.t: add tests for 'privhistory' resource, including
  test of ACL restriction

0.112  2014-07-28 22:25 CEST
- Privhistory.pm: fix bug "when handed a backwards tsrange, get_privhistory
  returns 0 records instead of returning DOCHAZKA_DBI_ERR as it should"
- test for the bug

0.113  2014-07-29 09:46 CEST
- REST.pm: work on POD (Request-response cycle)

0.114  2014-07-29 17:51 CEST
- LDAP auth
- privhistory resource
- Model/Employee.pm: implement true/false 'nick_exists' exported function

0.115  2014-07-30 09:08 CEST
- Model/Privhistory.pm: fix bug "DBI errors should not include file and line
  number in 'catch' block of 'get_privhistory' routine"
- Model/Employee.pm: add 'eid_exists' exported function; rewrite 'nick_exists';
  revise load_by_nick, load_by_employee, and _load methods
- Dispatch/Privhistory.pm: add 'privhistory/nick' and 'privhistory/eid' 
  resources 

0.116  2014-07-30 14:19 CEST
- LDAP.pm: get rid of 'Argument "Net::LDAP::LDAP_SUCCESS" isn't numeric'
  warning (not clear how to properly use this constant); when searching
  for the user's DN, check 'uid', 'cn', and 'email' fields for matches,
  instead of just 'uid'
- rename DOCHAZKA_BASIC_AUTH_REALM for clarity and turn it into a site
  configuration parameter so it can be overrided

0.117  2014-07-30 15:53 CEST
- Dispatch/Employee.pm: add proper ACL checks to 'employee/nick' and
  'employee/eid'
- Dispatch/ACL.pm: put ACL check code into a separate module
- Test.pm: put some common testing code into a separate module

0.118  2014-07-30 17:04 CEST
- resolve two tickets re: "get database handle from parent and eliminate it
  from function/method calls"

0.119  2014-07-31 02:25 CEST
- revamp ACL model: ACL profile of resource is now in the 'defaults'
  attribute of the route object. ACL check reduced to four lines of
  boilerplate code that are included in each target.

0.120  2014-07-31 03:33 CEST
- add 'employee/count' and 'employee/count/:priv' resources

0.121  2014-07-31 09:06 CEST
- Resource.pm: add log messages to _authenticate routine

0.122  2014-07-31 09:27 CEST
- another ACL revamp: do the ACL check in Resource.pm->forbidden, eliminate
  boilerplate code in targets

0.123  2014-07-31 15:23 CEST
- allow site admin to set nick-to-LDAP mapping (DOCHAZKA_LDAP_NICK_MAPPING)

0.124  2014-07-31 15:38 CEST
- resolve ticket "make LDAP auth switchable so unit testing scripts can
  disable it" by adding META_DOCHAZKA_UNIT_TESTING meta param and testing
  for it in Resource.pm
- LDAP.pm now exports the ldap_exists and ldap_auth functions

0.125  2014-07-31 16:33 CEST
- t/000-depends.t: add dependency on Params::Validate
- Build.PL: build_require Test::Fatal, require Params::Validate
- Model/Activity.pm: add parameter validation code

0.126  2014-08-01 13:23 CEST
- Model/Activity.pm: load_by_code, load_by_aid, _load now use "best practices"
  established in Model/Employee.pm
- start adding parameter validation code using Param::Validate
- start adding unit tests for the new parameter validation code

0.127  2014-08-01 17:07 CEST
- cleanup, validate parameters, add some tests that call functions with
  invalid parameters

0.128  2014-08-01 18:21 CEST
- Model/Activity.pm, Model/Shared.pm: moved '_load' to shared so code can
  be re-used

0.129  2014-08-01 18:54 CEST
- Model/Employee.pm: use the new Shared.pm->load routine
- Model/Activity.pm, Model/Employee.pm: eliminate deprecated _load routines
- t/: update tests to current state

0.130  2014-08-01 19:09 CEST
- Model/Schedule.pm, Model/Shared.pm: use shared 'load' routine for schedules
- t/: update tests to current state

0.131  2014-08-02 16:34 CEST
- Shared.pm: modify 'cud' and 'load' so they take named parameters, add
  parameter validation, add a 'make_accessor' routine
- t/004-shared-paramvalid.t: elicit lots of fatal errors from Model/Shared.pm
- Model/: remove all database ping checks (replaced by a single line in
  dbh.pm), adapt all calls to 'cud' and 'load', replace a lot of spaghetti code
  with boilerplate
- t/: adapt tests to current state

0.132  2014-08-02 23:51 CEST
- dynamically generate routers and default targets from site configuration in
  dispatch_GET_Config.pm (WIP)

0.133  2014-08-04 10:29 CEST
- dynamic generation of resources now works, in a global sense, but some 
  individual resources are broken

0.134  2014-08-04 12:12 CEST
- REST.pm: enable setting of 'debug_mode' in init routine
- Model/Employee.pm: 'select_multiple_by_nick' always return payload with
  result_set and search_key, even when result_set is empty
- Dispatch/Employee.pm: simplify target routines
- Dispatch/Shared.pm: fix bug in make_get_default that was causing empty
  resource list when generating HTTP request via Plack::Test
- add some calls to $log->debug
- Test.pm: add 'status_from_json' method to facilitate testing of HTTP
  response
- t/330-dispatch.t: add a bunch of tests that examine the HTTP responses
  returned when various resources are requested

0.135  2014-08-04 15:55 CEST
- t/330-dispatch.t: fill in missing tests of HTTP response content
- t/331-dispatch-employee.t: fill in missing tests of HTTP response content
- t/332-dispatch-privhistory.t: fill in missing tests of HTTP response content
- Dispatch/Privhistory.t: refactor targets so they make more sense
- Model/Privhistory.t: work on get_privhistory routine
- t/105-privhistory.t: update to reflect current code 

