git.iko.soy/typeable/bloodhound
on master help sign in
Semverification
b9139e9Chris Allen
bloodhound.cabal+26−24
@@ -64,23 +64,24 @@ library
64 Database.Bloodhound.Common.Script
64 Database.Bloodhound.Common.Script
65 hs-source-dirs: src
65 hs-source-dirs: src
66 build-depends: base >= 4.3 && <5,
66 build-depends: base >= 4.3 && <5,
67+ aeson >= 0.11.1,
68+ blaze-builder,
67 bytestring >= 0.10.0 && <0.11,
69 bytestring >= 0.10.0 && <0.11,
68 containers >= 0.5.0.0 && <0.6,
70 containers >= 0.5.0.0 && <0.6,
69− aeson >= 0.11.1,
71+ exceptions,
72+ hashable,
70 http-client >= 0.4.30 && <0.6,
73 http-client >= 0.4.30 && <0.6,
74+ http-types >= 0.8 && <0.13,
75+ mtl >= 1.0 && <2.3,
71 network-uri >= 2.6 && <2.7,
76 network-uri >= 2.6 && <2.7,
77+ scientific >= 0.3.0.0 && <0.4.0.0,
72 semigroups >= 0.15 && <0.19,
78 semigroups >= 0.15 && <0.19,
73− time >= 1.4 && <1.9,
79+ semver,
74 text >= 0.11 && <1.3,
80 text >= 0.11 && <1.3,
75− mtl >= 1.0 && <2.3,
81+ time >= 1.4 && <1.9,
76 transformers >= 0.2 && <0.6,
82 transformers >= 0.2 && <0.6,
77− http-types >= 0.8 && <0.13,
83+ unordered-containers,
78− vector >= 0.10.9 && <0.13,
84+ vector >= 0.10.9 && <0.13
79− scientific >= 0.3.0.0 && <0.4.0.0,
80− blaze-builder,
81− exceptions,
82− hashable,
83− unordered-containers
84 default-language: Haskell2010
85 default-language: Haskell2010
85
86
86test-suite bloodhound-tests
87test-suite bloodhound-tests
@@ -109,28 +110,29 @@ test-suite bloodhound-tests
109 Test.Suggest
110 Test.Suggest
110 Test.Templates
111 Test.Templates
111 build-depends: base,
112 build-depends: base,
113+ QuickCheck,
114+ aeson,
112 bloodhound,
115 bloodhound,
113 bytestring,
116 bytestring,
114− http-client,
115− http-types,
116 containers,
117 containers,
118+ errors,
119+ exceptions,
117 hspec >= 1.8,
120 hspec >= 1.8,
118− text,
121+ http-client,
119− time,
122+ http-types,
123+ microlens,
120− aeson,
124+ microlens-aeson,
121− semigroups,
122− QuickCheck,
123− vector,
124− unordered-containers >= 0.2.5.0 && <0.3,
125 mtl,
125 mtl,
126+ network-uri,
126 pretty-simple,
127 pretty-simple,
127 quickcheck-arbitrary-template,
128 quickcheck-arbitrary-template,
128 quickcheck-properties,
129 quickcheck-properties,
129− errors,
130+ semigroups,
130− exceptions,
131+ semver,
131 temporary,
132 temporary,
133+ text,
134+ time,
132 unix-compat,
135 unix-compat,
133− network-uri,
136+ unordered-containers >= 0.2.5.0 && <0.3,
134− microlens,
137+ vector
135− microlens-aeson
136 default-language: Haskell2010
138 default-language: Haskell2010
src/Database/V5/Bloodhound/Internal/Client.hs+8−9
@@ -12,11 +12,10 @@ import Bloodhound.Import
12import qualified Data.Text as T
12import qualified Data.Text as T
13import qualified Data.Traversable as DT
13import qualified Data.Traversable as DT
14import qualified Data.HashMap.Strict as HM
14import qualified Data.HashMap.Strict as HM
15+import qualified Data.SemVer as SemVer
15import qualified Data.Vector as V
16import qualified Data.Vector as V
16−import qualified Data.Version as Vers
17import GHC.Enum
17import GHC.Enum
18import Network.HTTP.Client
18import Network.HTTP.Client
19−import qualified Text.ParserCombinators.ReadP as RP
20import Text.Read (Read(..))
19import Text.Read (Read(..))
21import qualified Text.Read as TR
20import qualified Text.Read as TR
22
21
@@ -98,7 +97,7 @@ data Version = Version { number :: VersionNumber
98
97
99-- | Traditional software versioning number
98-- | Traditional software versioning number
100newtype VersionNumber = VersionNumber
99newtype VersionNumber = VersionNumber
101− { versionNumber :: Vers.Version }
100+ { versionNumber :: SemVer.Version }
102 deriving (Eq, Ord, Show)
101 deriving (Eq, Ord, Show)
103
102
104{-| 'Status' is a data type for describing the JSON body returned by
103{-| 'Status' is a data type for describing the JSON body returned by
@@ -2398,12 +2397,12 @@ instance FromJSON Version where
2398 <*> o .: "lucene_version"
2397 <*> o .: "lucene_version"
2399
2398
2400instance ToJSON VersionNumber where
2399instance ToJSON VersionNumber where
2401− toJSON = toJSON . Vers.showVersion . versionNumber
2400+ toJSON = toJSON . SemVer.toText . versionNumber
2402
2401
2403instance FromJSON VersionNumber where
2402instance FromJSON VersionNumber where
2404− parseJSON = withText "VersionNumber" (parse . T.unpack)
2403+ parseJSON = withText "VersionNumber" parse
2405 where
2404 where
2406− parse s = case filter (null . snd)(RP.readP_to_S Vers.parseVersion s) of
2405+ parse t =
2406+ case SemVer.fromText t of
2407+ (Left err) -> fail err
2407− [(v, _)] -> pure (VersionNumber v)
2408+ (Right v) -> return (VersionNumber v)
2408− [] -> fail ("Invalid version string " ++ s)
2409− xs -> fail ("Ambiguous version string " ++ s ++ " (" ++ intercalate ", " (Vers.showVersion . fst <$> xs) ++ ")")
stack-8.2.yaml+2−2
@@ -7,9 +7,9 @@ packages:
7 - './examples'
7 - './examples'
8
8
9extra-deps:
9extra-deps:
10− - quickcheck-properties-0.1
11− - http-types-0.12.1
12 - aeson-1.3.0.0
10 - aeson-1.3.0.0
11+ - http-types-0.12.1
13 - quickcheck-arbitrary-template-0.2.0.0
12 - quickcheck-arbitrary-template-0.2.0.0
13+ - quickcheck-properties-0.1
14
14
15resolver: lts-11.6
15resolver: lts-11.6
tests/V5/Test/Common.hs+21−21
@@ -6,7 +6,7 @@ module Test.Common where
6import Test.Import
6import Test.Import
7
7
8import qualified Data.Map as M
8import qualified Data.Map as M
9−import qualified Data.Version as Vers
9+import qualified Data.SemVer as SemVer
10import qualified Network.HTTP.Types.Status as NHTS
10import qualified Network.HTTP.Types.Status as NHTS
11
11
12testServer :: Server
12testServer :: Server
@@ -50,31 +50,31 @@ instance ToJSON ParentMapping where
50 , "extra" .= object ["type" .= ("keyword" :: Text)]
50 , "extra" .= object ["type" .= ("keyword" :: Text)]
51 ]]
51 ]]
52
52
53−es13 :: Vers.Version
53+es11 :: SemVer.Version
54−es13 = Vers.Version [1, 3, 0] []
54+es11 = SemVer.version 1 1 0 [] []
55
55
56−es12 :: Vers.Version
56+es13 :: SemVer.Version
57−es12 = Vers.Version [1, 2, 0] []
57+es13 = SemVer.version 1 3 0 [] []
58
58
59−es11 :: Vers.Version
59+es12 :: SemVer.Version
60−es11 = Vers.Version [1, 1, 0] []
60+es12 = SemVer.version 1 2 0 [] []
61
61
62−es14 :: Vers.Version
62+es14 :: SemVer.Version
63−es14 = Vers.Version [1, 4, 0] []
63+es14 = SemVer.version 1 4 0 [] []
64
64
65−es15 :: Vers.Version
65+es15 :: SemVer.Version
66−es15 = Vers.Version [1, 5, 0] []
66+es15 = SemVer.version 1 5 0 [] []
67
67
68−es16 :: Vers.Version
68+es16 :: SemVer.Version
69−es16 = Vers.Version [1, 6, 0] []
69+es16 = SemVer.version 1 6 0 [] []
70
70
71−es20 :: Vers.Version
71+es20 :: SemVer.Version
72−es20 = Vers.Version [2, 0, 0] []
72+es20 = SemVer.version 2 0 0 [] []
73
73
74−es50 :: Vers.Version
74+es50 :: SemVer.Version
75−es50 = Vers.Version [5, 0, 0] []
75+es50 = SemVer.version 5 0 0 [] []
76
76
77−getServerVersion :: IO (Maybe Vers.Version)
77+getServerVersion :: IO (Maybe SemVer.Version)
78getServerVersion = fmap extractVersion <$> withTestEnv getStatus
78getServerVersion = fmap extractVersion <$> withTestEnv getStatus
79 where
79 where
80 extractVersion = versionNumber . number . version
80 extractVersion = versionNumber . number . version
@@ -282,11 +282,11 @@ searchExpectSource src expected = do
282 liftIO $
282 liftIO $
283 value `shouldBe` expected
283 value `shouldBe` expected
284
284
285−atleast :: Vers.Version -> IO Bool
285+atleast :: SemVer.Version -> IO Bool
286atleast v = getServerVersion >>= \x -> return $ x >= Just v
286atleast v = getServerVersion >>= \x -> return $ x >= Just v
287
287
288−atmost :: Vers.Version -> IO Bool
288+atmost :: SemVer.Version -> IO Bool
289atmost v = getServerVersion >>= \x -> return $ x <= Just v
289atmost v = getServerVersion >>= \x -> return $ x <= Just v
290
290
291−is :: Vers.Version -> IO Bool
291+is :: SemVer.Version -> IO Bool
292is v = getServerVersion >>= \x -> return $ x == Just v
292is v = getServerVersion >>= \x -> return $ x == Just v
tests/V5/Test/Generators.hs+7−3
@@ -14,7 +14,7 @@ import qualified Data.List as L
14import qualified Data.List.NonEmpty as NE
14import qualified Data.List.NonEmpty as NE
15import qualified Data.Map as M
15import qualified Data.Map as M
16import qualified Data.Text as T
16import qualified Data.Text as T
17−import qualified Data.Version as Vers
17+import qualified Data.SemVer as SemVer
18import Test.QuickCheck.TH.Generators
18import Test.QuickCheck.TH.Generators
19
19
20import Test.ApproxEq
20import Test.ApproxEq
@@ -215,9 +215,13 @@ instance Arbitrary NodeAttrFilter where
215 return (NodeAttrFilter n ts)
215 return (NodeAttrFilter n ts)
216
216
217instance Arbitrary VersionNumber where
217instance Arbitrary VersionNumber where
218− arbitrary = mk . fmap getPositive . getNonEmpty <$> arbitrary
218+ arbitrary = do
219+ major <- posInt
220+ minor <- posInt
221+ patch <- posInt
222+ return $ VersionNumber $ SemVer.version major minor patch [] []
219 where
223 where
220− mk versions = VersionNumber (Vers.Version versions [])
224+ posInt = getPositive <$> arbitrary
221
225
222instance Arbitrary TemplateQueryKeyValuePairs where
226instance Arbitrary TemplateQueryKeyValuePairs where
223 arbitrary = TemplateQueryKeyValuePairs . HM.fromList <$> arbitrary
227 arbitrary = TemplateQueryKeyValuePairs . HM.fromList <$> arbitrary