Skip to content

Commit

Permalink
Update secrets and services to use components
Browse files Browse the repository at this point in the history
  • Loading branch information
Chris Barrett committed May 3, 2017
1 parent 1c092cf commit 8477c67
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 78 deletions.
4 changes: 2 additions & 2 deletions kubernetes-overview.el
Expand Up @@ -254,9 +254,9 @@
,(when (member 'pods sections)
`(pods-list ,state))
,(when (member 'secrets sections)
(kubernetes-secrets-render state))
`(secrets-list ,state))
,(when (member 'services sections)
(kubernetes-services-render state)))))
`(services-list ,state)))))


;; Overview buffer.
Expand Down
48 changes: 14 additions & 34 deletions kubernetes-secrets.el
Expand Up @@ -4,27 +4,29 @@

(require 'dash)

(require 'kubernetes-ast)
(require 'kubernetes-loading-container)
(require 'kubernetes-modes)
(require 'kubernetes-props)
(require 'kubernetes-state)
(require 'kubernetes-utils)
(require 'kubernetes-yaml)


;; Component
;; Components

(defconst kubernetes-secrets--column-heading
(propertize (format "%-45s %6s %6s" "Name" "Data" "Age")
'face 'magit-section-heading))

(defun kubernetes-secrets--format-detail (secret)
(kubernetes-ast-define-component secret-detail (secret)
(-let [(&alist 'metadata (&alist 'namespace ns 'creationTimestamp time)) secret]
`((section (namespace nil)
(nav-prop (:namespace-name ,ns)
(key-value 12 "Namespace" ,(propertize ns 'face 'kubernetes-namespace))))
(key-value 12 "Created" ,time))))

(defun kubernetes-secrets--format-line (state secret)
(kubernetes-ast-define-component secret-line (state secret)
(-let* ((current-time (kubernetes-state-current-time state))
(pending-deletion (kubernetes-state-secrets-pending-deletion state))
(marked-secrets (kubernetes-state-marked-secrets state))
Expand Down Expand Up @@ -52,45 +54,23 @@
(t
line))))))

(defun kubernetes-secrets-render-secret (state secret)
(kubernetes-ast-define-component secret (state secret)
`(section (,(intern (kubernetes-state-resource-name secret)) t)
(heading ,(kubernetes-secrets--format-line state secret))
(heading (secret-line ,state ,secret))
(section (details nil)
(indent
,@(kubernetes-secrets--format-detail secret)
(secret-detail ,secret)
(padding)))))

(defun kubernetes-secrets-render-secrets (state secrets &optional hidden)
(let ((secrets-set-p (kubernetes-state-secrets state)))
(kubernetes-ast-define-component secrets-list (state &optional hidden)
(-let [(&alist 'items secrets) (kubernetes-state-secrets state)]
`(section (secrets-container ,hidden)
,(cond
;; If the state is set and there are no secrets, write "None".
((and secrets-set-p (seq-empty-p secrets))
`((heading ,(concat (propertize "Secrets" 'face 'magit-header-line) " (0)"))
(indent
(section (secrets-list nil)
(propertize (face magit-dimmed) (line "None."))))))

;; If there are secrets, write sections for each secret.
(secrets
`((heading ,(concat (propertize "Secrets" 'face 'magit-header-line) " " (format "(%s)" (length secrets))))
(indent
(line ,kubernetes-secrets--column-heading)
,@(seq-map (lambda (it) (kubernetes-secrets-render-secret state it)) secrets))))

;; If there's no state, assume requests are in progress.
(t
`((heading "Secrets")
(indent
(line ,kubernetes-secrets--column-heading)
(section (secrets-list nil)
(propertize (face kubernetes-progress-indicator) (line "Fetching...")))))))
(header-with-count "Secrets" ,secrets)
(indent
(columnar-loading-container ,secrets ,kubernetes-secrets--column-heading
,(--map `(secret ,state ,it) secrets)))
(padding))))

