Skip to content

Commit

Permalink
Don't convert records to maps when reading
Browse files Browse the repository at this point in the history
  • Loading branch information
r0man committed Dec 23, 2015
1 parent 4173d01 commit f63acfd
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
8 changes: 5 additions & 3 deletions src/main/om/next/impl/parser.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -157,9 +157,11 @@
key)))))))

(defn path-meta [x path]
(let [x' (cond->> x
(map? x) (into {} (map (fn [[k v]] [k (path-meta v (conj path k))])))
(vector? x) (into [] (map-indexed #(path-meta %2 (conj path %1)))))]
(let [x' (cond
(record? x) x
(map? x) (into {} (map (fn [[k v]] [k (path-meta v (conj path k))])) x)
(vector? x) (into [] (map-indexed #(path-meta %2 (conj path %1))) x)
:else x)]
(cond-> x'
#?(:clj (instance? clojure.lang.IObj x')
:cljs (satisfies? IWithMeta x'))
Expand Down
16 changes: 16 additions & 0 deletions src/test/om/next/tests.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,12 @@
{:value v}
{:remote true}))

(defmethod read :location
[{:keys [state]} k params]
(if-let [v (get @state k)]
{:value v}
{:remote true}))

(defmethod read :woz/noz
[{:keys [state]} k params]
(if-let [v (get @state k)]
Expand Down Expand Up @@ -272,6 +278,16 @@
(is (= (p {:state st} [:foo/bar] :remote) []))
(is (= (p {:state st} [:foo/bar :baz/woz] :remote) [:baz/woz]))))

(defrecord Point [lat lon])

(deftest test-parse-defrecord
(let [location (->Point 1 2)
state (atom {:location location})
result (p {:state state} [:location])]
(is (= result {:location location}))
(is (instance? Point (:location result)))
(is (= (meta result) {:om-path []}))))

(deftest test-value-and-remote
(let [st (atom {:woz/noz 1})]
(is (= (p {:state st} [:woz/noz]) {:woz/noz 1}))
Expand Down

0 comments on commit f63acfd

Please sign in to comment.