Added examples

This commit is contained in:
Erik C. Thauvin 2021-05-08 15:50:33 -07:00
parent 8cb6ac4c0b
commit 3517acf544
10 changed files with 139 additions and 33 deletions

View file

@ -3,6 +3,5 @@
<ManuallySuppressedIssues/> <ManuallySuppressedIssues/>
<CurrentIssues> <CurrentIssues>
<ID>ThrowsCount:CryptoPrice.kt$CryptoPrice.Companion$ @JvmStatic @JvmOverloads @Throws(CryptoException::class) fun apiCall(paths: List&lt;String>, params: Map&lt;String, String> = emptyMap()): String</ID> <ID>ThrowsCount:CryptoPrice.kt$CryptoPrice.Companion$ @JvmStatic @JvmOverloads @Throws(CryptoException::class) fun apiCall(paths: List&lt;String>, params: Map&lt;String, String> = emptyMap()): String</ID>
<ID>UtilityClassWithPublicConstructor:CryptoPrice.kt$CryptoPrice</ID>
</CurrentIssues> </CurrentIssues>
</SmellBaseline> </SmellBaseline>

View file

@ -102,24 +102,6 @@ tasks {
} }
} }
val copyToDeploy by registering(Copy::class) {
from(configurations.runtimeClasspath) {
exclude("annotations-*.jar")
}
from(jar)
into(deployDir)
}
register("deploy") {
description = "Copies all needed files to the $deployDir directory."
group = PublishingPlugin.PUBLISH_TASK_GROUP
dependsOn("build", "jar")
outputs.dir(deployDir)
inputs.files(copyToDeploy)
mustRunAfter("clean")
}
"sonarqube" { "sonarqube" {
dependsOn("jacocoTestReport") dependsOn("jacocoTestReport")
} }

6
examples/.gitattributes vendored Normal file
View file

@ -0,0 +1,6 @@
#
# https://help.github.com/articles/dealing-with-line-endings/
#
# These are explicitly windows files and should use crlf
*.bat text eol=crlf

5
examples/.gitignore vendored Normal file
View file

@ -0,0 +1,5 @@
# Ignore Gradle project-specific cache directory
.gradle
# Ignore Gradle build output directory
build

31
examples/build.gradle.kts Normal file
View file

@ -0,0 +1,31 @@
plugins {
id("org.jetbrains.kotlin.jvm") version "1.5.0"
id("com.github.ben-manes.versions") version "0.38.0"
application
}
// ./gradlew run
// ./gradlew runJava"
defaultTasks(ApplicationPlugin.TASK_RUN_NAME)
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
implementation("net.thauvin.erik:cryptoprice:0.9.0-SNAPSHOT")
}
application {
mainClassName = "com.example.CryptoPriceExampleKt"
}
tasks {
register<JavaExec>("runJava") {
group = "application"
main = "com.example.CryptoPriceSample"
classpath = sourceSets["main"].runtimeClasspath
}
}

View file

@ -0,0 +1,10 @@
/*
* This file was generated by the Gradle 'init' task.
*
* The settings file is used to specify which projects to include in your build.
*
* Detailed information about configuring a multi-project build in Gradle can be found
* in the user manual at https://docs.gradle.org/6.5.1/userguide/multi_project_builds.html
*/
rootProject.name = "examples"

View file

@ -0,0 +1,41 @@
package com.example;
import net.thauvin.erik.crypto.CryptoPrice;
import net.thauvin.erik.crypto.CryptoException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class CryptoPriceSample {
public static void main(String[] args) {
try {
// Get current Bitcoin market price.
final CryptoPrice price = CryptoPrice.marketPrice("BTC");
System.out.println("The current Bitcoin price is " + price.getAmount() + " in " + price.getCurrency());
// Get current Bitcoin market price in Euros.
final CryptoPrice euroPrice = CryptoPrice.marketPrice("BTC", "EUR");
System.out.println("The current Bitcoin price is " + euroPrice.getAmount() + " in Euros");
// Get current Bitcoin buy price using API.
final CryptoPrice buyPrice =
CryptoPrice.toPrice(
CryptoPrice.apiCall(
List.of("prices", "BTC-USD", "buy"),
Collections.<String, String>emptyMap()
)
);
System.out.println("The current BTC buy price is " + price.getAmount() + " in " + price.getCurrency());
System.out.println();
// Get current Ethereum market price in Pound sterling.
final CryptoPrice gbpPrice = CryptoPrice.marketPrice("ETH", "GBP");
System.out.println("The current Ethereum price is " + gbpPrice.getAmount() + " in Pound sterling");
} catch (CryptoException e) {
System.err.println(e.getMessage());
}
}
}

