Revision history for App-Dochazka-CLI 0.001 2014-08-08 14:09 CEST - first public release of embryonic CLI script 0.002 2014-08-08 14:17 CEST - break parser out into a module 0.003 2014-08-08 14:31 CEST - debugging 0.004 2014-08-08 15:35 CEST - CLI.pm: add DESCRIPTION section to POD 0.005 2014-08-10 14:45 CEST - fix bug "init routine not loading App-Dochazka-CLI sharedir" - expand GET EMPLOYEE command: - GET EMPLOYEE still returns current employee - GET EMPLOYEE $INTEGER returns employee with EID $INTEGER - GET EMPLOYEE $STRING returns employee with nick $STRING - GET EMPLOYEE $STRING-CONTAINING-% runs a 'LIKE' search for multiple employees - add ReadLine/History support using Term::ReadLine::Perl5 - split off 'send_req' routine into new App::Dochazka::CLI::HTTP module - fix bug "'get employee NON-EXISTENT-NICK' should produce an error message; instead, it says 'undef'" 0.006 2014-08-10 18:37 CEST - Build.PL: add dependency HTTP::Cookies - bin/dochazka-cli: use App::Dochazka::Model::Employee instead of inheriting from it - HTTP.pm: construct LWP::UserAgent object with cookie_jar - config/CLI_Config.pm: make a proper _Config.pm file for the application 0.007 2014-08-10 20:12 CEST - bin/dochazka-cli: prompt for nick/password if not given in site configuration - HTTP.pm: add 'init_ua' and 'cookie_jar' functions, use nick/password prompted from user if not given in site config - Parser.pm: add GET COO[KIES] - Build.PL: update dependencies 0.008 2014-08-10 22:51 CEST - fix bug "bin/dochazka-cli throws 'Odd number of arguments' error at startup" 0.009 2014-08-10 22:56 CEST - Parser.pm: add GET SES[SION] 0.010 2014-08-11 16:15 CEST - goodbye 'Term::ReadLine::Perl5' (depends on 'rlib' which cannot be packaged due to licensing issues), hello 'Term::ReadLine::Gnu' 0.011 2014-10-17 23:01 CEST - Build.PL: add Getopt::Long dependency - get user and password from command-line options instead of from site configuration 0.012 2014-10-18 10:06 CEST - process command-line options: 'help', 'user', 'password' - add dependencies: Getopt::Long, Pod::Usage - log to $HOME/.dochazka-cli.log by default, user can override in /etc/dochazka-cli - prompt for password if none specified on command line 0.013 2014-10-19 07:55 CEST - CLI.pm: document commands and their syntax - Parser.pm: work on top-level GET commands 0.014 2014-10-19 08:44 CEST - move command POD to Parser.pm where it belongs - Parser.pm: add a couple more top-level GET commands 0.015 2014-10-19 13:35 CEST - HTTP.pm: fix send_req so it is capable of sending requests with methods other than GET - Parser.pm: add PUT and PUT HELP commands 0.016 2014-10-19 13:53 CEST - HTTP.pm, Parser.pm: cleanup 0.017 2014-10-19 22:33 CEST - implement more resources 0.018 2014-10-20 08:32 CEST - Parser.pm: fix brokenness in 'GET WHOAMI' and 'PUT EMPLOYEE' 0.019 2014-10-20 17:23 CEST - Parser.pm: fix a silly bug 0.020 2014-10-20 22:09 CEST - Parser.pm: add 'GET CURRENT PRIV' command - bin/dochazka-cli: fix privilege brokenness; add status text to command output 0.021 2014-10-21 10:44 CEST - Parser.pm: add 'GET EMPLOYEE COUNT' and get rid of conflicting 'GET EMPLOYEE [STRING]' 0.022 2014-10-21 16:26 CEST - bin/dochazka-cli: show response body on NOTICE status as well as OK - HTTP.pm: explicitly import GET PUT POST DELETE from HTTP::Request::Common - Parser.pm: properly implement 'metaparam/:param' and 'not_implemented' resources 0.023 2014-10-21 22:24 CEST - Parser.pm: fix $anything regex variable; support 'forbidden' resource; add other missing top-level resources so now all are supported 0.024 2014-10-22 16:42 CEST - Parser.pm: add POST EMPLOYEE EID command 0.025 2014-10-23 10:55 CEST - Parser.pm: eliminate "POST METAPARAM"; fix "DELETE METAPARAM" so it will actually work if/when implemented in the REST server 0.026 2014-10-23 13:54 CEST - Parser.pm: make $anything really be anything; add "POST DOCU [RESOURCE]" command 0.027 2014-10-24 10:58 CEST - complete development workflow for employee resources - Parser.pm: add missing documentation and commands 0.028 2014-10-24 15:27 CEST - Parser.pm: add privhistory commands 0.029 2014-10-24 22:34 CEST - bin/dochazka-cli: fix bug "hitting ENTER at CLI prompt causes over a screenful of error messages to be displayed" - Parser.pm: document and implement commands: - PUT PRIVHISTORY EID - PUT PRIVHISTORY NICK - DELETE PRIVHISTORY EID - DELETE PRIVHISTORY NICK 0.030 2014-10-25 12:05 CEST - bin/dochazka-cli: write a proper SYNOPSIS; add an optional 'sitedir' command-line option; fix bug "dochazka-cli refuses to start unless /etc/dochazka-cli directory exists and contains an empty file named CLI_SiteConfig.pm" 0.031 2014-10-25 23:20 CEST - Parser.pm: decide to move CLI documentation into REST resources; start eliminating POD and streamlining the code; change 'privhistory' to 'priv' 0.032 2014-10-26 22:31 CET - Parser.pm: embark on significant redesign of parse_tokens routine (WIP) 0.033 2014-10-27 09:35 CET - Parser.pm: continue with wholesale refactor to make the parser more efficient and maintainable 0.034 2014-10-27 12:45 CET - Parser.pm: initial refactor complete; start (manual) testing 0.035 2014-10-27 13:09 CET - Parser.pm: fix broken 'docu' command 0.036 2014-10-27 14:26 CET - Parser.pm: tweak comments; fix "priv/current", "priv/eid/:eid/?:ts", and "/priv/nick/:nick/?:ts" resource handlers 0.037 2014-10-27 17:49 CET - Parser.pm: fix 'priv' handlers 0.038 2014-10-28 09:29 CET - Parser.pm: handle activity resources; add '$method activity all' commands 0.039 2014-10-29 09:31 CET - Parser.pm: support 'activity/all/disabled' resource 0.040 2014-10-29 10:31 CET - Parser.pm: support 'activity/aid/:aid' 0.041 2014-10-29 13:50 CET - Parser.pm: support PUT and DELETE requests for 'activity/aid/:aid' 0.042 2014-10-29 16:40 CET - Parser.pm: support "/activity/code/:code" 0.043 2014-10-29 22:53 CET - Parser.pm: support POST on 'activity/aid/:aid' and 'activity/code/:code', even if just to verify 405 result 0.044 2014-10-30 18:20 CET - Parser.pm: support 'activity/aid' and 'activity/code' resources 0.045 2014-10-31 21:20 CET - Parser.pm: support 'docu/html' resource; fix 'post activity aid' command 0.046 2014-11-03 12:19 CET - Parser.pm: change '/priv/current/...' and '/priv/history/current/...' to '/priv/self/...' and '/priv/history/self/...', respectively 0.047 2014-11-03 13:06 CET - Parser.pm: cleanup and add 'activity/help' 0.048 2014-11-03 15:54 CET - Parser.pm: support "/schedule/eid/:eid/?:ts", "/schedule/help", "/schedule/nick/:nick/?:ts", and "/schedule/self/?:ts" resources 0.049 2014-11-04 09:54 CET - Parser.pm: activate '$method schedule history ...' commands; put some stanzas into alphabetical order by resource name 0.050 2014-11-04 11:30 CET - Parser.pm: support 'schedule/intervals' and 'schedule/intervals/:shid' resources 0.051 2014-11-04 17:46 CET - Parser.pm: 'schedule/intervals' JSON body might start with either { or [ 0.052 2014-11-05 10:28 CET - Parser.pm: support 'schedule/all' and 'schedule/all/disabled' resources 0.053 2014-11-06 16:35 CET - Parser.pm: support '/schedule/sid/:sid' resource 0.054 2014-11-13 22:22 CET - Parser.pm: make 'employee/self' and 'employee/self/priv' be synonyms for 'employee/current' and 'employee/current/priv', respectively 0.055 2014-11-14 10:06 CET - Parser.pm: handle POST requests on 'employee/{current,self}' 0.056 2014-11-19 09:43 CET - Parser.pm: let parser recognize '$method interval help' and '$method interval new' 0.057 2014-11-19 11:06 CET - Parser.pm: handle more interval resources 0.058 2014-11-19 11:27 CET - Build.PL: admit two important dependencies 0.059 2014-11-19 15:13 CET - Parser.pm: handle 'interval/self/:tsrange' resource 0.060 2014-11-19 22:55 CET - Parser.pm: Resources.pm no longer accepts non-hash JSON - adapt 'post docu' and 'post docu html' to wrap argument in { "resource" : ... } 0.061 2014-11-20 13:59 CET - Parser.pm: handle both 'metaparam' and 'metaparam/:param' after split 0.062 2014-11-20 18:14 CET - Parser.pm: handle lock resources 0.063 2014-12-03 22:24 CET - Parser.pm: support the new 'dbstatus' top-level resource 0.064 2014-12-10 09:07 CET - Parser.pm: '/schedule/new' was missing - add it 0.065 2014-12-12 16:41 CET - do battle with UTF-8 problem 0.066 2014-12-12 17:31 CET - Parser.pm: handle 'interval/summary/?:qualifiers' resource 0.067 2014-12-30 18:32 CET - add an '-n' option to disable authentication so we can use App::Dochazka::CLI with Web::MREST 0.068 2014-12-30 21:22 CET - HTTP.pm: change how we process the response body, to better handle various scenarios 0.069 2014-12-31 16:07 CET - HTTP.pm: include Web::Machine trace in our output 0.070 2014-12-31 22:58 CET - Parser.pm: pass request entity (if any) on 'help' to the server 0.071 2015-01-05 15:59 CET - HTTP.pm, bin/dochazka-cli: expose Location header and "real" HTTP status code - Parser.pm: implement 'test/post_is_create/:bool' 0.072 2015-01-06 13:28 CET - introduce DOCHAZKA_CLI_SUPPRESSED_HEADERS site param and including a listing of all non-suppressed headers with each response 0.073 2015-01-10 08:30 CET - Parser.pm: support bare 'test' URI path 0.074 2015-01-13 18:28 CET - Parser.pm: adapt to new 'param/:type/:param' resource 0.075 2015-01-14 06:13 CET - Parser.pm: enable 'docu/text' resource 0.076 2015-01-15 09:23 CET - Parser.pm: 'docu/...' fix code for adding missing double-quotes; 'param/...' do not attempt to add missing double quotes 0.077 2015-01-21 06:46 CET - (CLI) HTTP.pm: make send_req die on error 0.078 2015-01-29 21:13 CET - CLI: start migrating dochazka-cli to Web::MREST 0.079 2015-01-30 17:40 CET - Parser.pm: separate 'employee/current' from 'employee/self' 0.080 2015-02-02 10:13 CET - bin/dochazka-cli: tweak how responses are displayed 0.081 2015-02-02 11:16 CET - Parser.pm: enable queries like ->get docu "foobar"<- 0.082 2015-02-02 15:22 CET - bin/dochazka-cli: handle common failure scenarios "connection refused" and "authentication failed" more gracefully 0.083 2015-02-05 07:52 CET - Parser.pm: improve parsing of 'priv/history/eid/...' and 'priv/history/nick/...' 0.084 2015-02-06 06:08 CET - Parser.pm: handle 0 arguments better in 'priv/...' resources 0.085 2015-02-07 11:26 CET - Parser.pm: fix issue where timestamps were not getting appended properly 0.086 2015-02-11 13:52 CET - Build.PL: require latest version of App::CELL - Parser.pm: recognize root resource 0.087 2015-02-12 07:31 CET - Parser.pm: support 'employee/search/...' 0.088 2015-02-16 08:23 CET - Parser.pm: add fallback to 'employee/search' noop 0.089 2015-02-18 13:33 CET - bin/dochazka-cli, Help.pm: add infrastructure for displaying help messages - Parser.pm: add a 'SHOW' command 0.090 2015-02-18 13:51 CET - Parser.pm: move all the HTTP testing stuff to a separate routine 0.091 2015-02-18 16:45 CET - start implementing SHOW EMPLOYEE command 0.092 2015-02-18 17:57 CET - CLI.pm: add exported storage for current date, employee object, privlevel - Show.pm: use 'GET employee/eid/:eid' to get the profile, since we might be "masquerading" as a different employee 0.093 2015-02-20 20:52 CET - Show.pm: continue implementing SHOW EMPLOYEE [$KEY] - take an optional argument and apply heuristics in the look-up: first try nick, then sec_id, then eid (no point in forcing the user to specify which one is intended) - Parser.pm: refinements; start to add support for SET EMPLOYEE 0.094 2015-02-21 15:59 CET - bin/dochazka-cli: use normalize_filespec - Show.pm: handle undefined search key 0.095 2015-02-23 20:58 CET - add fields to SHOW EMPLOYEE output 0.096 2015-02-24 10:23 CET - Show.pm: fix bug in SHOW EMPLOYEE heuristics 0.097 2015-02-24 17:53 CET - refactor for better maintainability and prepare to implement Term::ReadLine custom completer (WIP) 0.098 2015-03-02 15:28 CET - refactoring in progress 0.098 2015-03-02 22:03 CET - refactoring WIP 0.098 2015-03-03 14:36 CET - bin/dochazka-cli: display the right error message when parser dies unexpectedly - CLI.pm: fix get_next_token, add debug messages to it - Level0/, Level1/: get parser working 0.099 2015-03-03 18:21 CET - implement --debug|-d option 0.100 2015-03-05 10:34 CET - CLI.pm: refactor lexer, syntaxer routines - t/parser/: start writing parser unit tests 0.101 2015-03-05 16:49 CET - CLI.pm: new parser taking shape - t/parser/: add unit tests 0.102 2015-03-05 18:07 CET - MANIFEST: add CommandMap.pm; deprecate Level[012]/ - CLI.pm: parser refinements -- eliminate global variables - TokenMap.pm: move look_up_token from CLI.pm - t/parser/: adapt to current state 0.103 2015-03-05 21:41 CET - CommandMap.pm: start work on dispatch table - Command/Activity.pm: re-implement some activity-related commands 0.104 2015-03-06 07:32 CET - CLI/Commands/Activity.pm: implement activity commands - CLI/Commands/Top.pm: start implementing top-level commands - CLI.pm: work on remainder routine; deprecate get_next_token - CLI/CommandMap.pm: WIP - t/parser/look_up_command.t: test look_up_command routine - t/parser/remainder.t: test remainder routine 0.105 2015-03-06 14:02 CET - CommandMap.pm: add entries for "top-level" commands - Commands/Activity.pm: instead of dying with send_req, die with reference to an array that can be passed to send_req later (for easier testing of each command implementation) - Commands/Top.pm: implement top-level commands - t/parser/look_up_command.t: test all implemented commands in two foreach loops -- with and without JSON string 0.106 2015-03-06 19:26 CET - Commands/: make it so command target functions return an arrayref instead of dying with one - t/parser/look_up_command.t: adapt tests 0.107 2015-03-07 12:01 CET - CommandMap.pm, Commands/: add $METHOD ACTIVITY and $METHOD EMPLOYEE commands 0.108 2015-03-07 18:03 CET - CLI.pm: yet another modification to the parser design - t/parse.t: TDD on the new parser 0.109 2015-03-08 11:39 CET - complete revamp of the semantic analysis (command recognition) part (WIP) 0.110 2015-03-08 18:00 CET - revamped possible_words to use auto-generated semantic tree - get $METHOD commands to parse properly (WIP) 0.111 2015-03-08 21:24 CET - various adjustments, t/parse.t now running cleanly - NEXT: implement priv, schedule commands 0.112 2015-03-09 12:08 CET - Commands/: implement priv and schedule commands - TokenMap.pm: add _TIMESTAMP regex - t/parse.t: add basic tests for all new commands 0.113 2015-03-09 16:22 CET - TokenMap.pm: fix bug in _NUM regex (single digits not recognized as numbers) - t/parse.t: add test case for single-digit _NUM - bin/dochazka-cli: use the new routines (parse, look_up_command, etc.) - CommandMap.pm: add EXIT - Commands/Top.pm: fix bugs 0.114 2015-03-10 10:59 CET - bin/dochazka-cli: adapt to new setup - CLI.pm: now just a shell for storing package variables - Parser.pm: move parser routines here from CLI.pm - Commands/Show.pm: adapt to new setup - remove Test::Deep dependency (K.I.S.S.) 0.115 2015-03-11 17:28 CET - implement SHOW ACTIVITY . . . commands - implement SET EMPLOYEE SEC_ID _TERM command 0.116 2015-03-13 06:12 CET - HTTP.pm: delete deprecated module (using Web::MREST::CLI::UserAgent now) - Util.pm: new module for reusable routines such as rest_error - bin/dochazka-cli: fix two bugs - CommandMap.pm, Commands/Set.pm: implement EMPLOYEE_SPEC SET SEC_ID _TERM - Commands/Show.pm: use rest_error - TokenMap.pm: regex tweaks 0.117 2015-03-13 20:30 CET - implement SET EMPLOYEE FULLNAME and EMPLOYEE_SPEC SET FULLNAME - minor cleanup 0.118 2015-03-18 17:55 CET - bin/dochazka-cli, Parser.pm: make command processing testable (process_command) - Util.pm: fix bug in lookup_employee, make rest_error return a string instead of printing directly to STDOUT 0.119 2015-03-19 10:13 CET - bin/dochazka-cli, Util.pm: move "authenticate_to_server", "init_cli_client", and "init_logger" from the startup script to Util.pm so we can call them from the test suite - t/commands/show.t: unit tests for "SHOW EMPLOYEE" 0.120 2015-03-19 21:17 CET - Util.pm: make 'rest_error' return a status object with code 'DOCHAZKA_CLI_REST_ERROR' - t/commands/show.t: add 'SHOW ACTIVITY ALL' unit that tests for this 0.121 2015-03-20 07:23 CET - t/001-init.t: add "tests" that create users with inactive and active privlevels idempotently - t/cmd_active/: command tests as active user - t/cmd_inactive/: command tests as inactive user - t/cmd_admin/: command tests as admin user - t/cmd_passerby/: command tests as passerby user - bin/dochazka-cli: tweak how "authenticate_to_server" is called - Commands/: standardize that normal completion of CLI commands will return status object with level OK and code DOCHAZKA_CLI_NORMAL_COMPLETION - Util.pm: make "authenticate_to_server" take a PROPLIST instead of positional parameters 0.122 2015-03-21 13:47 CET - Commands/RestTest/: move HTTP testing routines out of the way - rearrange code to implement new command syntax - adapt tests 0.123 2015-03-24 09:03 CET - discovered a token-matching bug 0.124 2015-03-24 17:49 CET - fix bugs introduced by last commit 0.125 2015-03-24 18:29 CET - t/cmd_...: rearrange tests by new command categories (activity, employee, etc.) - Util.pm: in rest_error, derive the return status from the REST server's return status 0.126 2015-03-24 21:35 CET - Build.PL: make it look more like the Build.PL from App::Dochazka::REST - t/cmd_...: add some very basic EMPLOYEE_SPEC tests 0.127 2015-03-25 07:05 CET - t/cmd_..: make tests handle EIDs properly 0.128 2015-03-25 15:26 CET - Parser.pm: make process_command distinguish REST test commands from normal CLI commands and handle them accordingly - return the real status and not some dumb DOCHAZKA_CLI_NORMAL_COMPLETION - implement $METHOD employee search nick $SEARCH_KEY 0.129 2015-03-25 16:22 CET - implement "GET schedule all" and "GET schedule all disabled" commands 0.130 2015-03-26 07:44 CET - t/parse.t: add tests for newly supported rest_test commands - came up with idea for building up new schedules in memory - CommandMap.pm: add new SCHEDULE _DOW ... commands - Parser.pm: add support for multiple instances of the same token within a single command - TokenMap.pm: add support for new _DOW and _TIME tokens 0.131 2015-03-27 08:58 CET - Commands/Schedule.pm: basic infrastructure for building up a schedule in memory for submission to the REST server 0.132 2015-03-27 21:33 CET - add DUMP and MEMORY tokens - add "SCHEDULE DUMP", "SCHEDULE MEMORY", and "SCHEDULE NEW" commands - basic schedule-building and schedule-inserting functionality seems to work, but no tests yet 0.133 2015-03-28 20:21 CET - bin/dochazka-cli: improve reporting of non-OK statuses - CommandMap.pm, RestTest/Schedule.pm, t/parse.t: add missing REST test command "$METHOD SCHEDULE SID $NUMBER" - Commands/Schedule.pm: do not push duplicate schedule entries into memsched - TokenMap.pm: include an "ALL" day of week (meaning replicate this interval to all five days MON-FRI) 0.134 2015-03-28 20:44 CET - bin/dochazka-cli: further refine reporting of errors - CLI_Message_en.conf: add an error message for when "schedule/new" is called on empty memsched - CommandMap.pm: add "SCHEDULE ALL _TIMERANGE" for accelerated schedule entry in cases when the schedule for MON-FRI is the same on each day - Commands/Schedule.pm: make sure there are memsched entries to begin with, before sending REST call; implement "SCHEDULE ALL _TIMERANGE" command 0.135 2015-03-30 08:57 CEST - implement "SCHEDULE CLEAR" - cleanup, tweaks 0.136 2015-03-30 15:11 CEST - resolve two tickets - TokenMap.pm: expand EMPLOYEE_SPEC so we can do "nick=...", "sec_id=..." and "eid=..." - Util.pm: make "lookup_employee" handle expanded EMPLOYEE_SPEC - t/cmd_admin/employee.t: add test cases for expanded EMPLOYEE_SPEC 0.137 2015-03-30 23:11 CEST - start adding scode support 0.138 2015-03-31 17:18 CEST - implement 'SCHEDULE FETCH ALL' command - Commands/Schedule.pm: in 'schedule_new', give the user feedback when schedule is successfully inserted (WIP: feedback should include info whether schedule was actually inserted or only updated - if updated, there might be a conflict between new scode and the original one; not clear what the program should do in such a case) 0.139 2015-04-03 07:05 CEST - implement 'SCHEDULE FETCH ALL DISABLED' 0.140 2015-04-03 19:47 CEST - make 'SCHEDULE FETCH ALL [DISABLED]' display remarks, if present, and clearly mark disabled schedules as such 0.141 2015-04-04 15:27 CEST - implement commands: - SCHEDULE_SPEC [SHOW] - SCHEDULE_SPEC REMARK - SCHEDULE_SPEC SCODE _TERM 0.142 2015-04-04 21:46 CEST - start working on PRIV HISTORY and SCHEDULE HISTORY handlers - TokenMap.pm: add privlevels and _PRIVLEVEL - cleanup 0.143 2015-04-05 11:34 CEST - add Text::Table dependency - lay groundwork for "PRIV", "EMPLOYEE_SPEC PRIV", "SCHEDULE", "EMPLOYEE_SPEC SCHEDULE", "EMPLOYEE_SPEC PRIV HISTORY", and "EMPLOYEE_SPEC SCHEDULE HISTORY" - Commands/History.pm: implement handler for "[EMPLOYEE_SPEC] PRIV HISTORY" - Commands/Employee.pm: use 'App::Dochazka::REST::Model::Employee' instead of 'App::Dochazka::Model::Employee' 0.144 2015-04-05 13:32 CEST - Commands/History.pm: add "print_schedule_history" routine - Commands/Priv.pm: new module containing "show_current_priv" handler routine - implement "[EMPLOYEE_SPEC] PRIV" and "[EMPLOYEE_SPEC] SCHEDULE" handlers 0.145 2015-04-05 20:59 CEST - add Shared.pm with shared routines (priv/schedule etc.) - Commands/History.pm: look up and display scode and remark in schedule history table 0.146 2015-04-06 18:41 CEST - implement commands for adding priv and schedule history records 0.147 2015-04-06 22:15 CEST - add commands for changing priv and schedule history remarks 0.148 2015-04-07 09:29 CEST - Util.pm: in rest_error, handle case when payload is a string 0.149 2015-04-07 11:51 CEST - CommandMap.pm: add synonyms - Commands/History.pm: fix typo bug in set_history_remark 0.150 2015-04-07 13:38 CEST - Util.pm: add a 'truncate_to' function for limiting table columns that might run on, and on, and on... - History.pm: use truncate_to; in _add_history look up sid when scode is given; in print_schedule_history print the right remark; remove quotes in set_history_remark - Schedule.pm: make schedule_new return status object with http_status property - t/001-init.t: create a schedule so we don't have to create one manually all the time 0.151 2015-04-07 17:08 CEST - Guide.pm: start writing proper CLI documentation - CLI.pm: move verbiage to Guide and link to it - Parser.pm: fix RT#102671 (Trailing '0' was throwing the parser) https://rt.cpan.org/Ticket/Display.html?id=102671 - cleanup 0.152 2015-04-07 18:39 CEST - TokenMap.pm: add PASSWORD token and distinguish it from PASSERBY - CommandMap.pm: add some synonyms; add password-reset commands 'EMPLOYEE PASSWORD' and 'EMPLOYEE_SPEC PASSWORD' - Commands/Employee.pm: add dummy handlers for the above commands - Guide.pm: document some commands 0.153 2015-04-07 22:08 CEST - Commands/Employee.pm: implement password change handlers 0.154 2015-04-09 10:13 CEST - Build.PL: acknowledge Web::MREST dependency - Guide.pm: document more commands/workflows 0.155 2015-04-09 10:20 CEST - change all instances of 'App::Dochazka::REST::Model' to 'App::Dochazka::Model' 0.156 2015-04-09 10:27 CEST - RestTest/Top.pm: fix dependency 0.157 2015-04-09 10:30 CEST - t/cmd_admin/history.t: remove last vestiges of 'App::Dochazka::REST::Model' (replace with App::Dochazka::Model) because we want the CLI to be independent of the REST server 0.158 2015-04-10 20:07 CEST - lay some groundwork for adding intervals 0.159 2015-04-13 11:16 CEST - CommandMap.pm: add some command variants for entering new intervals - Commands/Activity.pm: set up a command handler for "parse test" - Commands/Interval.pm: add placeholder command handlers - Guide.pm: mention the new commands - Util.pm: implement 'parse_test' function; in 'truncate_to', do not attempt truncate operation unless string is really longer than the maximum length 0.160 2015-04-13 13:43 CEST - Test.pm: new module for reusable test components, ATM mainly do_parse_test - Commands/Activity.pm: finesse how parse_test is called from command handler - Util.pm: fix parse_test - t/parser/commands.t: use do_parse_test 0.161 2015-04-13 13:45 CEST - release.sh: suppress mv errors 0.162 2015-04-13 14:37 CEST - Commands/Employee.pm: add parse_test boilerplate, re-arrange so command handlers are separated from helper functions; make sure names of helper functions start with _ 0.163 2015-04-13 14:51 CEST - found out that I had been (somewhat stupidly) sending the raw command string to parse_test, but this will not work with commands like "EMPLOYEE=worker" -- should have been using the normalized command from the beginning -> fix 0.164 2015-04-13 17:40 CEST - Commands/: reorganize routines and add parse_test support in remaining modules - t/: add more do_parse_test calls 0.165 2015-04-13 18:01 CEST - add more equivalent variants of INTERVAL NEW commands - add parser support for INTERVAL SHOW commands - add lots of gratuitous test cases 0.166 2015-04-14 08:38 CEST - add more intuitive command syntax for adding new intervals - Commands/Interval.pm: start working on a handler implementation 0.167 2015-04-14 12:48 CEST - add t/util/ for testing the Util.pm module - Util.pm: come up with two new functions: tsrange_from_timestamps and normalize_timestamp; write some documentation - Util.pm, t/util/ts.t: implement normalize_timestamp using TDD - TokenMap.pm: in _TIMESTAMP, recognize "TODAY", "TOMORROW", and "YESTERDAY" and use named capture groups to extract the date part and time part - Parser.pm: add and comment out some print statements for debugging 0.168 2015-04-14 13:52 CEST - Commands/History.pm: change _TIMESTAMP to _DATESTAMP where necessary - Commands/Interva.pm: implement handlers for adding new intervals - Util.pm: implement tsrange_from_timestamps routine - t/util/ts.t: add test cases for tsrange_from_timestamps 0.169 2015-04-14 15:39 CEST - t/cmd_active/001-init.t: new unit that creates a schedule history record for employee "worker", so he can insert attendance intervals - Commands/History.pm: SCHEDULE_SPEC can be either scode or sid, but we forgot to convert to lowercase => fix - Util.pm: truncate_to was generating a warning => fix - t/cmd_admin/history.t: add schedule history test case 0.170 2015-04-15 09:36 CEST - Guide.pm: add section on creating new employees - Commands/Employee.pm: allow new password to be specified on the command line and be more verbose when asking employee to repeat it 0.171 2015-04-15 10:15 CEST - make history commands take _DATE only (instead of deprecated _DATESTAMP) 0.172 2015-04-15 10:30 CEST - get rid of _DATESTAMP completely, replace it with _TIMESTAMP - replace the old _TIMESTAMP with _TIMESTAMPDEPR 0.173 2015-04-15 20:08 CEST - Build.PL: bring in Date::Calc dependency - CLI.pm, bin/dochazka-cli: re-name "prompt date" package variable from $current_date to $prompt_date - Util.pm, t/util/ts.t: split normalize_timestamp into normalize_date and normalize_time; handle offsets - CommandMap.pm, Commands/Interval.pm, t/parser/commands.t: re-vamp interval insertion commands; use normalize_date and normalize_time 0.174 2015-04-16 07:12 CEST - Commands/Interval.pm: eliminate some code duplication - CommandMap.pm: add some new interval insertion commands - CLI_Message_en.conf: add some proper error messages - Util.pm: make argument processing more robust - t/parser/commands.t: add basic parse tests for missing interval commands; update existing tests to current state 0.175 2015-04-16 09:51 CEST - t/cmd_active/interval.t: start developing functional tests of INTERVAL commands - Commands/Interval.pm: eliminate more code duplication; arrive at a name _tsrange_from_dates_and_times for helper function; add _print_interval helper function - Util.pm: make 'init_cli_client' call init_timepiece() 0.176 2015-04-16 14:07 CEST - bin/dochazka-cli, Util.pm: special handling of REST_ERROR status code - CommandMap.pm: re-vamp commands for fetching intervals - Commands/Interval.pm: implement "interval_fetch_promptdate" handler, "_print_intervals_tsrange" helper function - TokenMap.pm: add months of the year 0.177 2015-04-16 15:13 CEST - Commands/Misc.pm: new module for miscellaneous command handlers - add commands (PROMPT, PROMPT DATE) for changing the prompt date - Util.pm: add write 'determine_employee' routine - CommandMap.pm, Commands/Interval.pm: add "EMPLOYEE_SPEC ..." variants for "INTERVAL", "INTERVAL FETCH", and "INTERVAL _DATE" - Commands/Employee.pm: eliminate code duplication by using determine_employee - t/parser/commands.t: adapt to current state 0.178 2015-04-16 18:31 CEST - Commands/Interval.pm: display fetched intervals in table form 0.179 2015-04-17 13:22 CEST - add lots more commands for fetching/displaying attendance intervals 0.180 2015-04-17 13:50 CEST - t/parser/commands.t: add basic parse tests for the new interval fetching commands - CommandMap.pm: fix typo uncovered by the new parse tests 0.181 2015-04-17 15:32 CEST - add "REST Test" commands for the new 'schedule/intervals/...' resources 0.182 2015-04-18 18:16 CEST - rename "SCHEDULE INTERVALS" commands, resources, etc. to "INTERVAL FILLUP" 0.183 2015-04-18 18:35 CEST - make "INTERVAL FILLUP" REST-test commands take lower and upper date bounds instead of tsrange 0.184 2015-04-18 20:03 CEST - bin/dochazka-cli: use Data::Dumper to display payload when status is OK and payload is not a number or string - add INTERVAL FILLUP commands (piggyback on INTERVAL FETCH) 0.185 2015-04-27 16:59 CEST - give active testing employee a schedule already in t/001-init.t; get rid of unintuitive t/cmd_active/001-init.t - use prompt date (century, year, month, etc.) instead of current date (century, year, month, etc.) - Test.pm: add a 'delete_interval' test routine - t/cmd_active/interval.t: expand unit; use imported 'delete_interval' routine; test that "PROMPT 2015-01-01" does change all the $prompt_... variables 0.186 2015-04-28 17:34 CEST - t/util/: add two new units auth.t and determine_employee.t - Util.pm: abolish 'quiet' parameter to authenticate_to_server and make routine completely mute; validate a parameter; document routines better; refactor authenticate_to_server for code readability and more reasonable return value; lookup_employee: fix bugs uncovered by unit testing - bin/dochazka-cli: move in authentication announcement from authenticate_to_server 0.187 2015-04-29 19:47 CEST - Util.pm, t/util/ts.t: more documentation improvement; remove deprecated tsrange_from_timestamps routine; use $prompt_year instead of $current_year; eliminate deprecated $current_{year,century,month} package variables - CommandMap.pm, Parser.pm: move functions from CommandMap.pm to Parser.pm; improve description of the semantic tree - t/cmd_active/interval.t: add tests to fetch intervals created by this unit - t/parser/: test generate_semantic_tree documentation 0.188 2015-04-29 20:43 CEST - CLI.pm, Test.pm: improve readability - t/util/truncate.t: unit tests for 'truncate_to' 0.189 2015-05-01 12:00 CEST - Test.pm: rename delete_interval -> delete_interval_test; add fetch_interval_test - t/cmd_active/interval.t: use fetch_interval_test 0.190 2015-06-28 15:29 CEST - CommandMap.pm: put employee REST test commands in alphabetical order - CommandMap.pm: add REST test commands for 'employee/list/?:priv' resource - RestTest/Employee.pm: add dispatch targets for 'employee/list/?:priv' resource - TokenMap.pm: add LIST token 0.191 2015-06-28 16:15 CEST - CommandMap.pm: add EMPLOYEE LIST and EMPLOYEE LIST _TERM targets - Commands/Employee.pm: implement the employee_list() function - Guide.pm: document the EMPLOYEE LIST and EMPLOYEE LIST _TERM targets 0.192 2015-06-30 18:46 CEST - t/cmd_admin/employee.t: convert comments to notes - t/cmd_admin/employee.t: add basic tests of EMPLOYEE LIST command - t/boilerplate.t: this unit's usefulness is questionable; drop it - t/util/auth.t: avoid running any tests before first call to authenticate_to_server(), because it might result in "plan skip_all" 0.193 2015-07-01 17:13 CEST - implement REST test and normal commands for 'employee/team', 'employee/eid/:eid/team' and 'employee/nick/:nick/team' resources 0.194 2015-07-01 22:39 CEST - implement "EMPLOYEE TEAM" and "EMPLOYEE_SPEC TEAM" commands 0.195 2015-07-04 19:43 CEST - bin/dochazka-cli: honor sitedir option; prompt for password 0.196 2015-07-04 22:12 CEST - bin/dochazka-cli: use init_prompt() instead of init_timepiece() - bin/dochazka-cli: initialize prompt date every time prompt is displayed - Util.pm: import init_timepiece() from App::Dochazka - Util.pm: implement init_prompt() - Commands/Misc.pm: use init_prompt() instead of init_timepiece() 0.197 2015-07-05 14:19 CEST - bin/dochazka-cli: $sitedir fall back to /etc/dochazka-cli - require latest version of App::Dochazka for $today - change Supervisor: to Reports to: in EMPLOYEE PROFILE output 0.198 2015-07-21 16:13 CEST - Define $VERSION only in CLI.pm and Guide.pm - Rename App::Dochazka::Common and update copyright statement 0.199 2015-07-22 14:51 CEST - Convert MREST_CLI_URI_BASE to a meta param - bin/dochazka-cli - get home directory using File::HomeDir - add --version option and take optional URL as argument - prompt for username and password if not supplied 0.200 2015-07-23 08:54 CEST - Util.pm: modify lookup_employee() to take hash of properties ... - t/: make sure config is loaded in test suite - Util.pm and t/: Rename App::Dochazka to App::Dochazka::Common - Build.PL: rename App::Dochazka to App::Dochazka::Common - bin/dochazka-cli: do not display password as it is typed and ignore password stored in config if username not taken from config - Do not generate Makefile.PL anymore 0.201 2015-07-23 18:47 CEST - t/: adapt to current state - Util.pm: use GET employee/.../minimal in determine_employee() - TokenMap.pm: add LDAP token - Commands/RestTest/Employee.pm: implement employee/nick/:nick/ldap resource - Commands/Employee.pm: implement employee_ldap() - CommandMap.pm: enable LDAP commands - Commands/Employee.pm: display supervisor nick instead of EID 0.202 2015-07-25 04:09 CEST - release scripting modifications - cleanup: Commands/Activity.pm: display "Entering (etc.)" only in debug mode. - Implement EMPLOYEE_SPEC LDAP IMPORT command - Commands/Employee.pm: report to admins whether LDAP user is also a Dochazka user - t/: put config load test in the right place - Commands/Employee.pm: export employee_ldap() function 0.203 2015-07-25 19:01 CEST - Util.pm: make refresh_current_emp() handle server insanity more robustly - Commands/Employee.pm: implement determine_priv() helper function - t/: adapt test suite to current state - t/cmd_passerby/employee.t: convert comments to note() calls - CommandMap/Employee.pm: implement EMPLOYEE_SPEC SUPERVISOR _TERM command - CommandMap.pm: add EMPLOYEE_SPEC SUPERVISOR _TERM command - TokenMap.pm: add SUPERVISOR token - Build.PL: update repository and bugtracker resources - config/CLI_Config.pm: suppress more headers 0.204 2015-07-25 23:33 CEST - Util.pm: in lookup_employee(), do not go on to sec_id check when nick check returns 403 - Shared.pm: rename show_current() to show_as_at() to generalize it - Commands/: rename current routines to as_at in Priv.pm and Schedule.pm - CommandMap.pm: rename current routines to as_at and add PRIV and SCHEDULE commands with _DATE parameter - Util.pm: expose determine_employee() argument in debug log 0.205 2015-07-27 10:14 CEST - Build.PL: require a recent version of Web::MREST - bin/dochazka-cli: use JSON->encode, instead of Data::Dumper, to format statuses for display to user - Add boilerplate for SCHEDULE ALL and SCHEDULE ALL DISABLED commands - Shared.pm: refrain from displaying time in show_as_at() 0.206 2015-07-27 13:58 CEST - CommandMap.pm: change second _DATE to _DATE1 (fixes Github issue #5) 0.207 2015-07-27 14:08 CEST - Build.PL: change Web::MREST dependency to Web::MREST::CLI 0.208 2015-07-27 14:43 CEST - Util.pm: import normalize_filespec() from Web::MREST::CLI::UserAgent 0.209 2015-07-27 21:34 CEST - Util.pm: make CRIT log message more reasonable - Commands/Employee.pm: use Term::ReadKey noecho mode when user types his password - Commands/Employee.pm: fix a regression in lookup_employee() 0.210 2015-07-28 12:32 CEST - Improve error message when user enters attempts to enter a new interval with a non-existent activity code Fixes: https://github.com/smithfarm/dochazka-cli/issues/10 0.211 2015-07-30 15:23 CEST - Util.pm: drop init_cli_client() in favor of the one from Web::MREST::CLI - bin/dochazka-cli: enable --early-debug option - t/: drop superfluous boilerplate units - Routines that were in Web::MREST::CLI::UserAgent are now in Web::MREST::CLI 0.212 2015-07-30 16:14 CEST - Commands/Employee.pm: make a _display_employee_ok() helper function to assemble the OK return staus from EMPLOYEE PROFILE - t/cmd_admin/employee.t: add test cases for EMPLOYEE_SPEC SUPERVISOR _TERM - Commands/Employee.pm: make EMPLOYEE_SPEC SUPERVISOR _TERM output prett 0.213 2015-07-31 11:14 CEST - Commands/Interval.pm: implement a _fillup_dry_run() function to help fetch and format fillup intervals - bin/dochazka-cli: reinstate --debug parameter 0.214 2015-07-31 23:22 CEST - work on https://github.com/smithfarm/dochazka-cli/issues/12 - Commands/Interval.pm: fix syntax errors introduced in 0.213 - Commands/Interval.pm: make _fillup_dry_run() return prettier output 0.215 2015-08-02 16:57 CEST - Build.PL: require latest version of Web::MREST:CLI 0.216 2015-08-11 19:05 CEST - Commands/Interval.pm: add _interval_fillup_delete_print() helper function - Commands/Interval.pm: remove "fetch_" from function names - Build.PL: require newest App::Dochazka::Common - Implement GET HOLIDAY $TSRANGE command 0.217 2015-08-16 23:23 CEST - Implement INTERVAL FILLUP _TSRANGE command - Commands/Interval.pm: temporary fix for _fillup_dry_run() exception - CommandMap.pm: interval/fillup resources now take a tsrange instead of two dates - t/parser/rest_test.t: interval/fillup resources take a tsrange now - Add INTERVAL FETCH ... COMMIT commands - Commands/Interval.pm: make handlers commit-aware 0.218 2015-12-11 12:13 CET - t/cmd_active/employee.t: fix check for ACL_VIOLATION - prerelease.sh: copy new prerelease script from REST - global: do not convert warnings into errors - tests: use Test::Warnings to check for unexpected warnings - update release and prerelease scripts 0.219 2016-01-06 21:11 CET - Guide.pm: tell how to look up individual schedules - Commands/Interval.pm: be aware of partial intervals - Commands/Interval.pm: get count from $status->{'count'} - CommandMap.pm: fix INTERVAL DELETE - plumb in INTERVAL SUMMARY commands - bin/dochazka-cli: tweak how NON_OK error statuses are displayed 0.220 2016-01-09 22:14 CET - COMPONENT PATH command: first draft (commented out for now) - prerelease.sh: fix date template - GENERATE REPORT: implement new command 0.221 2016-01-11 22:40 CET - Build.PL: require latest version of App::Dochazka::Common - INTERVAL REPORT: basic implementation - INTERVAL REPORT: more advanced implementation - bin/dochazka-cli: become aware of non-interactive usage 0.222 2016-01-12 00:41 CET - MANIFEST.SKIP: avoid docker/ directory - docker/: add Dockerization - Testers.pm: a place to hold instructions for volunteer testers - Testers.pm: first test is to meet the prerequisites 0.223 2016-01-12 15:26 CET - Testers.pm: have them first login with demo/demo - bin/dochazka-cli: show prompt/commands in non-interactive mode - CLI/Testers.pm: add testing session 1 0.224 2016-01-14 13:10 CET - Build.PL: require Web::MREST::CLI 0.279 for bugfixes - bin/dochazka-cli: add rudimentary custom completion function https://github.com/smithfarm/dochazka-cli/issues/27 Fixes: #27 - CLI/Guide.pm: remove VERSION 0.225 2016-01-14 17:19 CET - bin/dochazka-cli: tell JSON to not decode UTF-8 https://github.com/smithfarm/dochazka-cli/issues/24 Fixes: #24 0.226 2016-01-14 19:54 CET - Build.PL: require Web::MREST::CLI 0.280 for UTF-8 bugfix - Testers.pm: in PREREQUISITES describe non-Docker way 0.227 2016-01-14 20:16 CET - Revert "Drop VERSION from CLI/Guide.pm" 0.228 2016-01-15 00:50 CET - tests: - t/cmd_admin/employee.t: improve debuggability (log to file, etc.) - t/cmd_admin/employee-utf8.t: new test - bin/dochazka-cli: beginnings of tab completion 0.229 2016-01-15 22:25 CET - Extend copyright into 2016 - tab completion: - TokenMap.pm: rename $regex_map -> $token_map, add $completion_map - Completion.pm: working custom completion - custom completion: fix various issues - CommandMap: add some noop commands to fix tab completion 0.230 2016-01-16 20:35 CET - tab completion: - fix some minor glitches - add tab completion tests - drop a senseless dependency - CLI/Testers.pm: clarify PREREQUISITES 0.231 2016-01-25 23:25 CET - release.sh: save some typing by automating version number to OBS - bin/dochazka-cli: make debug-level log messages visible in log - Util.pm: put datelist helper functions in Util.pm - Util.pm: stabilize and test datelist_from_token() - TokenMap.pm: add _DATELIST (for use with INTERVAL FILLUP) - CommandMap.pm: adapt FILLUP commands to redesigned REST resource - Refactor INTERVAL FILLUP commands - Commands/Interval.pm: basic INTERVAL FILLUP functionality 0.232 2016-01-26 07:47 CET - Util.pm: use debug log level - t/util/datelist.t: cleanup, initialize logger 0.233 2016-01-30 23:45 CET - Remove INTERVAL FILLUP DATELIST ambiguity - Commands/Interval.pm: expand statistics reported by INTERVAL FILLUP - simplify INTERVAL FILLUP command syntax by removing _MONTH - bin/dochazka-cli: drop annoying "Payload: undef" from output of certain commands - Completion.pm: eliminate tab completion warning - pod (Testers.pm): add sessions 2, 3, 4, and 5 0.234 2016-02-01 00:42 CET - Testers.pm: add subsection headings in session 5 - bin/dochazka-cli: use Dumper to display non-scalar payloads 0.235 2016-02-02 10:39 CET - Testers.pm: rewrite database initialization step - Testers.pm: tell users to start the server; work on session 6 0.236 2016-02-04 11:17 CET - doc: Guide.pm: fix activity disable/re-enable examples - Testers.pm: finish session 6, start session 7 - Util.pm->normalize_date(): check sanity of resulting date - Commands/Interval.pm: remove confusing partial interval message 0.237 2016-09-04 20:12 CEST - Parser.pm: provide better parser state dumps in debug mode - RestTest: implement GET configinfo - Util.pm: report logfile location to user at startup - Saner sitedir handling - Travis CI 0.238 2016-09-15 13:33 CEST - cleanup: drop ignore.txt - build/ops: new file CLI_SiteConfig.pm.example 0.239 2017-10-18 22:54 CEST - EMPLOYEE PROFILE: drop Dochazka EID... - Use employee/self/full instead of employee/self/priv - In employee/self/full resource, current_emp prop renamed to "emp" - RestTest: add schedule/new RestTest commands - TokenMap: allow three-letter month abbreviations in timestamp 0.240 2017-10-18 22:55 CEST - build/ops: set OBS_PROJECT to Application:Dochazka