;; -*- lexical-binding: t; -*- ;;; The Object Prototype ( defun publication-object ( ) ( let ( ( object-projects ( list ) ) ( org-publish-project-alist ( list ) ) ( success-report "Build complete!" ) ) ( list :object-compose ( lambda ( ) ( setq org-publish-project-alist ( list object-projects ) ) ( ) ) :object-get-projects ( lambda ( data-projects ) ( setq object-projects ( append data-projects object-projects ) ) ( ) ) :object-report ( lambda ( ) ( print object-projects ) ( print org-publish-project-alist ) ( print success-report ) ( ) ) ) ) ) ;;; The Object Interface ( defun object-compose ( publication-instance ) ( plist-get publication-instance :object-compose ) ) ( defun object-get-projects ( publication-instance ) ( plist-get publication-instance :object-get-projects ) ) ( defun object-report ( publication-instance ) ( plist-get publication-instance :object-report ) ) ;;; The User Logic ;;; The User Interface ( defun publish ( publication-instance &rest project-data ) ( let ( ( data-projects ( plist-get project-data :data-projects ) ) ) ( funcall ( object-get-projects publication-instance ) data-projects ) ( funcall ( object-compose publication-instance ) ) ( funcall ( object-report publication-instance ) ) ( ) ) )