177 lines
4.8 KiB
Markdown
177 lines
4.8 KiB
Markdown
|
|
BrmBuro
|
|
=======
|
|
|
|
Brmlab Bureacratic system.
|
|
|
|
License
|
|
-------
|
|
|
|
ISC License
|
|
|
|
Copyright 2023 Brmlab, z.s.
|
|
Dominik Pantůček <dominik.pantucek@trustica.cz>
|
|
|
|
Permission to use, copy, modify, and/or distribute this software
|
|
for any purpose with or without fee is hereby granted, provided
|
|
that the above copyright notice and this permission notice appear
|
|
in all copies.
|
|
|
|
THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL
|
|
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
|
WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
|
AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
|
|
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
|
NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
|
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
Features
|
|
--------
|
|
|
|
* members base management
|
|
* member files parsing and validation
|
|
* member ids validation
|
|
* generating new member id
|
|
* per-month statistics of active, suspended, destroyed and student
|
|
members
|
|
* detailed member information
|
|
* querying members by id or nick
|
|
|
|
Requirements
|
|
------------
|
|
|
|
There are no runtime requirements, it is possible to build binary that
|
|
requires only libc.
|
|
|
|
Build requirements:
|
|
|
|
* Chicken Scheme 5
|
|
* make (tested with GNU make)
|
|
|
|
Building static binary:
|
|
|
|
make brmsaptool-static
|
|
|
|
It is possible to run the main tool as script with Chicken Scheme
|
|
interpreter and POSIX-compatible shell for the purpose of development.
|
|
|
|
Development requirements:
|
|
|
|
* POSIX shell
|
|
|
|
Functional Modules
|
|
------------------
|
|
|
|
### Configuration
|
|
|
|
### Member File
|
|
|
|
### Member Record
|
|
|
|
### Member Base
|
|
|
|
### Month
|
|
|
|
### Period
|
|
|
|
### Primes
|
|
|
|
Support Modules
|
|
---------------
|
|
|
|
### ANSI
|
|
|
|
### Command Line parsing
|
|
|
|
### Dictionary
|
|
|
|
### Listing
|
|
|
|
### Progress
|
|
|
|
### Testing
|
|
|
|
This module provides simple syntax forms for (unit) testing of other
|
|
modules.
|
|
|
|
(run-tests name body ...)
|
|
|
|
* ```name``` - identifier describing the module being tested
|
|
* ```body ...``` - test expressions
|
|
|
|
Runs all tests specified on the ```body ...```. Firstly it prints
|
|
"[test] name " at the beginning of the line. Secondly it runs all
|
|
tests, printing "." for each test successfully passed. If all tests
|
|
pass, prints " ok." and moves the cursor to the next line.
|
|
|
|
In case any of the tests fails, exception is raised and program
|
|
terminates.
|
|
|
|
(test-eq? name expression expected-result)
|
|
|
|
* ```name``` - identifier representing the name of the test
|
|
* ```expression``` - expression to be evaluated
|
|
* ```expected-result``` - expected result of the test expression
|
|
|
|
Evaluates the test ```expression``` and compares the result with
|
|
```expected-result``` using ```eq?```. If the comparison fails, an
|
|
exception is raised with the ```name``` of the test added to the
|
|
exception. If the test passes, prints "." like all tests from this
|
|
module do.
|
|
|
|
(test-equal? name expression expected-result)
|
|
|
|
* ```name``` - identifier representing the name of the test
|
|
* ```expression``` - expression to be evaluated
|
|
* ```expected-result``` - expected result of the test expression
|
|
|
|
Evaluates the test ```expression``` and compares the result with
|
|
```expected-result``` using ```equal?```. If the comparison fails, an
|
|
exception is raised with the ```name``` of the test added to the
|
|
exception. If the test passes, prints "." like all tests from this
|
|
module do.
|
|
|
|
(test-true name expression)
|
|
|
|
* ```name``` - identifier representing the name of the test
|
|
* ```expression``` - expression to be evaluated
|
|
|
|
Evaluates the test ```expression``` and checks whether the result is
|
|
```#t``` (true). An exception is raised if it is not with the
|
|
```name``` of the test added to the exception. If the test passes,
|
|
prints "." like all tests from this module do.
|
|
|
|
(test-false name expression)
|
|
|
|
* ```name``` - identifier representing the name of the test
|
|
* ```expression``` - expression to be evaluated
|
|
|
|
Evaluates the test ```expression``` and checks whether the result is
|
|
```#f``` (false). An exception is raised if it is not with the
|
|
```name``` of the test added to the exception. If the test passes,
|
|
prints "." like all tests from this module do.
|
|
|
|
(test-exn name expression)
|
|
|
|
* ```name``` - identifier representing the name of the test
|
|
* ```expression``` - expression to be evaluated
|
|
|
|
Evaluates the test ```expression``` and checks whether it raised an
|
|
exception. An exception is raised if no exception was raised during
|
|
the evaluation. If the test passes, prints "." like all tests from
|
|
this module do.
|
|
|
|
### Utils
|
|
|
|
To ensure there are no external dependencies (including chicken eggs),
|
|
this module re-implements any basic procedures which are required for
|
|
any algorithms used.
|
|
|
|
(filter pred? lst)
|
|
|
|
* ```pred?``` - procedure accepting any value and returning #t or #f
|
|
* ```lst``` - list to be filtered
|
|
|
|
Returns a list containing only elements matching given ```pred?```
|
|
predicate.
|