View file

@ -0,0 +1,25 @@
package com.example
import net.thauvin.erik.crypto.CryptoPrice.Companion.marketPrice
import net.thauvin.erik.crypto.CryptoPrice.Companion.apiCall
import net.thauvin.erik.crypto.CryptoPrice.Companion.toPrice
fun main(@Suppress("UNUSED_PARAMETER") args: Array<String>) {
// Get current Bitcoin market price.
var price = marketPrice("BTC")
println("The current Bitcoin price is ${price.amount} in ${price.currency}")
// Get current Bitcoin market price in Euro.
var euroPrice = marketPrice("BTC", "EUR")
println("The current Bitcoin price is ${euroPrice.amount} in Euros")
// Get current Bitcoin buy price using API.
var buyPrice = apiCall(listOf("prices", "BTC-USD", "buy"), emptyMap()).toPrice()
println("The current BTC buy price is ${buyPrice.amount} in ${buyPrice.currency}")
println()
// Get current Ethereum market price in Pound sterling.
var gbpPrice = marketPrice("ETH", "GBP")
println("The current Ehtereum price is ${gbpPrice.amount} in Pound sterling")
}

View file

@ -40,23 +40,29 @@ import java.io.IOException
import java.net.URL import java.net.URL
import java.time.LocalDate import java.time.LocalDate
data class Price(val base: String, val currency: String, val amount: Double) /**
* The `CryptoPrice` class
fun String.toPrice(): Price { */
val json = JSONObject(this) open class CryptoPrice(val base: String, val currency: String, val amount: Double) {
if (json.has("data")) {
val data = json.getJSONObject("data")
return Price(data.getString("base"), data.getString("currency"), data.getString("amount").toDouble())
} else {
throw CryptoException("Missing JSON data.")
}
}
open class CryptoPrice private constructor() {
companion object { companion object {
// Coinbase API URL // Coinbase API URL
private const val COINBASE_API_URL = "https://api.coinbase.com/v2/" private const val COINBASE_API_URL = "https://api.coinbase.com/v2/"
@JvmStatic
fun String.toPrice(): CryptoPrice {
val json = JSONObject(this)
if (json.has("data")) {
val data = json.getJSONObject("data")
return CryptoPrice(
data.getString("base"),
data.getString("currency"),
data.getString("amount").toDouble()
)
} else {
throw CryptoException("Missing JSON data.")
}
}
/** /**
* Make an API call. * Make an API call.
*/ */
@ -105,7 +111,7 @@ open class CryptoPrice private constructor() {
@JvmStatic @JvmStatic
@JvmOverloads @JvmOverloads
@Throws(CryptoException::class) @Throws(CryptoException::class)
fun marketPrice(base: String, currency: String = "USD", date: LocalDate? = null): Price { fun marketPrice(base: String, currency: String = "USD", date: LocalDate? = null): CryptoPrice {
val params = mutableMapOf<String, String>() val params = mutableMapOf<String, String>()
if (date != null) { if (date != null) {
params.put("date", "$date") params.put("date", "$date")

View file

@ -1,6 +1,7 @@
package net.thauvin.erik.crypto package net.thauvin.erik.crypto
import net.thauvin.erik.crypto.CryptoPrice.Companion.marketPrice import net.thauvin.erik.crypto.CryptoPrice.Companion.marketPrice
import net.thauvin.erik.crypto.CryptoPrice.Companion.toPrice
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertFailsWith import kotlin.test.assertFailsWith