Member record finalization.

This commit is contained in:
Dominik Pantůček 2023-03-25 21:59:51 +01:00
parent 4d43ce29d8
commit 389fd3dc1c
3 changed files with 17 additions and 4 deletions

View file

@ -190,7 +190,7 @@ cards.import.scm: $(CARDS-SOURCES)
MEMBER-PARSER-SOURCES=member-parser.scm member-record.import.scm \
testing.import.scm dictionary.import.scm month.import.scm \
period.import.scm utils.import.scm
period.import.scm utils.import.scm configuration.import.scm
member-parser.so: member-parser.o
member-parser.o: member-parser.import.scm

View file

@ -41,7 +41,8 @@
dictionary
month
period
utils)
utils
configuration)
;; Pass 2: known keys and multikeys
(define member-schema-known-keys '(nick mail phone name born joined destroyed))
@ -101,6 +102,12 @@
(else
(member-record-sub-set mr output key (car value))))))))
;; Final checks - add defaults
(define (member-schema-finalize mr)
(if (member-record-sub-has-key? mr 'info 'joined)
mr
(member-record-sub-set mr 'info 'joined (*member-default-joined*))))
;; Pass 0: Removes any comments and removes any leading and trailing
;; whitespace.
(define (preprocess-member-line line)
@ -215,8 +222,9 @@
(let* ((mrif (member-record-input-file mr))
(source (read-lines mrif))
(mrp (parse-member-lines mr source)))
(interpret-member-file
(process-member-file mrp))))
(member-schema-finalize
(interpret-member-file
(process-member-file mrp)))))
;; Performs self-tests of the member-parser module.
(define (member-parser-tests!)

View file

@ -38,6 +38,7 @@
member-record-sub-ref
member-record-sub-set
member-record-sub-prepend
member-record-sub-has-key?
member-record-info
@ -157,6 +158,10 @@
(cons val
(member-record-sub-ref mr sec key '()))))
;; Returns true if given section contains given key
(define (member-record-sub-has-key? mr sec key)
(dict-has-key? (dict-ref mr sec) key))
;; Returns member info key value
(define (member-record-info mr key . defaults)
(let ((info (dict-ref mr 'info)))