Skip to content

Commit 0d0ddc3

Browse files
author
Rafa Paradela
committed
Wip
1 parent 6be92dc commit 0d0ddc3

12 files changed

Lines changed: 79 additions & 37 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.fortysevendeg.github4s
2+
3+
import com.fortysevendeg.github4s.free.domain.Commit
4+
import io.circe._, io.circe.generic.auto._, io.circe.jawn._, io.circe.syntax._
5+
import cats.data.Xor
6+
7+
object Decoders {
8+
9+
implicit val decodeCommit: Decoder[Commit] = Decoder.instance { c =>
10+
for {
11+
sha <- c.downField("sha").as[String]
12+
message <- c.downField("commit").downField("message").as[String]
13+
date <- c.downField("commit").downField("author").downField("date").as[String]
14+
url <- c.downField("html_url").as[String]
15+
login <- c.downField("author").downField("login").as[String]
16+
avatar_url <- c.downField("author").downField("avatar_url").as[String]
17+
author_url <- c.downField("author").downField("html_url").as[String]
18+
} yield Commit(sha, message, date, url, login, avatar_url, author_url)
19+
}
20+
21+
22+
}

src/main/scala/com/fortysevendeg/github4s/GithubAPIs.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ import com.fortysevendeg.github4s.free.domain._
77

88
class GHUsers(accessToken : Option[String] = None)(implicit O : UserOps[GitHub4s]){
99

10-
def get(username : String): GHIO[GHResponse[Collaborator]] = O.getUser(username, accessToken)
10+
def get(username : String): GHIO[GHResponse[User]] = O.getUser(username, accessToken)
1111

12-
def getAuth: GHIO[GHResponse[Collaborator]] = O.getAuthUser(accessToken)
12+
def getAuth: GHIO[GHResponse[User]] = O.getAuthUser(accessToken)
1313

14-
def getUsers(since: Int, pagination: Option[Pagination] = None): GHIO[GHResponse[List[Collaborator]]] = O.getUsers(since, pagination, accessToken)
14+
def getUsers(since: Int, pagination: Option[Pagination] = None): GHIO[GHResponse[List[User]]] = O.getUsers(since, pagination, accessToken)
1515

1616
}
1717

src/main/scala/com/fortysevendeg/github4s/HttpClient.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import scalaj.http._
88

