项目作者: district0x

项目描述 :
district UI module for handling conversion rates
高级语言: Clojure
项目地址: git://github.com/district0x/district-ui-conversion-rates.git
创建时间: 2017-12-22T12:38:56Z
项目社区:https://github.com/district0x/district-ui-conversion-rates

开源协议:Eclipse Public License 1.0

下载


district-ui-conversion-rates

Build Status

Clojurescript re-mount module, that handles conversion rates between fiat currencies and cryptocurrencies.
This module currently uses cryptocompare.com API to obtain rates.

It also uses internal caching, so other modules don’t load same rates unnecessarily many times.

Installation

Add [district0x/district-ui-conversion-rates "1.0.1"] into your project.clj
Include [district.ui.conversion-rates] in your CLJS file, where you use mount/start

API Overview

Warning: district0x modules are still in early stages, therefore API can change in a future.

district.ui.conversion-rates

This namespace contains conversion-rates mount module.
In case you pass initial configuration, the module will load rates at mount start.

You can pass following args to initiate this module:

  • :from-currencies Currencies you’ll be converting from
  • :to-currencies Currencies you’ll be converting to
  • :request-timeout Timeout of request to obtain rates, before throwing error (ms). Default: 10000 (10s)
  • :request-interval-ms How often rates should be reloaded. Default: 300000 (5 min.). Pass 0 to disable reloading.
  • :cache-ttl Time-to-live of the cache. A rate won’t be loaded again until this duration passes since last load of that rate.
    Default: 180000 (3 min.).
  1. (ns my-district.core
  2. (:require [mount.core :as mount]
  3. [district.ui.conversion-rates]))
  4. (-> (mount/with-args
  5. {:conversion-rates {:from-currencies [:ETH :BTC]
  6. :to-currencies [:USD :EUR :DNT]}})
  7. (mount/start))

district.ui.conversion-rates.subs

re-frame subscriptions provided by this module:

::conversion-rates" class="reference-link">::conversion-rates

Returns conversion rates. You can use 2 forms:

  1. @(subscribe [::subs/conversion-rates])
  2. ;; {:ETH {:USD 664.31, :EUR 570.81, :DNT 8873.63}, :BTC {:USD 13601.62, :EUR 11714.62, :DNT 183150.18}}
  3. @(subscribe [::subs/conversion-rates :ETH])
  4. ;; {:USD 663.98, :EUR 570.87, :DNT 8871.79}

::conversion-rate" class="reference-link">::conversion-rate

Returns conversion rate of a pair

  1. @(subscribe [::subs/conversion-rate :ETH :USD])
  2. ;; 664.92

::convert" class="reference-link">::convert

Converts passed value according to rate

  1. @(subscribe [::subs/convert :ETH 2])
  2. ;; {:USD 1327.96, :EUR 1141.24, :DNT 17779.82}
  3. @(subscribe [::subs/convert :ETH :USD 2])
  4. ;; 1327.9

Complete example might be:

  1. (ns my-district.home-page
  2. (:require [district.ui.conversion-rates.subs :as rates-subs]
  3. [re-frame.core :refer [subscribe]]))
  4. (defn home-page []
  5. (let [converted-eth-usd (subscribe [::rates-subs/convert :ETH :USD 2])]
  6. (fn []
  7. [:div "2 ETH is currently " @converted-eth-usd " USD"])))

district.ui.conversion-rates.events

re-frame events provided by this module:

::watch-conversion-rates [opts]" class="reference-link">::watch-conversion-rates [opts]

Loads conversion rates and sets up reloading. Use this event from other modules, that need specific conversion rates.
opts:

  • :from-currencies
  • :to-currencies
  • :request-interval-ms (optional)
  • :request-timeout (optional)
  • :id Id of reloading interval, so you can stop it later.

::stop-watching-conversion-rates [id]" class="reference-link">::stop-watching-conversion-rates [id]

Stops reloading rates by id.

::load-conversion-rates [opts]" class="reference-link">::load-conversion-rates [opts]

Loads conversion rates from external API.
opts:

  • :from-currencies
  • :to-currencies
  • :request-timeout (optional)

::set-conversion-rates [conversion-rates]" class="reference-link">::set-conversion-rates [conversion-rates]

Set conversion rates into re-frame db. Also, this event is fired after ::load-conversion-rates. You can use it to hook into
event flow.

::conversion-rates-load-failed" class="reference-link">::conversion-rates-load-failed

Event fired when loading failed

district.ui.conversion-rates.queries

DB queries provided by this module:
You should use them in your events, instead of trying to get this module’s
data directly with get-in into re-frame db.

conversion-rates [db]" class="reference-link">conversion-rates [db]

Works the same way as sub ::conversion-rates

conversion-rate [db from to]" class="reference-link">conversion-rate [db from to]

Works the same way as sub ::conversion-rate

convert [db from to value]" class="reference-link">convert [db from to value]

Works the same way as sub ::convert

  1. (ns my-district.events
  2. (:require [district.ui.conversion-rates.queries :as rates-queries]
  3. [re-frame.core :refer [reg-event-fx]]))
  4. (reg-event-fx
  5. ::my-event
  6. (fn [{:keys [:db]}]
  7. (if (< 1500 (rates-queries/convert db :ETH :USD 2))
  8. {:dispatch [::do-something]}
  9. {:dispatch [::do-other-thing]})))

merge-conversion-rates [db conversion-rates]" class="reference-link">merge-conversion-rates [db conversion-rates]

Merges in new conversion rates and returns new re-frame db.

cache-ttl [db]" class="reference-link">cache-ttl [db]

Returns current cache-ttl

assoc-cache-ttl [db cache-ttl]" class="reference-link">assoc-cache-ttl [db cache-ttl]

Associates new cache-ttl and returns new re-frame db.

Development

  1. lein deps
  2. # To run tests and rerun on changes
  3. lein doo chrome tests