Re: Clojure spec keys is considering all key within namespace although it is not defined

2017-06-28 Thread Alex Miller
:opt specs serve a) as documentation for the spec and b) when using s/keys 
as a generator.

On Wednesday, June 28, 2017 at 2:25:50 PM UTC-5, Dan Burton wrote:
>
> This design is surprising to me. If this is the case, then I don't 
> understand the point of `:opt` for s/keys.
>
> -- Dan Burton
>
> On Wed, Jun 28, 2017 at 2:17 AM, Max Penet  wrote:
>
>> Hi,
>>
>> It's by design, as the doc of s/keys states:
>>
>> In addition, the values of *all* namespace-qualified keys will be validated
>> (and possibly destructured) by any registered specs. Note: there is
>> no support for inline value specification, by design.
>>
>>
>>
>> So if the ns'ed key in your map is registered as a spec it will be 
>> validated. In theory you could just validate with (s/keys) in your case, 
>> specifying keys in req is useful to check presence and gen and in the case 
>> of opt just for gen. The docstring is terse but dense in meaning/information.
>>
>>
>> On Wednesday, June 28, 2017 at 11:04:34 AM UTC+2, Mamun wrote:
>>>
>>> Hi All,
>>>
>>> Clojure spec keys is considering all key within namespace although it is 
>>> not defined.
>>>
>>> Here is an example 
>>>
>>> (s/def :person/fname string?)
>>> (s/def :person/lname string?)
>>> (s/def :person/id int?)
>>>
>>>  ;;With only fname and lname
>>> (s/def :app/person (s/keys :req [:person/fname :person/lname]))
>>>
>>> ;;Success
>>> (s/explain-str :app/person
>>>{:person/lname "Abdullah"
>>> :person/fname "Mamun"} )
>>>
>>> ;;Success
>>> (s/explain-str :app/person
>>>{:person/lname "Abdullah"
>>> :person/fname "Mamun"
>>> :id "123"} )
>>>
>>> ;;fail with namespace id
>>> (s/explain-str :app/person
>>>{:person/lname "Abdullah"
>>> :person/fname "Mamun"
>>> :person/id "1234"})
>>>
>>>
>>> Is it bug or am I doing something wrong here?
>>>
>>> Br,
>>> Mamun
>>>
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to clojure+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: Clojure spec keys is considering all key within namespace although it is not defined

2017-06-28 Thread Dan Burton
This design is surprising to me. If this is the case, then I don't
understand the point of `:opt` for s/keys.

-- Dan Burton

On Wed, Jun 28, 2017 at 2:17 AM, Max Penet  wrote:

> Hi,
>
> It's by design, as the doc of s/keys states:
>
> In addition, the values of *all* namespace-qualified keys will be validated
> (and possibly destructured) by any registered specs. Note: there is
> no support for inline value specification, by design.
>
>
>
> So if the ns'ed key in your map is registered as a spec it will be validated. 
> In theory you could just validate with (s/keys) in your case, specifying keys 
> in req is useful to check presence and gen and in the case of opt just for 
> gen. The docstring is terse but dense in meaning/information.
>
>
> On Wednesday, June 28, 2017 at 11:04:34 AM UTC+2, Mamun wrote:
>>
>> Hi All,
>>
>> Clojure spec keys is considering all key within namespace although it is
>> not defined.
>>
>> Here is an example
>>
>> (s/def :person/fname string?)
>> (s/def :person/lname string?)
>> (s/def :person/id int?)
>>
>>  ;;With only fname and lname
>> (s/def :app/person (s/keys :req [:person/fname :person/lname]))
>>
>> ;;Success
>> (s/explain-str :app/person
>>{:person/lname "Abdullah"
>> :person/fname "Mamun"} )
>>
>> ;;Success
>> (s/explain-str :app/person
>>{:person/lname "Abdullah"
>> :person/fname "Mamun"
>> :id "123"} )
>>
>> ;;fail with namespace id
>> (s/explain-str :app/person
>>{:person/lname "Abdullah"
>> :person/fname "Mamun"
>> :person/id "1234"})
>>
>>
>> Is it bug or am I doing something wrong here?
>>
>> Br,
>> Mamun
>>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: Clojure spec keys is considering all key within namespace although it is not defined

2017-06-28 Thread Max Penet
Hi,

It's by design, as the doc of s/keys states:

In addition, the values of *all* namespace-qualified keys will be validated
(and possibly destructured) by any registered specs. Note: there is
no support for inline value specification, by design.



So if the ns'ed key in your map is registered as a spec it will be validated. 
In theory you could just validate with (s/keys) in your case, specifying keys 
in req is useful to check presence and gen and in the case of opt just for gen. 
The docstring is terse but dense in meaning/information.


On Wednesday, June 28, 2017 at 11:04:34 AM UTC+2, Mamun wrote:
>
> Hi All,
>
> Clojure spec keys is considering all key within namespace although it is 
> not defined.
>
> Here is an example 
>
> (s/def :person/fname string?)
> (s/def :person/lname string?)
> (s/def :person/id int?)
>
>  ;;With only fname and lname
> (s/def :app/person (s/keys :req [:person/fname :person/lname]))
>
> ;;Success
> (s/explain-str :app/person
>{:person/lname "Abdullah"
> :person/fname "Mamun"} )
>
> ;;Success
> (s/explain-str :app/person
>{:person/lname "Abdullah"
> :person/fname "Mamun"
> :id "123"} )
>
> ;;fail with namespace id
> (s/explain-str :app/person
>{:person/lname "Abdullah"
> :person/fname "Mamun"
> :person/id "1234"})
>
>
> Is it bug or am I doing something wrong here?
>
> Br,
> Mamun
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Clojure spec keys is considering all key within namespace although it is not defined

2017-06-28 Thread Mamun
Hi All,

Clojure spec keys is considering all key within namespace although it is 
not defined.

Here is an example 

(s/def :person/fname string?)
(s/def :person/lname string?)
(s/def :person/id int?)

 ;;With only fname and lname
(s/def :app/person (s/keys :req [:person/fname :person/lname]))

;;Success
(s/explain-str :app/person
   {:person/lname "Abdullah"
:person/fname "Mamun"} )

;;Success
(s/explain-str :app/person
   {:person/lname "Abdullah"
:person/fname "Mamun"
:id "123"} )

;;fail with namespace id
(s/explain-str :app/person
   {:person/lname "Abdullah"
:person/fname "Mamun"
:person/id "1234"})


Is it bug or am I doing something wrong here?

Br,
Mamun

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.