(defun kubernetes-secrets-render (state &optional hidden)
(-let [(&alist 'items secrets) (kubernetes-state-secrets state)]
(kubernetes-secrets-render-secrets state secrets hidden)))


;; Requests and state management

Expand Down
43 changes: 13 additions & 30 deletions kubernetes-services.el
Expand Up @@ -4,7 +4,9 @@

(require 'dash)

(require 'kubernetes-ast)
(require 'kubernetes-kubectl)
(require 'kubernetes-loading-container)
(require 'kubernetes-modes)
(require 'kubernetes-props)
(require 'kubernetes-state)
Expand All @@ -13,13 +15,13 @@
(require 'kubernetes-yaml)


;; Component
;; Components

(defconst kubernetes-services--column-heading
(propertize (format "%-30s %15s %15s %6s" "Name" "Internal IP" "External IP" "Age")
'face 'magit-section-heading))

(defun kubernetes-services--format-details (service)
(kubernetes-ast-define-component service-details (service)
(-let ((detail
(lambda (key value)
(when value
Expand Down Expand Up @@ -53,7 +55,7 @@
(funcall detail "External IPs" (string-join ips ", ")))
(funcall detail "Ports" (string-join (seq-map format-ports ports) ", ")))))

(defun kubernetes-services--format-line (state service)
(kubernetes-ast-define-component service-line (state service)
(-let* ((current-time (kubernetes-state-current-time state))
(pending-deletion (kubernetes-state-services-pending-deletion state))
(marked-services (kubernetes-state-marked-services state))
Expand Down Expand Up @@ -86,40 +88,21 @@
(t
line))))))

(defun kubernetes-services-render-service (state service)
(kubernetes-ast-define-component service (state service)
`(section (,(intern (kubernetes-state-resource-name service)) t)
(heading ,(kubernetes-services--format-line state service))
(heading (service-line ,state ,service))
(indent
(section (details nil)
,@(kubernetes-services--format-details service)
(service-details ,service)
(padding)))))

(defun kubernetes-services-render (state &optional hidden)
(kubernetes-ast-define-component services-list (state &optional hidden)
(-let [(services-response &as &alist 'items services) (kubernetes-state-services state)]
`(section (services-container ,hidden)
,(cond

;; If the state is set and there are no services, write "None".
((and services-response (seq-empty-p services))
`((heading ,(concat (propertize "Services" 'face 'magit-header-line) " (0)"))
(indent
(section (services-list nil)
(propertize (face magit-dimmed) (line "None."))))))

;; If there are services, write sections for each service.
(services
`((heading ,(concat (propertize "Services" 'face 'magit-header-line) " " (format "(%s)" (length services))))
(indent
(line ,kubernetes-services--column-heading)
,@(seq-map (lambda (it) (kubernetes-services-render-service state it)) services))))

;; If there's no state, assume requests are in progress.
(t
`((heading "Services")
(indent
(line ,kubernetes-services--column-heading)
(section (services-list nil)
(propertize (face kubernetes-progress-indicator) (line "Fetching...")))))))
(header-with-count "Services" ,services)
(indent
(columnar-loading-container ,services ,kubernetes-services--column-heading
,(--map `(service ,state ,it) services)))
(padding))))


Expand Down
20 changes: 10 additions & 10 deletions test/kubernetes-overview-test.el
Expand Up @@ -16,16 +16,16 @@

(ert-deftest kubernetes-overview-test--renders-selected-sections-from-state ()
(test-helper-with-empty-state
(kubernetes-state-update-overview-sections '(configmaps secrets))
(kubernetes-ast-eval (kubernetes-overview-render (kubernetes-state)))

(let ((expected (with-temp-buffer
(kubernetes-ast-eval `(section (root nil)
,(kubernetes-errors-render (kubernetes-state))
(configmaps-list ,(kubernetes-state))
,(kubernetes-secrets-render (kubernetes-state))))
(string-trim (substring-no-properties (buffer-string))))))
(should (equal expected (string-trim (substring-no-properties (buffer-string))))))))
(kubernetes-state-update-overview-sections '(configmaps secrets))
(kubernetes-ast-eval (kubernetes-overview-render (kubernetes-state)))

(let ((expected (with-temp-buffer
(kubernetes-ast-eval `(section (root nil)
,(kubernetes-errors-render (kubernetes-state))
(configmaps-list ,(kubernetes-state))
(secrets-list ,(kubernetes-state))))
(string-trim (substring-no-properties (buffer-string))))))
(should (equal expected (string-trim (substring-no-properties (buffer-string))))))))


;; Aggregated overview component
Expand Down
2 changes: 1 addition & 1 deletion test/kubernetes-secrets-test.el
Expand Up @@ -10,7 +10,7 @@
(defconst sample-get-secrets-response (test-helper-json-resource "get-secrets-response.json"))

(defun draw-secrets-section (state)
(kubernetes-ast-eval (kubernetes-secrets-render state)))
(kubernetes-ast-eval `(secrets-list ,state)))


;; Shows "Fetching..." when state isn't initialized yet.
Expand Down
2 changes: 1 addition & 1 deletion test/kubernetes-services-test.el
Expand Up @@ -10,7 +10,7 @@
(defconst sample-get-services-response (test-helper-json-resource "get-services-response.json"))

(defun draw-services-section (state)
(kubernetes-ast-eval (kubernetes-services-render state)))
(kubernetes-ast-eval `(services-list ,state)))


;; Shows "Fetching..." when state isn't initialized yet.
Expand Down

0 comments on commit 8477c67

Please sign in to comment.