Skip to content

Instantly share code, notes, and snippets.

@comnik
Created November 14, 2018 00:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save comnik/0edf87956e722f03a788332161ba4bc6 to your computer and use it in GitHub Desktop.
Save comnik/0edf87956e722f03a788332161ba4bc6 to your computer and use it in GitHub Desktop.
Generating data relationships with datamorgana
(s/def :db/id (s/with-gen number? #(gen/fmap (fn [_] (clojure.lang.RT/nextID)) (gen/int))))
(s/def :entity/name (s/and string? #(< 3 (count %) 10)))
(s/def :entity/shareholder :db/id)
(s/def :person/id (s/with-gen string? #(s/gen #{"Alice" "Bob" "Eve" "Mabel" "Dipper"})))
(s/def :person/alias :db/id)
(s/def :company/name (s/with-gen string? #(s/gen #{"Alice" "Bob" "Eve" "Mabel" "Dipper"})))
(s/def :company/subsidiary :db/id)
(def genschema
{:person/id {:db/unique :db.unique/identity}
:person/alias {:db/valueType :db.type/ref
:db/cardinality :db.cardinality/many}
:entity/shareholder {:db/valueType :db.type/ref
:db/cardinality :db.cardinality/many}
:company/name {:db/unique :db.unique/identity}
:company/subsidiary {:db/valueType :db.type/ref
:db/cardinality :db.cardinality/many}})
;; Generate
(def tx0
(d/pull-many
(morgana/create-db genschema)
'[:entity/name
{:entity/shareholder [:company/name
{:company/subsidiary [:company/name]}]}] (range 10)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment