From 1893524a1e5ea505e2dc5dcc41f1394df9569a6e Mon Sep 17 00:00:00 2001 From: Wagner Leonardi Date: Tue, 21 Mar 2017 02:28:34 -0300 Subject: [PATCH 1/3] #2 spikes github api --- build.gradle | 21 ++++++++ gradle/wrapper/gradle-wrapper.jar | Bin 53556 -> 53636 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- osheroes.iml | 49 ++++++++++++++++++ .../scala/Infra/Client/GitHubClient.scala | 18 +++++++ src/main/scala/Model/GitHubProject.scala | 2 + src/main/scala/Model/GitHubUser.scala | 3 ++ .../scala/Infra/Client/GitHubClientTest.scala | 11 ++++ 8 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 osheroes.iml create mode 100644 src/main/scala/Infra/Client/GitHubClient.scala create mode 100644 src/main/scala/Model/GitHubProject.scala create mode 100644 src/main/scala/Model/GitHubUser.scala create mode 100644 src/test/scala/Infra/Client/GitHubClientTest.scala diff --git a/build.gradle b/build.gradle index df4c10c..0742566 100644 --- a/build.gradle +++ b/build.gradle @@ -6,6 +6,12 @@ apply plugin: 'java' sourceCompatibility = 1.8 apply plugin: 'java' +apply plugin: 'scala' + +sourceSets.main.java.srcDirs = ["src/main/java"] +sourceSets.test.java.srcDirs = ["src/test/java"] +sourceSets.main.scala.srcDirs = ["src/main/scala"] +sourceSets.test.scala.srcDirs = ["src/test/scala"] repositories { mavenCentral() @@ -13,9 +19,24 @@ repositories { dependencies { compile 'com.sparkjava:spark-core:2.2' + compile 'org.scalaj:scalaj-http_2.11:2.3.0' + compile 'io.circe:circe-core_2.11:0.7.0' + compile 'io.circe:circe-generic_2.11:0.7.0' + compile 'io.circe:circe-parser_2.11:0.7.0' compile 'com.twilio.sdk:twilio-java-sdk:4.4.5' + compile "org.scala-lang:scala-library:2.11.8" + + testCompile 'org.scalatest:scalatest_2.11:3.0.0' testCompile group: 'junit', name: 'junit', version: '4.11' } +task scalaTest(dependsOn: ['testClasses'], type: JavaExec) { + main = 'org.scalatest.tools.Runner' + args = ['-R', 'build/classes/test', '-o'] + classpath = sourceSets.test.runtimeClasspath +} + +test.dependsOn scalaTest + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index ca78035ef0501d802d4fc55381ef2d5c3ce0ec6e..13372aef5e24af05341d49695ee84e5f9b594659 100644 GIT binary patch delta 3775 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 delta 3724 zcmaJ@3piBi8$WXlCYO=RxJ)vb+;SUAkx(f^B&2dHk=rJhP;OaA0_iF`Nee(pCuxQ#WEl*ZJOx0%X7Ef(mFd+ zHD%79Yi&IXt4?^j7}{!7u9jOxK{ZI%_rFlPq?wi)IofVV2>Y<$;jJ9_A|;H>HRV3c zWwd1^%rS2cJF1UA;`mj390*Q`e_3_6s?Tw0;Zv3sq4s20!enz{vJUM9W2*6}gKplN zdiv?G`TPTW9MxU!6pVx<3P*}fBm^}SDma@N*p_QI@1VKr*~OGdcf=G)>$>HP{`6%0 zhC;CAla@O!wOY-eWEM8lUyWD`Ur0X6s_yqV92>X99lhV6-u&KST>fdTMEO=i{Zqp{R1}Jr9uWhHryI4=nrk_sgVykCEI#$4f}#! zO_$t&>>syq zx%5OopE#}3qLq!tQ;|atq7#*D*|LxIhoU%U9&W=A$H>k{Teh(>&wi$7h6ZP90IM8J zj(g}1>(~MG^tL7g_D>FbR2p*)%sx!X%o(llnbIDMU;ml*{Ms{uR`DsXklQUul16l& zLynIEGNu9}6Grp?%FC%5i({SqxyW^+c5drg7s>wDYxRr!NXG;+)~c29Ra5wriO}pl@hSEoxT3%gV13V!WxAsgCEoXpQp-bbO0 z$x^P2uAy8RW2GC;UQaG_J)U?vj3~16sSB!~lk2ug|N7~WP`NVQ!NqmcPO${P>5fRT zOJ>J%KIUwV8P(CHr?f{o_%hMnIp2Ja>nam3mSOcEdv<^8>bw|pw0D!bNU)!iue;;G zqw1N9$Cp0LEakmw8_Rtfb78#EE#OSqj`FF;r~GHnw&vd&Se?JB%E5Iw(T7xXp2pc_ z73c4pU&8PON=T`l?b1Gm9>c$~`+5q--%k@QzsGGP)XpH}8@LB2; z^SnvUpCVq|VAb&JEpKIoo8Fmr(~OgHPsPz%#V_^NcbA=!5_+cLu|-*!**#*}^g7no z%0J=hBs0lHA7LbI&XiPaU?e(w>HU>*(RQT9`r)mYjV9~!Qa&+bQdMXT*4CdF)y|pN ze6&epMg)!Y)rcN_qEET|sa+-RTAEWIxo7M9o7EG_9*S2@(yFr)Dy@{b1!Kr%v?p8W zl6=gGY1co9EkoZ&lLH49&7!OtW_!kOE6251d@ogX<(}F2-1xr0DT_L@M1?(bOJ<63 z5(@K^%rifV9x=08FiJhL_C8&Tw$1#Rd(07X*LZo3#6r6_&3*cL;K@p&S*G&}Eqxyu zcDi(brKRdMDWwmhOFr|$Wg~ktChWX?D=njBDB}h`@0UlPAFz&+eawstsZGzFHP-13 zPtj#gX;f8a9(g|+=v5!A_k$K~II@pn&v4drtdGtas5(yYF8XM*KmMJ!;2dOckk8`J zv@XTnqWDbHRNXC$ONnd5g>fmBxMb;n1aH+uY34aQ*c8l<>oZ9P3lH|?9zRN@2 z&Ip3+1T)^&N_yHZ4CCDl2HSXTrLpmz@MDr>XNECj?HFJl&>spShpOEA<%RUU;*uU=O2ErScVnq5(P?l9iwWZtJz<=(B)TGANmh?Cq>1g?e zie6E330Y@ggOKx^q~*{C@%INTTNMWeg9>+TF?TJqJ+$0KHE7xWD|Ok&!ifnl9v1}m zd3jc3ciOIad$a$D=Fc5XTRz(!yV>`|voq_mZu!Nb8HF5bgmIfmTG(>Ez7B)$rM~<8 zvYBmYww)|$p{%*xH963}ef`_6C+mM3rClkna+$Zvj~z@~QSmY~qBT%K`aRs4@!`GI+ff7|LbeU&thG~vJ)hyqkIFf#NCqb_ z7R>T>vxUQa=|NEy5&t)%1Qo)fude$oG7lOo7Qv%m4XEAn?BTMje98|MUi@gDu{ZI_ zI=^@Gb&I!m;l;D5Ce2w0AqZy~f|z4*WpxPyi5?33=US$a3@_<>&#o0SVQsg;MMJ=j z9yOp?rzF^q45$CP!5X- zG<32jpmIX^2g$z~;$H{|k8zjJ2#oOYJM8~|iSU#WKAFdS0kVnmdjIwmlvlcRC1q_5JV&GXtSy0j>fg7oXMp|f?{$-OAt`lpfqO>)b&b(O@OWpQS&8i3R z#OaFg5(^kL07=d3ao!!sV_IXpnPxhc&10@~Og>Dx5(Xn!*3FK5r=q~V1wXJus)x>0 z5)fn$Y%QSw4Gk`wArzg4jzTh?)RccP|Dm-Ae|fR=oOOM>PZr z_Dza6c;l@B+*>7RyvxL!(Od{phGD=|zdn^L3OLcKgMnu--}s-Sy9ihvOgxy* z4l0_L3@((Y1F=qgoC4KODjJ>+hSE3k3Wqrsn8gCYZOwp=ZFyPX1{WduZ6?&IgAHAL zgHByk^l}04snrJOx|DESIn-qr@+&L?7Q19HM=_eCt_R>nF5oDt2p*@!x1)^b zQc?X97`egMj0Fa~0C^3V<$fuDHx<>az^YYNA@wyw>mK=u7qC*tq2rAL+*CFM)4`)| zes2)&QBh6}Sb2|$MXXN=N*0CZb_YgnEI_<`8zbufAq^NDyp96z4gv7{JFq?$yxW0w WlHeQU8?us>4jg)nMaXqL-G2b7HEzWK diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index eda5ba9..9851e51 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Tue Feb 14 19:01:07 BRST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.13-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip diff --git a/osheroes.iml b/osheroes.iml new file mode 100644 index 0000000..86120c7 --- /dev/null +++ b/osheroes.iml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/scala/Infra/Client/GitHubClient.scala b/src/main/scala/Infra/Client/GitHubClient.scala new file mode 100644 index 0000000..104e37e --- /dev/null +++ b/src/main/scala/Infra/Client/GitHubClient.scala @@ -0,0 +1,18 @@ +import scalaj.http._ +import io.circe._, io.circe.parser._ + +import Model.{GitHubProject, GitHubUser} + +package Infra.Client { + class GitHubClient { + def getUserProjects(user: GitHubUser): List[GitHubProject] = { + val response: HttpResponse[String] = Http(s"https://api.github.com/users/${user.login}/repos?type=all").param("q","monkeys").asString + val parseResult = parse(response.body) + + val result = parseResult.b.a.map(x -> List()) + + return List() + } + } +} + diff --git a/src/main/scala/Model/GitHubProject.scala b/src/main/scala/Model/GitHubProject.scala new file mode 100644 index 0000000..bbb2a82 --- /dev/null +++ b/src/main/scala/Model/GitHubProject.scala @@ -0,0 +1,2 @@ +package Model +class GitHubProject(val id: Integer, val name: String, val fullName: String, val owner: GitHubUser, val url: String ) \ No newline at end of file diff --git a/src/main/scala/Model/GitHubUser.scala b/src/main/scala/Model/GitHubUser.scala new file mode 100644 index 0000000..fbb9a7b --- /dev/null +++ b/src/main/scala/Model/GitHubUser.scala @@ -0,0 +1,3 @@ +package Model + +class GitHubUser(val login: String) \ No newline at end of file diff --git a/src/test/scala/Infra/Client/GitHubClientTest.scala b/src/test/scala/Infra/Client/GitHubClientTest.scala new file mode 100644 index 0000000..76c641f --- /dev/null +++ b/src/test/scala/Infra/Client/GitHubClientTest.scala @@ -0,0 +1,11 @@ +import org.scalatest._ + +import Infra.Client._ + +class GitHubClientTest extends FlatSpec with Matchers { + it should "read GitHub user projects" in { + val gitHubClient = new GitHubClient() + val projects = gitHubClient.getUserProjects(new GitHubUser("leonardiwagner")) + projects.length should be (1) + } +} \ No newline at end of file From abee3e6e0ec1f1548b776ce69abb6fc2cd243472 Mon Sep 17 00:00:00 2001 From: Wagner Leonardi Date: Tue, 21 Mar 2017 10:55:30 -0300 Subject: [PATCH 2/3] #2 fixes --- .gitignore | 2 ++ build.gradle | 4 +--- src/main/scala/Infra/Client/GitHubClient.scala | 15 +++++++++------ src/main/scala/Model/GitHubProject.scala | 3 ++- .../scala/Infra/Client/GitHubClientTest.scala | 2 ++ 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 09bdf3f..9509c1a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ build/ .idea/ .gradle/ + +osheroes.iml \ No newline at end of file diff --git a/build.gradle b/build.gradle index 0742566..6b7de41 100644 --- a/build.gradle +++ b/build.gradle @@ -20,9 +20,7 @@ repositories { dependencies { compile 'com.sparkjava:spark-core:2.2' compile 'org.scalaj:scalaj-http_2.11:2.3.0' - compile 'io.circe:circe-core_2.11:0.7.0' - compile 'io.circe:circe-generic_2.11:0.7.0' - compile 'io.circe:circe-parser_2.11:0.7.0' + compile 'net.liftweb:lift-json_2.11:2.6.3' compile 'com.twilio.sdk:twilio-java-sdk:4.4.5' compile "org.scala-lang:scala-library:2.11.8" diff --git a/src/main/scala/Infra/Client/GitHubClient.scala b/src/main/scala/Infra/Client/GitHubClient.scala index 104e37e..7decc08 100644 --- a/src/main/scala/Infra/Client/GitHubClient.scala +++ b/src/main/scala/Infra/Client/GitHubClient.scala @@ -1,17 +1,20 @@ import scalaj.http._ -import io.circe._, io.circe.parser._ +import net.liftweb.json.DefaultFormats +import net.liftweb.json._ -import Model.{GitHubProject, GitHubUser} +import Model._ package Infra.Client { + class GitHubClient { + implicit val formats = DefaultFormats + def getUserProjects(user: GitHubUser): List[GitHubProject] = { val response: HttpResponse[String] = Http(s"https://api.github.com/users/${user.login}/repos?type=all").param("q","monkeys").asString - val parseResult = parse(response.body) - - val result = parseResult.b.a.map(x -> List()) + val parsedJson = parse(response.body) - return List() + val result = parsedJson.children.map(project => project.extract[GitHubProject]) + return result } } } diff --git a/src/main/scala/Model/GitHubProject.scala b/src/main/scala/Model/GitHubProject.scala index bbb2a82..4f52a2b 100644 --- a/src/main/scala/Model/GitHubProject.scala +++ b/src/main/scala/Model/GitHubProject.scala @@ -1,2 +1,3 @@ package Model -class GitHubProject(val id: Integer, val name: String, val fullName: String, val owner: GitHubUser, val url: String ) \ No newline at end of file + +case class GitHubProject(id: Option[Integer], name: Option[String], full_name: Option[String]) \ No newline at end of file diff --git a/src/test/scala/Infra/Client/GitHubClientTest.scala b/src/test/scala/Infra/Client/GitHubClientTest.scala index 76c641f..218fd14 100644 --- a/src/test/scala/Infra/Client/GitHubClientTest.scala +++ b/src/test/scala/Infra/Client/GitHubClientTest.scala @@ -1,7 +1,9 @@ +import Model.GitHubUser import org.scalatest._ import Infra.Client._ + class GitHubClientTest extends FlatSpec with Matchers { it should "read GitHub user projects" in { val gitHubClient = new GitHubClient() From 90ed3d5f18d244081c506bd8a8176229d45a5ad0 Mon Sep 17 00:00:00 2001 From: Wagner Leonardi Date: Tue, 21 Mar 2017 10:57:42 -0300 Subject: [PATCH 3/3] #2 remove unnecessary files --- .gitignore | 2 +- osheroes.iml | 49 ------------------------------------------------- 2 files changed, 1 insertion(+), 50 deletions(-) delete mode 100644 osheroes.iml diff --git a/.gitignore b/.gitignore index 9509c1a..cfd88cf 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ build/ .idea/ .gradle/ -osheroes.iml \ No newline at end of file +*.iml \ No newline at end of file diff --git a/osheroes.iml b/osheroes.iml deleted file mode 100644 index 86120c7..0000000 --- a/osheroes.iml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file