string mewa-string
number mewa-currency
integer mewa-integer
- currency mewa-currency))
+ currency mewa-currency
+ clsql:generalized-boolean mewa-boolean))
;;; an alist of model-class-name . attributes
;;; should really be a hash-table.
(cons (car definition)
(plist-union (cdr definition)
(cddr (find-attribute model name))))
- definition)))
+ definition)))
(defmethod perform-set-attributes ((model t) definitions)
(dolist (def definitions)
(defmethod perform-set-attribute-properties ((model t) definitions)
(dolist (def definitions)
(funcall #'set-attribute-properties model (car def) (cdr def))))
+
+(defmethod perform-define-attributes ((model t) attributes)
+ (loop for attribute in attributes
+ do (destructuring-bind (name type &rest args)
+ attribute
+ (cond ((eq type t)
+ ;;use the existing (default) type
+ (set-attribute-properties model name args))
+ ((not (null type))
+ ;;set the type as well
+ (set-attribute model name (cons type args)))))))
+
+(defmacro define-attributes (models &body attribute-definitions)
+ `(progn
+ ,@(loop for model in models
+ collect `(perform-define-attributes (quote ,model) (quote ,attribute-definitions)))
+ (mapcar #'find-class-attributes (quote ,models ))))
(defmethod default-attributes ((model t))
;;;presentations
-
-
(defcomponent mewa ()
((instance :accessor instance :initarg :instance)
(attributes
(car (second attribute))
(second attribute))
*presentation-slot-type-mapping*)
- (error "Can't find slot type for ~A in ~A but ~A" attribute *presentation-slot-type-mapping* (gethash 'mewa:has-very-many *presentation-slot-type-mapping*)))))
+ (error "Can't find slot type for ~A in ~A" attribute *presentation-slot-type-mapping* ))))
(cons (first attribute) (apply #'make-instance
class-name