packages feed

hackernews 0.2.2.2 → 0.2.3.2

raw patch · 5 files changed

+60/−3 lines, 5 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Web.HackerNews: Job :: Text -> JobId -> Int -> Text -> UTCTime -> Text -> Text -> Text -> Bool -> Job
+ Web.HackerNews: JobId :: Int -> JobId
+ Web.HackerNews: data Job
+ Web.HackerNews: getJob :: JobId -> HackerNews (Maybe Job)
+ Web.HackerNews: jobBy :: Job -> Text
+ Web.HackerNews: jobDeleted :: Job -> Bool
+ Web.HackerNews: jobId :: Job -> JobId
+ Web.HackerNews: jobScore :: Job -> Int
+ Web.HackerNews: jobText :: Job -> Text
+ Web.HackerNews: jobTime :: Job -> UTCTime
+ Web.HackerNews: jobTitle :: Job -> Text
+ Web.HackerNews: jobType :: Job -> Text
+ Web.HackerNews: jobUrl :: Job -> Text
+ Web.HackerNews: newtype JobId

Files

hackernews.cabal view
@@ -1,5 +1,5 @@ name:                hackernews-version:             0.2.2.2+version:             0.2.3.2 description:         API for news.ycombinator.com license:             MIT synopsis:            API for Hacker News@@ -21,6 +21,7 @@                      , Web.HackerNews.Update                      , Web.HackerNews.Comment                      , Web.HackerNews.Story+                     , Web.HackerNews.Job                      , Web.HackerNews.Util   hs-source-dirs:      src   build-depends:       HsOpenSSL    >= 0.10.5
src/Web/HackerNews.hs view
@@ -8,6 +8,7 @@        , getPoll        , getPollOpt        , getUser+       , getJob        , getTopStories        , getMaxItem        , getUpdates@@ -23,6 +24,8 @@        , StoryId   (..)        , User      (..)        , UserId    (..)+       , Job       (..)+       , JobId     (..)        , Update    (..)        , MaxItem        , TopStories@@ -58,6 +61,11 @@ -- | Retrieve a `User` by `UserId` getUser :: UserId -> HackerNews (Maybe User) getUser (UserId userid) = buildHNRequest $ "user/" <> userid++------------------------------------------------------------------------------+-- | Retrieve a Job+getJob :: JobId -> HackerNews (Maybe Job)+getJob (JobId jobid) = buildHNRequest $ "item/" <> toText jobid  ------------------------------------------------------------------------------ -- | Retrieve the Top Stories on Hacker News
+ src/Web/HackerNews/Job.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE OverloadedStrings #-}+module Web.HackerNews.Job where++import           Control.Applicative ((<*>), (<$>))+import           Control.Monad       (MonadPlus (mzero))+import           Data.Aeson          (FromJSON (parseJSON), Value (Object),+                                      (.:), (.:?), (.!=))+import           Data.Text           (Text)+import           Data.Time           (UTCTime)++import           Web.HackerNews.Util (fromSeconds)++------------------------------------------------------------------------------+-- | Types+data Job = Job {+    jobBy        :: Text+  , jobId        :: JobId+  , jobScore     :: Int+  , jobText      :: Text+  , jobTime      :: UTCTime+  , jobTitle     :: Text+  , jobType      :: Text+  , jobUrl       :: Text+  , jobDeleted   :: Bool+  } deriving (Show)++newtype JobId+      = JobId Int+      deriving (Show, Eq)++------------------------------------------------------------------------------+-- | JSON Instances+instance FromJSON Job where+  parseJSON (Object o) =+      Job <$> o .: "by"+          <*> (JobId <$> o .: "id")+          <*> o .: "score"+          <*> o .: "text"+          <*> (fromSeconds <$> o .: "time")+          <*> o .: "title"+          <*> o .: "type"+          <*> o .: "url"+          <*> o .:? "deleted" .!= False+  parseJSON _ = mzero+
src/Web/HackerNews/Types.hs view
@@ -13,6 +13,7 @@ import           Web.HackerNews.Story   as H import           Web.HackerNews.User    as H import           Web.HackerNews.Update  as H+import           Web.HackerNews.Job  as H   
tests/Test.hs view
@@ -9,11 +9,12 @@ main :: IO () main = hspec $ do   describe "Hacker News API Tests" $ do-    (story, comment, user, poll, pollOpt, topStories, maxItem, updates) <- -      runIO $ hackerNews $ (,,,,,,,)   <$> +    (story, comment, user, job, poll, pollOpt, topStories, maxItem, updates) <- +      runIO $ hackerNews $ (,,,,,,,,)  <$>          getStory   (StoryId 8863)      <*>         getComment (CommentId 2921983) <*>         getUser    (UserId "dmjio")    <*>+        getJob     (JobId 8437631)     <*>         getPoll    (PollId 126809)     <*>         getPollOpt (PollOptId 160705)  <*>         getTopStories                  <*>@@ -22,6 +23,7 @@     it "Retrieves a Story"     $ isJust story     it "Retrieves a Comment"   $ isJust comment     it "Retrieves a User"      $ isJust user+    it "Retrieves a Job"       $ isJust job     it "Retrieves a Poll"      $ isJust poll     it "Retrieves a Pollopt"   $ isJust pollOpt     it "Retrieves Top Stories" $ isJust topStories