mirror of
https://github.com/status-im/pluto.git
synced 2025-02-24 16:38:16 +00:00
Add subset type to property resolution
Signed-off-by: Julien Eluard <julien.eluard@gmail.com>
This commit is contained in:
parent
f3283d8c11
commit
3d7cd06a4b
@ -1,5 +1,6 @@
|
|||||||
(ns pluto.reader.hooks
|
(ns pluto.reader.hooks
|
||||||
(:require [clojure.string :as string]
|
(:require [clojure.string :as string]
|
||||||
|
[clojure.set :as set]
|
||||||
[pluto.reader.blocks :as blocks]
|
[pluto.reader.blocks :as blocks]
|
||||||
[pluto.reader.errors :as errors]
|
[pluto.reader.errors :as errors]
|
||||||
[pluto.reader.reference :as reference]
|
[pluto.reader.reference :as reference]
|
||||||
@ -9,7 +10,8 @@
|
|||||||
(fn [{:keys [type]} _ _ _]
|
(fn [{:keys [type]} _ _ _]
|
||||||
(cond
|
(cond
|
||||||
(keyword? type) type
|
(keyword? type) type
|
||||||
(set? type) :keyword-set
|
(:one-of type) :set
|
||||||
|
(set? type) :subset
|
||||||
(map? type) :map
|
(map? type) :map
|
||||||
(vector? type) :vector)))
|
(vector? type) :vector)))
|
||||||
|
|
||||||
@ -58,8 +60,11 @@
|
|||||||
(defmethod resolve-property :keyword [def hook _ _]
|
(defmethod resolve-property :keyword [def hook _ _]
|
||||||
(resolve-property-value keyword? def hook))
|
(resolve-property-value keyword? def hook))
|
||||||
|
|
||||||
(defmethod resolve-property :keyword-set [def hook _ _]
|
(defmethod resolve-property :set [def hook _ _]
|
||||||
(resolve-property-value (:type def) def hook))
|
(resolve-property-value (-> def :type :one-of) def hook))
|
||||||
|
|
||||||
|
(defmethod resolve-property :subset [def hook _ _]
|
||||||
|
(resolve-property-value #(set/subset? % (:type def)) def hook))
|
||||||
|
|
||||||
(declare parse-properties)
|
(declare parse-properties)
|
||||||
|
|
||||||
|
@ -64,15 +64,20 @@
|
|||||||
{}
|
{}
|
||||||
{'queries/id ""}))))
|
{'queries/id ""}))))
|
||||||
(testing "Set"
|
(testing "Set"
|
||||||
(is (= {:data :one} (hooks/resolve-property {:name :keyword :type #{:one :two :three}} {:keyword :one} {} {})))
|
(is (= {:data :one} (hooks/resolve-property {:name :keyword :type {:one-of #{:one :two :three}}} {:keyword :one} {} {})))
|
||||||
(is (= {:errors [{::errors/type ::errors/invalid-property-value
|
(is (= {:errors [{::errors/type ::errors/invalid-property-value
|
||||||
::errors/value :for}]}
|
::errors/value :for}]}
|
||||||
(hooks/resolve-property {:name :keyword :type #{:one :two :three}} {:keyword :for} {} {}))))
|
(hooks/resolve-property {:name :keyword :type {:one-of #{:one :two :three}}} {:keyword :for} {} {}))))
|
||||||
|
(testing "Subset"
|
||||||
|
(is (= {:data #{"a" "b"}} (hooks/resolve-property {:name :scope :type #{"a" "b" "c"}} {:scope #{"a" "b"}} {} {})))
|
||||||
|
(is (= {:errors [{::errors/type ::errors/invalid-property-value
|
||||||
|
::errors/value #{"a" "d"}}]}
|
||||||
|
(hooks/resolve-property {:name :scope :type #{"a" "b" "c"}} {:scope #{"a" "d"}} {} {}))))
|
||||||
(testing "Map"
|
(testing "Map"
|
||||||
(is (= {:data :one} (hooks/resolve-property {:name :keyword :type #{:one :two :three}} {:keyword :one} {} {})))
|
(is (= {:data :one} (hooks/resolve-property {:name :keyword :type {:one-of #{:one :two :three}}} {:keyword :one} {} {})))
|
||||||
(is (= {:errors [{::errors/type ::errors/invalid-property-value
|
(is (= {:errors [{::errors/type ::errors/invalid-property-value
|
||||||
::errors/value :for}]}
|
::errors/value :for}]}
|
||||||
(hooks/resolve-property {:name :keyword :type #{:one :two :three}} {:keyword :for} {} {})))))
|
(hooks/resolve-property {:name :keyword :type {:one-of #{:one :two :three}}} {:keyword :for} {} {})))))
|
||||||
|
|
||||||
(deftest parse
|
(deftest parse
|
||||||
(is (= [:text {} ""]
|
(is (= [:text {} ""]
|
||||||
@ -100,9 +105,9 @@
|
|||||||
(hooks/parse {:capacities {:hooks {'hooks/main {:properties {:name :string :child {:name :string :id :keyword}}}}}}
|
(hooks/parse {:capacities {:hooks {'hooks/main {:properties {:name :string :child {:name :string :id :keyword}}}}}}
|
||||||
{'hooks/main.1 {:name "name" :child {:name "name" :id :keyword}}})))
|
{'hooks/main.1 {:name "name" :child {:name "name" :id :keyword}}})))
|
||||||
(is (= {:data {'hooks/main.1 {:name "name" :child {:name "name" :type :one}}}}
|
(is (= {:data {'hooks/main.1 {:name "name" :child {:name "name" :type :one}}}}
|
||||||
(hooks/parse {:capacities {:hooks {'hooks/main {:properties {:name :string :child {:name :string :type #{:one :two :three}}}}}}}
|
(hooks/parse {:capacities {:hooks {'hooks/main {:properties {:name :string :child {:name :string :type {:one-of #{:one :two :three}}}}}}}}
|
||||||
{'hooks/main.1 {:name "name" :child {:name "name" :type :one}}})))
|
{'hooks/main.1 {:name "name" :child {:name "name" :type :one}}})))
|
||||||
|
|
||||||
(is (= {:data {'hooks/main.1 {:name "name" :children [{:name "name" :scopes [{:scope :one}]} {:name "name" :scopes [{:scope :two}]}]}}}
|
(is (= {:data {'hooks/main.1 {:name "name" :children [{:name "name" :scopes [{:scope :one}]} {:name "name" :scopes [{:scope :two}]}]}}}
|
||||||
(hooks/parse {:capacities {:hooks {'hooks/main {:properties {:name :string :children [{:name :string :scopes [{:scope #{:one :two :three}}]}]}}}}}
|
(hooks/parse {:capacities {:hooks {'hooks/main {:properties {:name :string :children [{:name :string :scopes [{:scope {:one-of #{:one :two :three}}}]}]}}}}}
|
||||||
{'hooks/main.1 {:name "name" :children [{:name "name" :scopes [{:scope :one}]} {:name "name" :scopes [{:scope :two}]}]}})))))
|
{'hooks/main.1 {:name "name" :children [{:name "name" :scopes [{:scope :one}]} {:name "name" :scopes [{:scope :two}]}]}})))))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user