[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/ebdb 423be4d 14/33: Add ebdb-field-singleton abstract f
From: |
Eric Abrahamsen |
Subject: |
[elpa] externals/ebdb 423be4d 14/33: Add ebdb-field-singleton abstract field class |
Date: |
Sun, 3 Sep 2017 17:02:21 -0400 (EDT) |
branch: externals/ebdb
commit 423be4dcdbbae6d75c8c8aca3e5aa993c523b698
Author: Eric Abrahamsen <address@hidden>
Commit: Eric Abrahamsen <address@hidden>
Add ebdb-field-singleton abstract field class
* ebdb.el (ebdb-field-singleton): Records can only hold one instance
of any field subclassing this class.
(ebdb-record-insert-field): Check for existing same-class instance,
and delete it if present.
---
ebdb.el | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/ebdb.el b/ebdb.el
index cab67e2..535f4ef 100644
--- a/ebdb.el
+++ b/ebdb.el
@@ -1124,6 +1124,18 @@ process."
displayed in the *EBDB* buffer. Use for mildly sensitive
information.")
+;;; The singleton field type. Records may only have one instance of
+;;; fields of this type. (Unrelated to `eieio-singleton'.)
+
+;; There's a method of `ebdb-record-insert-field' for this class down
+;; under the definition of `ebdb-record'.
+(defclass ebdb-field-singleton (ebdb-field)
+ nil
+ :abstract t
+ :documentation
+ "A field class mixin that ensures a record can only have one
+ instance of that field class.")
+
;;; User-defined fields. There are two kinds. The first is
;;; `ebdb-field-user', which provides no information about labels or
;;; slots, but simply gives us the right to live in the "fields" slot
@@ -2629,6 +2641,17 @@ by the field, or else raising the error
`ebdb-related-unfound'.")
;; The following functions are here because they need to come after
;; `ebdb-record' has been defined.
+(cl-defmethod ebdb-record-insert-field ((record ebdb-record)
+ (field ebdb-field-singleton)
+ &optional slot)
+ (let ((existing (ebdb-record-field record (eieio-object-class field))))
+ (when existing
+ (ebdb-record-delete-field record existing))
+ (condition-case nil
+ (cl-call-next-method)
+ ;; Put the old one back if something goes wrong.
+ (error (ebdb-record-insert-field record existing)))))
+
(cl-defmethod ebdb-field-image-get ((field ebdb-field-image) (record
ebdb-record))
"Return the image for image field FIELD.
- [elpa] externals/ebdb updated (c6bfefc -> a5ffda9), Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 5f8429b 02/33: Use insert/delete methods with edit-field-customize, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 999374c 03/33: Make ebdb-hashtable weak on value, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb b4a24c1 07/33: Revert "Make ebdb-hashtable weak on value", Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb cb92680 04/33: Fix mis-named variable, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb be4168a 05/33: People have hyphens and apostrophes in their surnames, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 235dad2 10/33: Fix to database disabling, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 3d819bc 17/33: Have ebdb-do-records filter out stub uuids, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 423be4d 14/33: Add ebdb-field-singleton abstract field class,
Eric Abrahamsen <=
- [elpa] externals/ebdb 9b07ad6 15/33: Add gender field class, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 123ebae 09/33: Base ebdb-db-save method should be on ebdb-db class, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 63509c6 01/33: Work on getting ebdb-vm.el back into place, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 8291f3d 13/33: Refine database disabling/re-enabling, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 21ed4b7 19/33: Don't hide cl-print-object definitions, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 99a1563 12/33: Fix custom type for database buffer-char slot, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb aa668d7 08/33: Add "force" argument to ebdb-db-save, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 7bed578 11/33: Provide more careful control of finding related records, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 9b1a2cf 25/33: Use simpler home-grown version of char-fold-to-regexp, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb c362c2a 23/33: Protect against searching labeled fields with no label, Eric Abrahamsen, 2017/09/03