Compare commits
2 commits
a612f070db
...
e44bdc2761
Author | SHA1 | Date | |
---|---|---|---|
e44bdc2761 | |||
d838ab5967 |
4 changed files with 31 additions and 15 deletions
|
@ -1,22 +1,30 @@
|
||||||
(ns org.domaindrivenarchitecture.activity-pub-poc.core
|
(ns org.domaindrivenarchitecture.activity-pub-poc.core
|
||||||
(:require [clojure.spec.alpha :as s]
|
(:require [clojure.spec.alpha :as s]
|
||||||
|
[clojure.walk :as walk]
|
||||||
[orchestra.core :refer [defn-spec]]
|
[orchestra.core :refer [defn-spec]]
|
||||||
[org.domaindrivenarchitecture.activity-pub-poc.spec-helper :as sh]
|
[org.domaindrivenarchitecture.activity-pub-poc.spec-helper :as sh]
|
||||||
[org.domaindrivenarchitecture.activity-pub-poc.activitystreams2 :as as]
|
|
||||||
[clojure.data.json :as json]))
|
[clojure.data.json :as json]))
|
||||||
|
|
||||||
( defn serialize-element [elem]
|
(defn normalize-value [v]
|
||||||
(if (and (sh/is-functional-property? (key elem))
|
(cond (map? v)
|
||||||
(sequential? (val elem)))
|
(walk/walk normalize-functional-property identity v)
|
||||||
{(key elem) (first (val elem))}
|
(sequential? v)
|
||||||
{(key elem) (val elem)}))
|
(map normalize-value v)
|
||||||
|
:else v))
|
||||||
|
|
||||||
|
(defn normalize-functional-property [elem]
|
||||||
|
(let [k (first elem)
|
||||||
|
v (second elem)]
|
||||||
|
(cond (and
|
||||||
|
(sequential? v)
|
||||||
|
(sh/is-functional-property? k))
|
||||||
|
{k (first (normalize-value v))}
|
||||||
|
:else {k (normalize-value v)})))
|
||||||
|
|
||||||
(defn serialize
|
(defn serialize
|
||||||
[as-map]
|
[as-map]
|
||||||
(json/write-str
|
(json/write-str
|
||||||
(map
|
(merge
|
||||||
serialize-element
|
{(keyword "@context") "https://www.w3.org/ns/activitystreams"}
|
||||||
(merge
|
(walk/walk normalize-functional-property identity as-map))
|
||||||
{(keyword "@context") "https://www.w3.org/ns/activitystreams"}
|
|
||||||
as-map))
|
|
||||||
:escape-slash false))
|
:escape-slash false))
|
|
@ -17,4 +17,8 @@
|
||||||
is-functional-property? boolean?
|
is-functional-property? boolean?
|
||||||
"Checks whether spec is a FunctionalProperty."
|
"Checks whether spec is a FunctionalProperty."
|
||||||
[spec s/spec?]
|
[spec s/spec?]
|
||||||
(some #(clojure.string/includes? % "FunctionalProperty") (s/describe spec)))
|
(if ( s/get-spec spec)
|
||||||
|
(some
|
||||||
|
#(clojure.string/includes? % "FunctionalProperty")
|
||||||
|
(s/describe spec))
|
||||||
|
false))
|
|
@ -3,14 +3,16 @@
|
||||||
[clojure.test :refer [deftest is are testing run-tests]]
|
[clojure.test :refer [deftest is are testing run-tests]]
|
||||||
[clojure.spec.alpha :as s]
|
[clojure.spec.alpha :as s]
|
||||||
[clojure.string :as str]
|
[clojure.string :as str]
|
||||||
|
[org.domaindrivenarchitecture.activity-pub-poc.activitystreams2 :as as]
|
||||||
[org.domaindrivenarchitecture.activity-pub-poc.core :as sut]))
|
[org.domaindrivenarchitecture.activity-pub-poc.core :as sut]))
|
||||||
|
|
||||||
(deftest should-serailize
|
(deftest should-serialize
|
||||||
(is (= (str "{\"@context\":\"https://www.w3.org/ns/activitystreams\","
|
(is (= (str "{\"@context\":\"https://www.w3.org/ns/activitystreams\","
|
||||||
"\"id\":\"http://example.org/likes/1\","
|
"\"id\":\"http://example.org/likes/1\","
|
||||||
"\"summary\":\"Sally liked a note\","
|
"\"summary\":\"Sally liked a note\","
|
||||||
"\"type\":\"Like\","
|
"\"type\":\"Like\","
|
||||||
"\"actor\":{"
|
"\"actor\":{"
|
||||||
|
"\"id\":\"http://example.org/persons/1\","
|
||||||
"\"type\":\"Person\","
|
"\"type\":\"Person\","
|
||||||
"\"name\":\"Sally\"},"
|
"\"name\":\"Sally\"},"
|
||||||
"\"object\":\"http://example.org/notes/1\"}")
|
"\"object\":\"http://example.org/notes/1\"}")
|
||||||
|
@ -18,6 +20,7 @@
|
||||||
{::as/id ["http://example.org/likes/1"]
|
{::as/id ["http://example.org/likes/1"]
|
||||||
::as/summary "Sally liked a note",
|
::as/summary "Sally liked a note",
|
||||||
::as/type "Like",
|
::as/type "Like",
|
||||||
::as/actor {::as/type "Person",
|
::as/actor {::as/id ["http://example.org/persons/1"]
|
||||||
|
::as/type "Person",
|
||||||
::as/name "Sally"},
|
::as/name "Sally"},
|
||||||
::as/object "http://example.org/notes/1"}))))
|
::as/object "http://example.org/notes/1"}))))
|
|
@ -8,4 +8,5 @@
|
||||||
|
|
||||||
(deftest shoult-test-spec-for-having-functional-property
|
(deftest shoult-test-spec-for-having-functional-property
|
||||||
(is (sut/is-functional-property? ::as2/id))
|
(is (sut/is-functional-property? ::as2/id))
|
||||||
(is (not (sut/is-functional-property? ::as2/Like))))
|
(is (not (sut/is-functional-property? ::as2/Like)))
|
||||||
|
(is (not (sut/is-functional-property? ::as2/NotExisting))))
|
Loading…
Reference in a new issue