summaryrefslogtreecommitdiff
path: root/src/names.lisp
blob: b355405810510a6963f78aab492c62268ee0b360 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
;;;; names.lisp -- a protocol for getting the names of things, and
;;;; generally referring to objects with strings.

(in-package :dnd)

(defgeneric unique-name (object)
  (:documentation "Returns a unique name for an object, or NIL if it does not have one.")
  (:method ((ob t)) nil))

(defmethod unique-name ((adventure adventure))
  (title adventure))

(defmethod unique-name ((hero hero))
  (name hero))

(defgeneric urlpath (object)
  (:documentation "Return the path to the object given a particular")
  (:method ((object has-uid))
    "If the object has a unique human readable name, urlify that name and
incorporate it into the urlpath. Otherwise use the object's uid.  

Returns /inflection/class/identifier."
    (format nil "/~a/~a"
            (urlify (class-name (class-of object)))
            (urlify (or (unique-name object) (uid object))))))