packages feed

graphql-w-persistent 0.2.0.0 → 0.2.0.1

raw patch · 3 files changed

+12/−4 lines, 3 files

Files

ChangeLog.md view
@@ -34,4 +34,8 @@ 
 ## 0.2.0.0 -- 2018-11-05
 
-* variables are available+* variables are available
+
+## 0.2.0.1 -- 2018-11-05
+
+* fix to accept empty variable arguments and default values
graphql-w-persistent.cabal view
@@ -10,7 +10,7 @@ -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.2.0.0
+version:             0.2.0.1
 
 -- A short (one-line) description of the package.
 synopsis:            Haskell GraphQL query parser-interpreter-data processor.
src/Components/Parsers/VariablesParser.hs view
@@ -8,18 +8,22 @@ 
 -- with a variables string and query string, we want the query variables, the type, and the value
 parseVariables :: String -> String -> [(String,String,String)]
-parseVariables [] _ = []
 parseVariables var qry = filterToDesired (parseVariableValuePairs var) (getVariableTypePairs qry)
 -- with variable-values and variable-types, we want query variable-type-values
 filterToDesired :: [(String,String)] -> [(String,String,Maybe String)] -> [(String,String,String)]
 filterToDesired _ [] = []
-filterToDesired [] tvar = E.throw MissingVariableValueException
+filterToDesired [] tvar = if (anyMaybeMissingValues tvar)==True then E.throw MissingVariableValueException else (getDefaultValues tvar)
 filterToDesired vvar tvars = [findVariableValue tvar vvar | tvar<-tvars]
 findVariableValue :: (String,String,Maybe String) -> [(String,String)] -> (String,String,String)
 findVariableValue (vname,vtype,vval) [] = if vval==Nothing then E.throw MissingVariableValueException else (vname,vtype,fromJust vval :: String)
 findVariableValue (vname1,vtype,vval1) ((vname2,vval2):t) = if (vname1==vname2) then (vname1,vtype,vval2) else (findVariableValue (vname1,vtype,vval1) t)
+anyMaybeMissingValues :: [(String,String,Maybe String)] -> Bool
+anyMaybeMissingValues vars = foldr (\(nam,typ,val) y -> (val==Nothing)||y) False vars
+getDefaultValues :: [(String,String,Maybe String)] -> [(String,String,String)]
+getDefaultValues vars = [(nam,typ,fromJust val) | (nam,typ,val)<-vars]
 -- from given variables argument, we want variable-values
 parseVariableValuePairs :: String -> [(String,String)]
+parseVariableValuePairs [] = []
 parseVariableValuePairs vars = castValues $ fromJSObject $ checkVariables (decode vars :: Result (JSObject JSValue))
 checkVariables :: Result (JSObject JSValue) -> JSObject JSValue
 checkVariables (Error str) = E.throw ReadVariablesException