duck1123/jiksnu

View on GitHub
src/jiksnu/actions/domain_actions.clj

Summary

Maintainability
Test Coverage
(ns jiksnu.actions.domain-actions
  (:require [ciste.config :refer [config]]
            [jiksnu.model :as model]
            [jiksnu.model.domain :as model.domain]
            [jiksnu.templates.actions :as templates.actions]
            [jiksnu.transforms :as transforms]
            [jiksnu.transforms.domain-transforms :as transforms.domain]
            [jiksnu.util :as util])
  (:import jiksnu.model.Domain))

(def model-ns 'jiksnu.model.domain)

(defonce delete-hooks (ref []))

(defn prepare-create
  [domain]
  (-> domain
      transforms.domain/set-local
      transforms.domain/set-discovered
      transforms/set-created-time
      transforms/set-updated-time
      transforms/set-no-links))

(defn prepare-delete
  ([domain]
   (prepare-delete domain @delete-hooks))
  ([domain hooks]
   (if (seq hooks)
     (recur ((first hooks) domain) (rest hooks))
     domain)))

(def add-link* (templates.actions/make-add-link* model.domain/collection-name))

;; FIXME: this is always hitting the else branch
(defn add-link
  [item link]
  (if (model/get-link item (:rel link) (:type link))
    item
    (add-link* item link)))

(defn delete
  [domain]
  (let [domain (prepare-delete domain)]
    (model.domain/delete domain)))

(defn edit-page
  [domain]
  domain)

(defn show
  [domain]
  domain)

(defn host-meta
  [ctx]
  nil)

(def index*
  (templates.actions/make-indexer 'jiksnu.model.domain
                                  :sort-clause {:username 1}))

(defn index
  [& options]
  (apply index* options))

(defn create
  [params]
  (let [item (prepare-create params)]
    (model.domain/create item)))

(defn find-or-create
  [params]
  (or (model.domain/fetch-by-id (:_id params))
      (create params)))

(defn find-or-create-for-url
  "Return a domain object that matche the domain of the provided url"
  [url]
  (find-or-create (util/get-domain-name url)))

(defn current-domain
  []
  (find-or-create {:_id (config :domain)
                   :local true}))