From 817f3c9baf8076e398962db616f0ec09359ba55f Mon Sep 17 00:00:00 2001 From: NexVeridian Date: Sat, 15 Jun 2024 04:28:11 +0000 Subject: [PATCH] refactor: move get url --- Cargo.toml | 6 ++++-- src/util.rs | 8 ++------ src/util/df.rs | 2 +- src/util/ticker.rs | 26 ++++++++++++++++++++++++++ tests/integration.rs | 1 + 5 files changed, 34 insertions(+), 9 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 56e083e..e41ae4f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,8 +18,8 @@ polars = { version = "0.32", features = [ reqwest = { version = "0.11", features = ["blocking", "gzip"] } glob = { version = "0.3" } clokwerk = "0.4" -strum_macros = "0.25" -strum = "0.25" +strum_macros = "0.26" +strum = "0.26" tokio = { version = "1.34", features = ["full"] } openssl = { version = "0.10", features = ["vendored"] } chrono = { version = "0.4", features = ["serde"] } @@ -31,3 +31,5 @@ anyhow = "1.0" [dev-dependencies] serial_test = "*" +rstest = "0.21" +pretty_assertions = "1.4" diff --git a/src/util.rs b/src/util.rs index b92cab2..21db624 100644 --- a/src/util.rs +++ b/src/util.rs @@ -679,12 +679,7 @@ impl Ark { } pub fn get_csv_ark(&self) -> Result { - let url = match self.ticker.data_source() { - DataSource::ArkVenture => format!("https://assets.ark-funds.com/fund-documents/funds-etf-csv/{}", self.ticker.value()), - DataSource::Ark => format!("https://assets.ark-funds.com/fund-documents/funds-etf-csv/ARK_{}_ETF_{}_HOLDINGS.csv", self.ticker.value(), self.ticker), - DataSource::Shares21 => format!("https://cdn.21shares-funds.com/uploads/fund-documents/us-bank/holdings/product/current/{}-Export.csv", self.ticker.value()), - DataSource::ArkEurope | DataSource::Rize => format!("https://europe.ark-funds.com/funds/{}/full-fund-holdings-download/", self.ticker.value()), - }; + let url = self.ticker.get_url(); Reader::Csv.get_data_url(url) } @@ -752,6 +747,7 @@ impl Reader { #[cfg(test)] mod tests { use super::*; + use pretty_assertions::assert_eq; use serial_test::serial; use std::fs; diff --git a/src/util/df.rs b/src/util/df.rs index ee8c4b2..fe0fb4e 100644 --- a/src/util/df.rs +++ b/src/util/df.rs @@ -1,6 +1,6 @@ +use anyhow::Error; use polars::frame::DataFrame; use polars::prelude::{IntoLazy, LazyFrame}; -use anyhow::Error; #[derive(Clone)] pub enum DF { diff --git a/src/util/ticker.rs b/src/util/ticker.rs index 8dc8697..53e9948 100644 --- a/src/util/ticker.rs +++ b/src/util/ticker.rs @@ -114,4 +114,30 @@ impl Ticker { | Ticker::PMNT => DataSource::Rize, } } + + pub fn get_url(&self) -> String { + match self.data_source() { + DataSource::ArkVenture => format!("https://assets.ark-funds.com/fund-documents/funds-etf-csv/{}", self.value()), + DataSource::Ark => format!("https://assets.ark-funds.com/fund-documents/funds-etf-csv/ARK_{}_ETF_{}_HOLDINGS.csv", self.value(), self), + DataSource::Shares21 => format!("https://cdn.21shares-funds.com/uploads/fund-documents/us-bank/holdings/product/current/{}-Export.csv", self.value()), + DataSource::ArkEurope | DataSource::Rize => format!("https://europe.ark-funds.com/funds/{}/full-fund-holdings-download/", self.value()), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use pretty_assertions::assert_eq; + use rstest::rstest; + + #[rstest] + #[case(Ticker::ARKVX, "https://assets.ark-funds.com/fund-documents/funds-etf-csv/ARK_VENTURE_FUND_ARKVX_HOLDINGS.csv")] + #[case(Ticker::ARKK, "https://assets.ark-funds.com/fund-documents/funds-etf-csv/ARK_INNOVATION_ETF_ARKK_HOLDINGS.csv")] + #[case(Ticker::ARKA, "https://cdn.21shares-funds.com/uploads/fund-documents/us-bank/holdings/product/current/ARKA-Export.csv")] + #[case(Ticker::EUROPE_ARKI, "https://europe.ark-funds.com/funds/artificial-intelligence-robotics/full-fund-holdings-download/")] + #[case(Ticker::CYBR, "https://europe.ark-funds.com/funds/cybersecurity-and-data-privacy/full-fund-holdings-download/")] + fn get_url(#[case] input: Ticker, #[case] expected: String) { + assert_eq!(input.get_url(), expected) + } } diff --git a/tests/integration.rs b/tests/integration.rs index 547d0ca..4c97f37 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -1,6 +1,7 @@ use anyhow::{Error, Result}; use chrono::NaiveDate; use polars::datatypes::DataType; +use pretty_assertions::assert_eq; use serial_test::serial; use ark_invest_api_rust_data::util::ticker::Ticker;