001  (ns dog-and-duck.quack.picky.control-variables
002    "Control variables for the picky validator.")
003  
004  ;;;     Copyright (C) Simon Brooke, 2022
005  
006  ;;;     This program is free software; you can redistribute it and/or
007  ;;;     modify it under the terms of the GNU General Public License
008  ;;;     as published by the Free Software Foundation; either version 2
009  ;;;     of the License, or (at your option) any later version.
010  
011  ;;;     This program is distributed in the hope that it will be useful,
012  ;;;     but WITHOUT ANY WARRANTY; without even the implied warranty of
013  ;;;     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
014  ;;;     GNU General Public License for more details.
015  
016  ;;;     You should have received a copy of the GNU General Public License
017  ;;;     along with this program; if not, write to the Free Software
018  ;;;     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
019  
020  (def ^:dynamic *reify-refs*
021    "If `true`, references to objects in fields will be reified and validated. 
022     If `false`, they won't, but an `:info` level fault report will be generated.
023     
024     There are several things in the spec which, in a document, may correctly be
025     either
026     
027     1. a fully fleshed out object, or
028     2. a URI pointing to such an object.
029     
030     Obviously to fully validate a document we ought to reify all the refs and 
031     check that they are themselves valid, but
032     
033     a. in some of the published test documents the URIs do not reference a
034        valid document;
035     b. there will be performance costs to reifying all the refs;
036     c. in perverse cases, reifying refs might result in runaway recursion.
037     
038     TODO: I think that in production this should default to `true`."
039    false)
040  
041  (def ^:dynamic *reject-severity*
042    "The severity at which the binary validator will return `false`.
043     
044     In practice documents seen in the wild do not typically appear to be 
045     fully valid, and this does not matter. This allows the sensitivity of
046     the binary validator (`dog-and-duck.quack.quack`) to be tuned. It's in
047     this (`dog-and-duck.quack.picky`) namespace, not that one, because this
048     namespace is where concerns about severity are handled."
049    :must)