factual-api 0.3.0 → 0.3.1
raw patch · 9 files changed
+45/−42 lines, 9 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Data.Factual.Shared.Table: Monetize :: Table
Files
- Data/Factual/Query/FacetsQuery.hs +1/−1
- Data/Factual/Query/ReadQuery.hs +1/−1
- Data/Factual/Query/SchemaQuery.hs +1/−1
- Data/Factual/Shared/Table.hs +6/−4
- Data/Factual/Write/Flag.hs +1/−1
- Data/Factual/Write/Submit.hs +5/−4
- Network/Factual/API.hs +1/−1
- factual-api.cabal +2/−2
- test/Tests.hs +27/−27
Data/Factual/Query/FacetsQuery.hs view
@@ -35,7 +35,7 @@ -- make a request. instance Query FacetsQuery where toPath query = (show $ table query)- ++ "facets?"+ ++ "/facets?" ++ joinAndFilter [ searchString $ search query , selectString $ select query , filtersString $ filters query
Data/Factual/Query/ReadQuery.hs view
@@ -38,7 +38,7 @@ -- make a request. instance Query ReadQuery where toPath query = (show $ table query)- ++ "read?"+ ++ "?" ++ joinAndFilter [ searchString $ search query , selectString $ select query , limitString $ limit query
Data/Factual/Query/SchemaQuery.hs view
@@ -16,4 +16,4 @@ -- SchemaQuery is a member of Query typeclass so that it can generate a response. instance Query SchemaQuery where- toPath (SchemaQuery table) = (show $ table) ++ "schema"+ toPath (SchemaQuery table) = (show $ table) ++ "/schema"
@@ -15,16 +15,18 @@ | WorldGeographies | ProductsCPG | ProductsCrosswalk+ | Monetize | Custom String deriving Eq -- Table is a member of the Show typeclass to generate the beginning of the path. instance Show Table where- show Places = "/t/places/"- show USRestaurants = "/t/restaurants-us/"- show Global = "/t/global/"+ show Places = "/t/places"+ show USRestaurants = "/t/restaurants-us"+ show Global = "/t/global" show HealthCareProviders = "/t/health-care-providers-us" show WorldGeographies = "/t/world-geographies" show ProductsCPG = "/t/products-cpg" show ProductsCrosswalk = "/t/products-crosswalk"- show (Custom name) = "/t/" ++ name ++ "/"+ show Monetize = "/places/monetize"+ show (Custom name) = "/t/" ++ name
Data/Factual/Write/Flag.hs view
@@ -40,7 +40,7 @@ -- The Flag type is a member of the Write typeclass so it can be sent as a post -- request to the API. instance Write Flag where- path flag = (show $ table flag) ++ (factualId flag) ++ "/flag"+ path flag = (show $ table flag) ++ "/" ++ (factualId flag) ++ "/flag" body flag = "problem=" ++ (show $ problem flag) ++ "&" ++ "user=" ++ (user flag) ++ "&" ++ joinAndFilter [ commentString flag
Data/Factual/Write/Submit.hs view
@@ -33,10 +33,11 @@ -- The following functions are helpers for the Write typeclass functions. pathString :: Submit -> String pathString submit- | factualId submit == Nothing = (show $ table submit) ++ "submit"- | otherwise = (show $ table submit) ++- (fromJust $ factualId submit) ++- "/submit"+ | factualId submit == Nothing = (show $ table submit) ++ "/submit"+ | otherwise = (show $ table submit)+ ++ "/"+ ++ (fromJust $ factualId submit)+ ++ "/submit" valuesString :: M.Map String String -> String valuesString values = "{" ++ join "," (map valueString $ M.keys values) ++ "}"
Network/Factual/API.hs view
@@ -106,7 +106,7 @@ extractJSON = fromJust . decode . rspPayload headersList :: [(String, String)]-headersList = [("X-Factual-Lib", "factual-haskell-driver-0.3.0")]+headersList = [("X-Factual-Lib", "factual-haskell-driver-0.3.1")] basePath :: String basePath = "http://api.v3.factual.com"
factual-api.cabal view
@@ -1,9 +1,9 @@ name: factual-api-version: 0.3.0+version: 0.3.1 license: BSD3 license-file: LICENSE.txt category: API, Web-copyright: (c) 2011 Rudiger Lippert+copyright: (c) 2012 Rudiger Lippert author: Rudiger Lippert <rudy@factual.com> maintainer: Rudiger Lippert <rudy@factual.com> stability: stable
test/Tests.hs view
@@ -73,22 +73,22 @@ where token = generateToken key secret placeTablePathTest = TestCase (do- let expected = "/t/places/read?include_count=false"+ let expected = "/t/places?include_count=false" let path = toPath $ blankReadQuery { table = Places } assertEqual "Correct path for places table" expected path) restaurantsTablePathTest = TestCase (do- let expected = "/t/restaurants-us/read?include_count=false"+ let expected = "/t/restaurants-us?include_count=false" let path = toPath $ blankReadQuery { table = USRestaurants } assertEqual "Correct path for us restaurants table" expected path) globalTablePathTest = TestCase (do- let expected = "/t/global/read?include_count=false"+ let expected = "/t/global?include_count=false" let path = toPath $ blankReadQuery { table = Global } assertEqual "Correct path for global table" expected path) customTablePathTest = TestCase (do- let expected = "/t/foo/read?include_count=false"+ let expected = "/t/foo?include_count=false" let path = toPath $ blankReadQuery { table = Custom "foo" } assertEqual "Correct path for custom table" expected path) @@ -103,117 +103,117 @@ assertEqual "Correct path for geocode" expected path) andSearchPathTest = TestCase (do- let expected = "/t/places/read?q=foo%20bar&include_count=false"+ let expected = "/t/places?q=foo%20bar&include_count=false" let path = toPath $ blankReadQuery { search = AndSearch ["foo", "bar"] } assertEqual "Correct path for ANDed search" expected path) orSearchPathTest = TestCase (do- let expected = "/t/places/read?q=foo%2Cbar&include_count=false"+ let expected = "/t/places?q=foo%2Cbar&include_count=false" let path = toPath $ blankReadQuery { search = OrSearch ["foo", "bar"] } assertEqual "Correct path for ANDed search" expected path) selectPathTest = TestCase (do- let expected = "/t/places/read?select=foo%2Cbar&include_count=false"+ let expected = "/t/places?select=foo%2Cbar&include_count=false" let path = toPath $ blankReadQuery { select = ["foo", "bar"] } assertEqual "Correct path for select terms" expected path) limitPathTest = TestCase (do- let expected = "/t/places/read?limit=321&include_count=false"+ let expected = "/t/places?limit=321&include_count=false" let path = toPath $ blankReadQuery { limit = Just 321 } assertEqual "Correct path for limit" expected path) offsetPathTest = TestCase (do- let expected = "/t/places/read?offset=321&include_count=false"+ let expected = "/t/places?offset=321&include_count=false" let path = toPath $ blankReadQuery { offset = Just 321 } assertEqual "Correct path for offset" expected path) equalNumFilterTest = TestCase (do- let expected = "/t/places/read?filters=%7B%22field%22%3A123.4%7D&include_count=false"+ let expected = "/t/places?filters=%7B%22field%22%3A123.4%7D&include_count=false" let path = toPath $ blankReadQuery { filters = [EqualNum "field" 123.4] } assertEqual "Correct path for equal number filter" expected path) equalStrFilterTest = TestCase (do- let expected = "/t/places/read?filters=%7B%22field%22%3A%22value%22%7D&include_count=false"+ let expected = "/t/places?filters=%7B%22field%22%3A%22value%22%7D&include_count=false" let path = toPath $ blankReadQuery { filters = [EqualStr "field" "value"] } assertEqual "Correct path for equal string filter" expected path) notEqualNumFilterTest = TestCase (do- let expected = "/t/places/read?filters=%7B%22field%22%3A%7B%22%24neq%22%3A123.4%7D%7D&include_count=false"+ let expected = "/t/places?filters=%7B%22field%22%3A%7B%22%24neq%22%3A123.4%7D%7D&include_count=false" let path = toPath $ blankReadQuery { filters = [NotEqualNum "field" 123.4] } assertEqual "Correct path for not equal number filter" expected path) notEqualStrFilterTest = TestCase (do- let expected = "/t/places/read?filters=%7B%22field%22%3A%7B%22%24neq%22%3A%22value%22%7D%7D&include_count=false"+ let expected = "/t/places?filters=%7B%22field%22%3A%7B%22%24neq%22%3A%22value%22%7D%7D&include_count=false" let path = toPath $ blankReadQuery { filters = [NotEqualStr "field" "value"] } assertEqual "Correct path for not equal string filter" expected path) inNumListFilterTest = TestCase (do- let expected = "/t/places/read?filters=%7B%22field%22%3A%7B%22%24in%22%3A%5B123.4%2C5432.1%5D%7D%7D&include_count=false"+ let expected = "/t/places?filters=%7B%22field%22%3A%7B%22%24in%22%3A%5B123.4%2C5432.1%5D%7D%7D&include_count=false" let path = toPath $ blankReadQuery { filters = [InNumList "field" [123.4, 5432.1]] } assertEqual "Correct path for in number list filter" expected path) inStrListFilterTest = TestCase (do- let expected = "/t/places/read?filters=%7B%22field%22%3A%7B%22%24in%22%3A%5B%22value%22%2C%22other%22%5D%7D%7D&include_count=false"+ let expected = "/t/places?filters=%7B%22field%22%3A%7B%22%24in%22%3A%5B%22value%22%2C%22other%22%5D%7D%7D&include_count=false" let path = toPath $ blankReadQuery { filters = [InStrList "field" ["value","other"]] } assertEqual "Correct path for in string list filter" expected path) notInNumListFilterTest = TestCase (do- let expected = "/t/places/read?filters=%7B%22field%22%3A%7B%22%24nin%22%3A%5B123.4%2C5432.1%5D%7D%7D&include_count=false"+ let expected = "/t/places?filters=%7B%22field%22%3A%7B%22%24nin%22%3A%5B123.4%2C5432.1%5D%7D%7D&include_count=false" let path = toPath $ blankReadQuery { filters = [NotInNumList "field" [123.4, 5432.1]] } assertEqual "Correct path for not in number list filter" expected path) notInStrListFilterTest = TestCase (do- let expected = "/t/places/read?filters=%7B%22field%22%3A%7B%22%24nin%22%3A%5B%22value%22%2C%22other%22%5D%7D%7D&include_count=false"+ let expected = "/t/places?filters=%7B%22field%22%3A%7B%22%24nin%22%3A%5B%22value%22%2C%22other%22%5D%7D%7D&include_count=false" let path = toPath $ blankReadQuery { filters = [NotInStrList "field" ["value","other"]] } assertEqual "Correct path for not in string list filter" expected path) beginsWithFilterTest = TestCase (do- let expected = "/t/places/read?filters=%7B%22field%22%3A%7B%22%24bw%22%3A%22val%22%7D%7D&include_count=false"+ let expected = "/t/places?filters=%7B%22field%22%3A%7B%22%24bw%22%3A%22val%22%7D%7D&include_count=false" let path = toPath $ blankReadQuery { filters = [BeginsWith "field" "val"] } assertEqual "Correct path for begins with filter" expected path) notBeginsWithFilterTest = TestCase (do- let expected = "/t/places/read?filters=%7B%22field%22%3A%7B%22%24nbw%22%3A%22val%22%7D%7D&include_count=false"+ let expected = "/t/places?filters=%7B%22field%22%3A%7B%22%24nbw%22%3A%22val%22%7D%7D&include_count=false" let path = toPath $ blankReadQuery { filters = [NotBeginsWith "field" "val"] } assertEqual "Correct path for not begins with filter" expected path) beginsWithAnyFilterTest = TestCase (do- let expected = "/t/places/read?filters=%7B%22field%22%3A%7B%22%24bwin%22%3A%5B%22val%22%2C%22ot%22%5D%7D%7D&include_count=false"+ let expected = "/t/places?filters=%7B%22field%22%3A%7B%22%24bwin%22%3A%5B%22val%22%2C%22ot%22%5D%7D%7D&include_count=false" let path = toPath $ blankReadQuery { filters = [BeginsWithAny "field" ["val","ot"]] } assertEqual "Correct path for begins with any filter" expected path) notBeginsWithAnyFilterTest = TestCase (do- let expected = "/t/places/read?filters=%7B%22field%22%3A%7B%22%24nbwin%22%3A%5B%22val%22%2C%22ot%22%5D%7D%7D&include_count=false"+ let expected = "/t/places?filters=%7B%22field%22%3A%7B%22%24nbwin%22%3A%5B%22val%22%2C%22ot%22%5D%7D%7D&include_count=false" let path = toPath $ blankReadQuery { filters = [NotBeginsWithAny "field" ["val","ot"]] } assertEqual "Correct path for not begins with any filter" expected path) isBlankFilterTest = TestCase (do- let expected = "/t/places/read?filters=%7B%22field%22%3A%7B%22%24blank%22%3Atrue%7D%7D&include_count=false"+ let expected = "/t/places?filters=%7B%22field%22%3A%7B%22%24blank%22%3Atrue%7D%7D&include_count=false" let path = toPath $ blankReadQuery { filters = [IsBlank "field"] } assertEqual "Correct path for is blank filter" expected path) isNotBlankFilterTest = TestCase (do- let expected = "/t/places/read?filters=%7B%22field%22%3A%7B%22%24blank%22%3Afalse%7D%7D&include_count=false"+ let expected = "/t/places?filters=%7B%22field%22%3A%7B%22%24blank%22%3Afalse%7D%7D&include_count=false" let path = toPath $ blankReadQuery { filters = [IsNotBlank "field"] } assertEqual "Correct path for is not blank filter" expected path) andFilterTest = TestCase (do- let expected = "/t/places/read?filters=%7B%22%24and%22%3A%5B%7B%22field1%22%3A%7B%22%24blank%22%3Atrue%7D%7D%2C%7B%22field2%22%3A%7B%22%24blank%22%3Afalse%7D%7D%5D%7D&include_count=false"+ let expected = "/t/places?filters=%7B%22%24and%22%3A%5B%7B%22field1%22%3A%7B%22%24blank%22%3Atrue%7D%7D%2C%7B%22field2%22%3A%7B%22%24blank%22%3Afalse%7D%7D%5D%7D&include_count=false" let path = toPath $ blankReadQuery { filters = [And [IsBlank "field1", IsNotBlank "field2"]] } assertEqual "Correct path for and filter" expected path) orFilterTest = TestCase (do- let expected = "/t/places/read?filters=%7B%22%24or%22%3A%5B%7B%22field1%22%3A%7B%22%24blank%22%3Atrue%7D%7D%2C%7B%22field2%22%3A%7B%22%24blank%22%3Afalse%7D%7D%5D%7D&include_count=false"+ let expected = "/t/places?filters=%7B%22%24or%22%3A%5B%7B%22field1%22%3A%7B%22%24blank%22%3Atrue%7D%7D%2C%7B%22field2%22%3A%7B%22%24blank%22%3Afalse%7D%7D%5D%7D&include_count=false" let path = toPath $ blankReadQuery { filters = [Or [IsBlank "field1", IsNotBlank "field2"]] } assertEqual "Correct path for or filter" expected path) geoTest = TestCase (do- let expected = "/t/places/read?geo=%7B%22%24circle%22%3A%7B%22%24center%22%3A%5B300.1%2C%20200.3%5D%2C%22%24meters%22%3A100.5%7D%7D&include_count=false"+ let expected = "/t/places?geo=%7B%22%24circle%22%3A%7B%22%24center%22%3A%5B300.1%2C%20200.3%5D%2C%22%24meters%22%3A100.5%7D%7D&include_count=false" let path = toPath $ blankReadQuery { geo = Just (Circle 300.1 200.3 100.5) } assertEqual "Correct path for geo" expected path) includeCountTest = TestCase (do- let expected = "/t/places/read?include_count=true"+ let expected = "/t/places?include_count=true" let path = toPath $ blankReadQuery { includeCount = True } assertEqual "Correct path for include count" expected path)