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