-
Notifications
You must be signed in to change notification settings - Fork 520
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[bug] wrap-nested-params remove namespaces in keywords #362
Comments
Thank you for the issue report, but I'm afraid I don't understand your example. You're writing edn to the request body, but you're reporting a bug in form-encoded parameters, for middleware designed for use with form-encoded parameters. |
This middleware affect body request by removing namespaces. I think it shouldn't. Otherwise developers have to make 2 separate app: first for JSON / EDN, second for POST forms or add middleware separate to each response function. So if developer want to have responses for FORM inputs and JSON with namespaces in the same app:
For now I have plan to use only JSON / GraphQL and maybe EDN only, so this bug is not the issue for me at that moment. But I found it so I reported. Maybe somebody else will have the same issue and will find here solution. Figuring out this wrapper removes namespaces for requests take a while. For me solution is to just remove this middleware, because I have no plan to use it. It was there because I copy it from another app as default scratch to begin. |
It's a little more specific than that. One workaround is just to rearrange your middleware so that However, |
I'll take a quick look at this |
@weavejester When you say ignore non-string keys, you mean not operate on them and pass them along, yes? |
|
@kwladyka Thanks for the confirmation |
Spent a few hours looking at this (I'm new to Clojure, everything takes a while). I won't be doing any more with it. I'm including below my assessment should it prove useful for whoever picks it up. By my fallible understanding, Aside from the unlikely possibility of somebody relying on the current stringifying or namespace-truncating behavior--and maybe the need to benchmark the old and new implementation if there are any doubts about the probably trivial-in-most-to-all-reasonable-contexts performance difference--it seems like just write a few failing tests and drop a string check in (defn parse-nested-keys
"Parse a parameter name into a list of keys using a 'C'-like index
notation.
For example:
\"foo[bar][][baz]\"
=> [\"foo\" \"bar\" \"\" \"baz\"]"
[param-name]
(println param-name)
(let [[_ k ks] (re-matches #"(?s)(.*?)((?:\[.*?\])*)" (name param-name)) ; <- Add bare return here if param-name not string
keys (if ks (map second (re-seq #"\[(.*?)\]" ks)))]
(cons k keys))) |
params
valueWhat is wrong:
When
wrap-nested-params
is uncomment it removes all namespaces in 1-deep, but no deeper.{:action "sign-up", :email "[email protected]", :password "qwaszx", :foo #:bar{:baz "mee"}}
^ removed
:user/
, but not:bar/
.When it is commented I get values as I expected:
{:action "sign-up", :user/email "[email protected]", :user/password "qwaszx", :foo #:bar{:baz "mee"}}
How it should be
It shouldn't remove namespaces.
{:action "sign-up", :user/email "[email protected]", :user/password "qwaszx", :foo #:bar{:baz "mee"}}
The text was updated successfully, but these errors were encountered: