Selaa lähdekoodia

Extractible now returns an Output

jherve 1 vuosi sitten
vanhempi
commit
090b3edddd

+ 6 - 5
src/LinkedIn.purs

@@ -9,6 +9,7 @@ import Effect (Effect)
 import LinkedIn.DetachedNode (DetachedNode, toDetached)
 import LinkedIn.Extractible (class Extractible)
 import LinkedIn.Extractible as LE
+import LinkedIn.Output.Types (Output)
 import LinkedIn.PageUrl (PageUrl, pageUrlP)
 import LinkedIn.QueryRunner (QueryError, QueryRunner', runQuery)
 import LinkedIn.UI.Elements.Parser (fromDetachedToUI)
@@ -28,19 +29,19 @@ getContext dom = do
       Left _ -> Left "Unexpected URL"
       Right page -> Right page
 
-run :: forall a t.
+run :: forall t.
   Traversable t
-  => Extractible t a
+  => Extractible t
   => Proxy t
   -> Document
-  -> Effect (Either String a)
+  -> Effect (Either String Output)
 run prox dom = do
   detached <- runToDetached prox dom
   pure $ extract LE.extract $ toUI detached
 
-runToDetached :: forall t a.
+runToDetached :: forall t.
   Traversable t
-  => Extractible t a
+  => Extractible t
   => Proxy t
   -> Document
   -> Effect (Either QueryError (t DetachedNode))

+ 3 - 2
src/LinkedIn/Extractible.purs

@@ -1,10 +1,11 @@
 module LinkedIn.Extractible where
 
 import Data.Either (Either)
+import LinkedIn.Output.Types (Output)
 import LinkedIn.QueryRunner (QueryRunner')
 import LinkedIn.UI.Elements.Types (UIElement)
 import Web.DOM (Document, Node)
 
-class Extractible t out | t -> out where
+class Extractible t where
   query :: QueryRunner' Document (t Node)
-  extract ∷ t UIElement → Either String out
+  extract ∷ t UIElement → Either String Output

+ 3 - 3
src/LinkedIn/Page/JobOffer.purs

@@ -7,8 +7,8 @@ import Data.Generic.Rep (class Generic)
 import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import LinkedIn.Extractible (class Extractible)
-import LinkedIn.Jobs.JobOffer (JobOffer)
 import LinkedIn.Jobs.JobOffer as JJO
+import LinkedIn.Output.Types (Output(..))
 import LinkedIn.QueryRunner (subQueryOne)
 import LinkedIn.UI.Components.JobsUnifiedTopCard (JobsUnifiedTopCardElement, queryJobsUnifiedTopCardElement)
 
@@ -33,9 +33,9 @@ instance Traversable JobOfferPage where
 
   traverse = \x -> traverseDefault x
 
-instance Extractible JobOfferPage JobOffer where
+instance Extractible JobOfferPage where
   query n = do
     card <- subQueryOne queryJobsUnifiedTopCardElement "div.jobs-unified-top-card" n
     pure $ JobOfferPage card
 
-  extract (JobOfferPage tabs) = JJO.fromUI tabs
+  extract (JobOfferPage tabs) = OutJobOffer <$> JJO.fromUI tabs

+ 3 - 2
src/LinkedIn/Page/Projects.purs

@@ -9,6 +9,7 @@ import Data.List.Types (NonEmptyList)
 import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
 import LinkedIn.Extractible (class Extractible)
+import LinkedIn.Output.Types (Output(..))
 import LinkedIn.Profile.Project (Project)
 import LinkedIn.Profile.Project as PP
 import LinkedIn.QueryRunner (QueryRunner', subQueryMany)
@@ -45,9 +46,9 @@ query n = do
 extract ∷ ProjectsPage UIElement → Either String (NonEmptyList Project)
 extract (ProjectsPage cards) = traverse PP.fromUI cards
 
-instance Extractible ProjectsPage (NonEmptyList Project) where
+instance Extractible ProjectsPage where
   query n = do
     cards <- subQueryMany queryArtDecoCard "section.artdeco-card > div ~ div > div > div > ul > li" n
     pure $ ProjectsPage cards
 
-  extract (ProjectsPage cards) = traverse PP.fromUI cards
+  extract (ProjectsPage cards) = OutProjects <$> traverse PP.fromUI cards

+ 3 - 3
src/LinkedIn/Page/Skills.purs

@@ -8,7 +8,7 @@ import Data.List.Types (NonEmptyList)
 import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
 import LinkedIn.Extractible (class Extractible)
-import LinkedIn.Profile.Skill (Skill)
+import LinkedIn.Output.Types (Output(..))
 import LinkedIn.Profile.Skill as PS
 import LinkedIn.QueryRunner (subQueryMany)
 import LinkedIn.UI.Components.ArtDecoTab (ArtDecoTabElement, queryArtDecoTab)
@@ -34,9 +34,9 @@ instance Traversable SkillsPage where
 
   traverse = \x -> traverseDefault x
 
-instance Extractible SkillsPage (NonEmptyList Skill) where
+instance Extractible SkillsPage where
   query n = do
     tabs <- subQueryMany queryArtDecoTab "div.artdeco-tabs > div > div > div > div > ul > li" n
     pure $ SkillsPage tabs
 
-  extract (SkillsPage tabs) = traverse PS.fromUI tabs
+  extract (SkillsPage tabs) = OutSkills <$> traverse PS.fromUI tabs

+ 3 - 3
src/LinkedIn/Page/WorkExperiences.purs

@@ -8,7 +8,7 @@ import Data.List.Types (NonEmptyList)
 import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
 import LinkedIn.Extractible (class Extractible)
-import LinkedIn.Profile.WorkExperience (WorkExperience)
+import LinkedIn.Output.Types (Output(..))
 import LinkedIn.Profile.WorkExperience as PWE
 import LinkedIn.QueryRunner (subQueryMany)
 import LinkedIn.UI.Components.ArtDecoCard (ArtDecoCardElement, queryArtDecoCard)
@@ -34,9 +34,9 @@ instance Traversable WorkExperiencesPage where
 
   traverse = \x -> traverseDefault x
 
-instance Extractible WorkExperiencesPage (NonEmptyList WorkExperience) where
+instance Extractible WorkExperiencesPage where
   query n = do
     cards <- subQueryMany queryArtDecoCard "section.artdeco-card > div ~ div > div > div > ul > li" n
     pure $ WorkExperiencesPage cards
 
-  extract (WorkExperiencesPage cards) = traverse PWE.fromUI cards
+  extract (WorkExperiencesPage cards) = OutWorkExperiences <$> traverse PWE.fromUI cards