summaryrefslogtreecommitdiff
path: root/www/build-site.el
blob: 92f6339caf6e4719ac6c84908fb5c662dbb99ee1 (about) (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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
;; -*- 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 org-publish-project-alist )
        ( print success-report )
        ( ) ) ) ) )

;;; The Object Interface

( defun object-compose ( publication-instance )
  ( funcall ( plist-get publication-instance :object-compose ) ) )

( defun object-get-projects ( publication-instance data-projects )
  ( funcall
    ( plist-get publication-instance :object-get-projects ) data-projects ) )

( defun object-report ( publication-instance )
  ( funcall ( plist-get publication-instance :object-report ) ) )

;;; The User Logic

( defun export-project-alist ( publication-instance )
  ( object-compose publication-instance )
  ( object-report publication-instance ) )

( defun import-data ( publication-instance project-data )
  ( let ( ( data-projects ( plist-get project-data :data-projects ) ) )
    ( object-get-projects publication-instance data-projects ) ) )

;;; The User Interface

( defun publish ( publication-instance &rest project-data )
  ( import-data publication-instance project-data )
  ( export-project-alist publication-instance )
  ( ) )