]> gitweb.michael.orlitzky.com - dead/htsn-import.git/commitdiff
Fix present-but-empty vleague parsing in jfilexml. 0.2.2
authorMichael Orlitzky <michael@orlitzky.com>
Fri, 6 Mar 2015 21:20:46 +0000 (16:20 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Fri, 6 Mar 2015 21:20:46 +0000 (16:20 -0500)
Bump to version 0.2.2 in the cabal file.

.ghci
htsn-import.cabal
src/Misc.hs [new file with mode: 0644]
src/TSN/XML/EarlyLine.hs
src/TSN/XML/JFile.hs
src/TSN/XML/Scores.hs
test/Doctests.hs

diff --git a/.ghci b/.ghci
index dfeb6df952c075114e4111f7edd675e29073090e..ecb35937593ce9f932c881df76d68fb58a24f198 100644 (file)
--- a/.ghci
+++ b/.ghci
@@ -8,6 +8,7 @@
   src/Configuration.hs
   src/ConnectionString.hs
   src/ExitCodes.hs
+  src/Misc.hs
   src/OptionalConfiguration.hs
   src/TSN/Codegen.hs
   src/TSN/Database.hs
@@ -41,6 +42,7 @@ import CommandLine
 import Configuration
 import ConnectionString
 import ExitCodes
+import Misc
 import OptionalConfiguration
 import TSN.Codegen
 import TSN.Database
index df0f59c5cf2611a2243d700e99c35638437a5f0f..30378fe659cb48c6f7ccd75a20541b06138b2371 100644 (file)
@@ -1,5 +1,5 @@
 name:           htsn-import
-version:        0.2.1
+version:        0.2.2
 cabal-version:  >= 1.8
 author:         Michael Orlitzky
 maintainer:    Michael Orlitzky <michael@orlitzky.com>
@@ -283,6 +283,7 @@ executable htsn-import
     Configuration
     ConnectionString
     ExitCodes
+    Misc
     OptionalConfiguration
     TSN.Codegen
     TSN.Database
diff --git a/src/Misc.hs b/src/Misc.hs
new file mode 100644 (file)
index 0000000..cb992c7
--- /dev/null
@@ -0,0 +1,24 @@
+-- | Miscellaneous utility functions
+module Misc (
+  double_just )
+where
+
+-- | If given 'Nothing', return 'Nothing'. Otherwise wrap our argument
+--   in another 'Just'. This is used when handling optional XML
+--   elements that are optionally empty. If the element is missing, we
+--   want 'Nothing'. And if the contents are missing, we want
+--   'Nothing' then too. But if something is present, we need @Just
+--   (Just foo)@ for the types to match up.
+--
+--   ==== __Examples__:
+--
+--   >>> double_just Nothing
+--   Nothing
+--   >>> double_just (Just 2)
+--   Just (Just 2)
+--
+double_just :: (Maybe a) -> Maybe (Maybe a)
+double_just val =
+  case val of
+    Nothing -> Nothing
+    just_something -> Just just_something
index 7f5a89048d93afb202237aa03f746e0d41cfaa82..fe11b980f5503a9a0bf5373fe04ec2638b3721a9 100644 (file)
@@ -67,6 +67,7 @@ import Text.XML.HXT.Core (
   xpWrap )
 
 -- Local imports.
+import Misc ( double_just )
 import TSN.Codegen ( tsn_codegen_config )
 import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate )
 import TSN.Picklers (
@@ -572,10 +573,6 @@ pickle_team =
 
     to_tuple' (EarlyLineGameTeamXml u v w x y z) =
       (u, double_just v, w, x, double_just y, double_just z)
-      where
-        double_just val = case val of
-               Nothing -> Nothing
-               just_something -> Just just_something
 
 
 
index 80d13fe8354b5d353f343924e7e9bd9ab6fda90a..f570784083f22ef662e451ba42bb8a25055c5d90 100644 (file)
@@ -23,7 +23,7 @@ module TSN.XML.JFile (
 where
 
 -- System imports
-import Control.Monad ( forM_ )
+import Control.Monad ( forM_, join )
 import Data.List ( intercalate )
 import Data.String.Utils ( split )
 import Data.Time ( UTCTime(..) )
@@ -61,6 +61,7 @@ import Text.XML.HXT.Core (
 
 
 -- Local imports
+import Misc ( double_just )
 import TSN.Codegen ( tsn_codegen_config )
 import TSN.Database ( insert_or_select )
 import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate )
@@ -458,7 +459,7 @@ pickle_gamelist =
 pickle_game :: PU JFileGameXml
 pickle_game =
   xpElem "game" $
-    xpWrap (from_tuple, H.convert) $
+    xpWrap (from_tuple, to_tuple') $
     xp14Tuple (xpElem "game_id" xpInt)
               (xpElem "schedule_id" xpInt)
               pickle_odds_info
@@ -466,7 +467,7 @@ pickle_game =
               (xpElem "Game_Date" xp_date_padded)
               (xpElem "Game_Time" xp_tba_time)
               pickle_away_team
-              (xpOption $ xpElem "vleague" xpText)
+              (xpOption $ xpElem "vleague" (xpOption xpText))
               pickle_home_team
               (xpOption $ xpElem "hleague" xpText)
               (xpElem "vscore" xpInt)
@@ -474,7 +475,11 @@ pickle_game =
               (xpOption $ xpElem "time_r" xpText)
               pickle_status
   where
-    from_tuple = uncurryN JFileGameXml
+    from_tuple (a,b,c,d,e,f,g,h,i,j,k,l,m,n) =
+      JFileGameXml a b c d e f g (join h) i j k l m n
+
+    to_tuple' (JFileGameXml a b c d e f g h i j k l m n) =
+      (a, b, c, d, e, f, g, double_just h, i, j, k, l, m, n)
 
 
 pickle_odds_info :: PU JFileGameOddsInfo
index 858e62bc1a6d53ca50301e21de5e120eb4d561bb..f7a03a61bac53376b69055258739cf333a0739db 100644 (file)
@@ -57,6 +57,7 @@ import Text.XML.HXT.Core (
   xpWrap )
 
 -- Local imports.
+import Misc ( double_just )
 import TSN.Codegen ( tsn_codegen_config )
 import TSN.Database ( insert_or_select )
 import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate )
@@ -450,11 +451,7 @@ pickle_status =
   where
     from_tuple (x,y,z) = ScoreGameStatus x (join y) z
     to_tuple' ScoreGameStatus{..} =
-      (db_status_numeral, s, db_status_text)
-      where
-        s = case db_status_type of
-              Nothing -> Nothing
-              Just _  -> Just db_status_type
+      (db_status_numeral, double_just db_status_type, db_status_text)
 
 
 -- | Convert a 'ScoreGameXml' to/from \<game\>.
@@ -522,8 +519,7 @@ pickle_hteam =
                (xpOption xpText) -- Team name
   where
     from_tuple (x,y,z)= HTeamXml (HTeam (Team x Nothing z)) (join y)
-    to_tuple' (HTeamXml (HTeam t) Nothing) = (team_id t, Nothing, name t)
-    to_tuple' (HTeamXml (HTeam t) jhp) = (team_id t, Just jhp, name t)
+    to_tuple' (HTeamXml (HTeam t) jhp) = (team_id t, double_just jhp, name t)
 
 
 
index af4bcb5085a7c5650db14a0c9bfc6434e1e3630e..07e4bd7393eb80f92f3eb7b70158de2b17fcb1d3 100644 (file)
@@ -9,5 +9,6 @@ import Test.DocTest ( doctest )
 main :: IO ()
 main = doctest [ "-isrc",
                  "-idist/build/autogen",
+                 "src/Misc.hs",
                  "src/TSN/Codegen.hs",
                  "src/TSN/Picklers.hs"]