Streamline symbols in member-record.
This commit is contained in:
parent
4dac92b197
commit
350353608e
2 changed files with 46 additions and 9 deletions
|
@ -246,4 +246,4 @@
|
|||
(import member-parser)
|
||||
|
||||
(member-parser-tests!)
|
||||
(print (load-member-file (make-member-record "joe" "members/joe" '())))
|
||||
(print (load-member-file (make-member-record "joe" "members/joe" '(2803))))
|
||||
|
|
|
@ -47,18 +47,42 @@
|
|||
member-student?
|
||||
member-existing?
|
||||
|
||||
member-nick
|
||||
member-id
|
||||
|
||||
member-record-tests!
|
||||
)
|
||||
|
||||
(import scheme
|
||||
(chicken base)
|
||||
(chicken keyword)
|
||||
(chicken irregex)
|
||||
dictionary
|
||||
testing
|
||||
month
|
||||
period
|
||||
configuration)
|
||||
|
||||
;; Checks whether given string is a 4-digit decimal number.
|
||||
(define (is-4digit-string? s)
|
||||
(if (irregex-search (irregex "^[0-9]{4}$") s)
|
||||
#t
|
||||
#f))
|
||||
|
||||
;; checks whether given symbol is a 4-digit one.
|
||||
(define (is-4digit-symbol? s)
|
||||
(is-4digit-string?
|
||||
(symbol->string s)))
|
||||
|
||||
;; Returns the first 4-digit symbol from the list.
|
||||
(define (get-4digit-symbol-from-list lst)
|
||||
(let loop ((lst lst))
|
||||
(if (null? lst)
|
||||
#f
|
||||
(if (is-4digit-symbol? (car lst))
|
||||
(car lst)
|
||||
(loop (cdr lst))))))
|
||||
|
||||
;; Creates new member record based on the file and symlinks
|
||||
;; information received from the members directory. Any keyword
|
||||
;; arguments are converted to respective symbols in the dictionary.
|
||||
|
@ -66,7 +90,10 @@
|
|||
(let loop ((args args)
|
||||
(pairs `((file-name . ,file-name)
|
||||
(file-path . ,file-path)
|
||||
(symlinks . ,symlinks))))
|
||||
(symlinks . ,symlinks)
|
||||
(id . ,(string->number
|
||||
(symbol->string
|
||||
(get-4digit-symbol-from-list (cons file-name symlinks))))))))
|
||||
(if (null? args)
|
||||
(make-dict pairs)
|
||||
(if (not (keyword? (car args)))
|
||||
|
@ -173,21 +200,31 @@
|
|||
(and joined
|
||||
(month<=? joined (*current-month*)))))
|
||||
|
||||
;; Nickname as string
|
||||
(define (member-nick mr)
|
||||
(member-record-info mr 'nick))
|
||||
|
||||
;; Returns member id
|
||||
(define (member-id mr)
|
||||
(dict-ref mr 'id))
|
||||
|
||||
;; Self-tests
|
||||
(define (member-record-tests!)
|
||||
(run-tests
|
||||
member-record
|
||||
(test-equal? make-member-record
|
||||
(make-member-record "1234" "members/1234" '("member"))
|
||||
'((file-name . "1234")
|
||||
(make-member-record '|1234| "members/1234" '(|member|))
|
||||
'((file-name . |1234|)
|
||||
(file-path . "members/1234")
|
||||
(symlinks "member")))
|
||||
(symlinks |member|)
|
||||
(id . 1234)))
|
||||
(test-equal? make-member-record
|
||||
(make-member-record "1234" "members/1234" '("member") #:id 1234)
|
||||
'((id . 1234)
|
||||
(file-name . "1234")
|
||||
(make-member-record '|1234| "members/1234" '(|member|) #:msg "msg")
|
||||
'((msg . "msg")
|
||||
(file-name . |1234|)
|
||||
(file-path . "members/1234")
|
||||
(symlinks "member")))
|
||||
(symlinks |member|)
|
||||
(id . 1234)))
|
||||
(test-equal? member-record-set
|
||||
(member-record-set '() #:id 1234)
|
||||
'((id . 1234)))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue