# -*- mode: snippet -*-
# name: define_shared_constant
# key: define_shared_constant
# group: define.object oriented
# type: command
# --
(let* ((snippet-content '())
       (pragma-snippet (car (magik-yasnippet-pragma-snippet nil)))
       (dollar-count (cadr (magik-yasnippet-pragma-snippet nil)))
       (doc-string (magik-yasnippet-documentation))
       (constant-line
        (concat
         (magik-yasnippet-prev-class-name-with-dot) "define_shared_constant(:${"
         (number-to-string (+ dollar-count 1))
         ":name}, ${"
         (number-to-string (+ dollar-count 2))
         ":value}, ${"
         (number-to-string (+ dollar-count 3))
         ":$$(yas-completing-read \"
Private?:
##  private?         get
##  --------------------
##  :private/_true   pri
##  :public/_false   pub
\"
'(:private :public _true _false))})")))

  (setq snippet-content
        (delq nil
              (list pragma-snippet
                    (unless (string-empty-p doc-string) doc-string)
                    constant-line
                    "$"
                    ""
                    "$0")))

  (yas-expand-snippet (string-join snippet-content "\n")))