99
class HttpClient {
1010

11+
val defaultPagination = Pagination(1, 1000)
12+
1113
sealed trait HttpVerb {
1214
def verb: String
1315
}

src/main/scala/com/fortysevendeg/github4s/api/Repos.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.fortysevendeg.github4s.api
22

33
import com.fortysevendeg.github4s.GithubResponses.GHResponse
4-
import com.fortysevendeg.github4s.free.domain.{Pagination, Commit, Repository, Collaborator}
5-
import com.fortysevendeg.github4s.{GithubConfig, HttpClient}
4+
import com.fortysevendeg.github4s.free.domain.{Pagination, Commit, Repository, User}
5+
import com.fortysevendeg.github4s.{Decoders, GithubConfig, HttpClient}
66
import io.circe.generic.auto._
77

88
object Repos {
99

10+
import Decoders._
11+
1012
protected val httpClient = new HttpClient()
1113

1214
def get(accessToken: Option[String] = None, owner: String, repo: String): GHResponse[Repository] =
@@ -21,7 +23,7 @@ object Repos {
2123
author: Option[String] = None,
2224
since: Option[String] = None,
2325
until: Option[String] = None,
24-
pagination: Option[Pagination] = None): GHResponse[List[Commit]] =
26+
pagination: Option[Pagination] = Some(httpClient.defaultPagination)): GHResponse[List[Commit]] =
2527

2628
httpClient.get[List[Commit]](accessToken, s"repos/$owner/$repo/commits", Map(
2729
"sha" -> sha,

src/main/scala/com/fortysevendeg/github4s/api/Users.scala

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,23 @@ package com.fortysevendeg.github4s.api
22

33
import com.fortysevendeg.github4s.GithubResponses.GHResponse
44
import com.fortysevendeg.github4s.{GithubConfig, HttpClient}
5-
import com.fortysevendeg.github4s.free.domain.{Pagination, Collaborator}
5+
import com.fortysevendeg.github4s.free.domain.{Pagination, User}
66
import io.circe.generic.auto._
77

88

99
object Users {
1010

1111
protected val httpClient = new HttpClient()
1212

13-
def get(username: String)(implicit C : GithubConfig): GHResponse[Collaborator] = httpClient.get[Collaborator](s"users/$username")
13+
def get(accessToken: Option[String] = None, username: String): GHResponse[User] = httpClient.get[User](accessToken, s"users/$username")
1414

15-
def getAuth(implicit C : GithubConfig): GHResponse[Collaborator] = httpClient.get[Collaborator]("user")
15+
def getAuth(accessToken: Option[String] = None): GHResponse[User] = httpClient.get[User](accessToken, "user")
1616

17-
def getUsers(since: Int, pagination: Option[Pagination] = None)
18-
(implicit C : GithubConfig): GHResponse[List[Collaborator]] = httpClient.get[List[Collaborator]]("users", Map("since" -> since.toString), pagination)
17+
def getUsers(
18+
accessToken: Option[String] = None,
19+
since: Int,
20+
pagination: Option[Pagination] = None) : GHResponse[List[User]] =
21+
httpClient.get[List[User]](accessToken, "users", Map("since" -> since.toString), pagination)
1922

2023

2124
}

src/main/scala/com/fortysevendeg/github4s/free/algebra/RepositoryOps.scala

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ import com.fortysevendeg.github4s.free.domain.{Pagination, Commit, Repository}
77
/** Repositories ops ADT
88
*/
99
sealed trait RepositoryOp[A]
10-
final case class GetRepo(owner: String, repo: String) extends RepositoryOp[GHResponse[Repository]]
10+
final case class GetRepo(
11+
owner: String,
12+
repo: String,
13+
accessToken: Option[String] = None) extends RepositoryOp[GHResponse[Repository]]
14+
1115
final case class ListCommits(
1216
owner: String,
1317
repo: String,
@@ -16,7 +20,8 @@ final case class ListCommits(
1620
author: Option[String] = None,
1721
since: Option[String] = None,
1822
until: Option[String] = None,
19-
pagination: Option[Pagination] = None) extends RepositoryOp[GHResponse[List[Commit]]]
23+
pagination: Option[Pagination] = None,
24+
accessToken: Option[String] = None) extends RepositoryOp[GHResponse[List[Commit]]]
2025

2126

2227
/** Exposes Repositories operations as a Free monadic algebra that may be combined with other Algebras via
@@ -26,8 +31,9 @@ class RepositoryOps[F[_]](implicit I: Inject[RepositoryOp, F]) {
2631

2732
def getRepo(
2833
owner: String,
29-
repo: String): Free[F, GHResponse[Repository]] =
30-
Free.inject[RepositoryOp, F](GetRepo(owner, repo))
34+
repo: String,
35+
accessToken: Option[String] = None): Free[F, GHResponse[Repository]] =
36+
Free.inject[RepositoryOp, F](GetRepo(owner, repo, accessToken))
3137

3238
def listCommits(
3339
owner: String,
@@ -37,8 +43,9 @@ class RepositoryOps[F[_]](implicit I: Inject[RepositoryOp, F]) {
3743
author: Option[String] = None,
3844
since: Option[String] = None,
3945
until: Option[String] = None,
40-
pagination: Option[Pagination] = None): Free[F, GHResponse[List[Commit]]] =
41-
Free.inject[RepositoryOp, F](ListCommits(owner, repo, sha, path, author, since, until, pagination))
46+
pagination: Option[Pagination] = None,
47+
accessToken: Option[String] = None): Free[F, GHResponse[List[Commit]]] =
48+
Free.inject[RepositoryOp, F](ListCommits(owner, repo, sha, path, author, since, until, pagination, accessToken))
4249

4350
}
4451

src/main/scala/com/fortysevendeg/github4s/free/algebra/UserOps.scala

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,26 @@ package com.fortysevendeg.github4s.free.algebra
22

33
import cats.free.{Free, Inject}
44
import com.fortysevendeg.github4s.GithubResponses._
5-
import com.fortysevendeg.github4s.free.domain.{Pagination, Collaborator}
5+
import com.fortysevendeg.github4s.free.domain.{Pagination, User}
66

77
/** Users ops ADT
88
*/
99
sealed trait UserOp[A]
10-
final case class GetUser(username: String, accessToken: Option[String] = None) extends UserOp[GHResponse[Collaborator]]
11-
final case class GetAuthUser(accessToken: Option[String] = None) extends UserOp[GHResponse[Collaborator]]
12-
final case class GetUsers(since: Int, pagination: Option[Pagination] = None, accessToken: Option[String] = None) extends UserOp[GHResponse[List[Collaborator]]]
10+
final case class GetUser(username: String, accessToken: Option[String] = None) extends UserOp[GHResponse[User]]
11+
final case class GetAuthUser(accessToken: Option[String] = None) extends UserOp[GHResponse[User]]
12+
final case class GetUsers(since: Int, pagination: Option[Pagination] = None, accessToken: Option[String] = None) extends UserOp[GHResponse[List[User]]]
1313

1414

1515
/** Exposes Users operations as a Free monadic algebra that may be combined with other Algebras via
1616
* Coproduct
1717
*/
1818
class UserOps[F[_]](implicit I: Inject[UserOp, F]) {
1919

20-
def getUser(username: String, accessToken: Option[String] = None): Free[F, GHResponse[Collaborator]] = Free.inject[UserOp, F](GetUser(username, accessToken))
20+
def getUser(username: String, accessToken: Option[String] = None): Free[F, GHResponse[User]] = Free.inject[UserOp, F](GetUser(username, accessToken))
2121

22-
def getAuthUser(accessToken: Option[String] = None): Free[F, GHResponse[Collaborator]] = Free.inject[UserOp, F](GetAuthUser(accessToken))
22+
def getAuthUser(accessToken: Option[String] = None): Free[F, GHResponse[User]] = Free.inject[UserOp, F](GetAuthUser(accessToken))
2323

24-
def getUsers(since: Int, pagination: Option[Pagination] = None, accessToken: Option[String] = None): Free[F, GHResponse[List[Collaborator]]] = Free.inject[UserOp, F](GetUsers(since, pagination, accessToken))
24+
def getUsers(since: Int, pagination: Option[Pagination] = None, accessToken: Option[String] = None): Free[F, GHResponse[List[User]]] = Free.inject[UserOp, F](GetUsers(since, pagination, accessToken))
2525

2626
}
2727

src/main/scala/com/fortysevendeg/github4s/free/domain/Collaborator.scala

Lines changed: 0 additions & 6 deletions
This file was deleted.
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
package com.fortysevendeg.github4s.free.domain
22

33
case class Commit(
4-
sha: String)
4+
sha: String,
5+
message: String,
6+
date: String,
7+
url: String,
8+
login: String,
9+
avatar_url: String,
10+
author_url: String)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.fortysevendeg.github4s.free.domain
2+
3+
case class User(
4+
id: Int,
5+
login: String,
6+
avatar_url: String,
7+
html_url: String,
8+
name: String,
9+
email: String)

0 commit comments

Comments
 (0)