Awesome
unleash-client-clojure
A Clojure library wrapping unleash java client
Usage
Getting feature toggles
(require '[unleash-client-clojure.unleash :as u]
'[unleash-client-clojure.builder :as b])
;; a simple client
(def unleash (u/build (b/app-name "app-name") (b/unleash-api "http://unleash.herokuapp.com/api/")))
;; simple toggle
(u/enabled? unleash "Bit")
;; toggle with context
(require '[unleash-client-clojure.context :as c])
(def user-context (c/build (c/user-id "user-id")))
(u/enabled? unleash "toggle-name" user-context false)
;; more configuration can be passed by using the functions in the builder namespace
(require '[unleash-client-clojure.builder :as b])
(def unleash (u/build "app-name" "instance-id" "http://unleash.herokuapp.com/api/" (b/environment "staging") (b/fetch-toggles-interval 15)))
Variant support
(require '[unleash-client-clojure.variant :as v])
(u/get-variant unleash "DemoVariantWithPayload")
(let [x (u/get-variant unleash "DemoVariantWithPayload")]
[(v/get-name x)
(v/get-type x)
(v/variant-enabled? x)
(v/get-value x)])
Advanced client config
;; the builder namespace supports passing builder confgurations as functions
(require '[unleash-client-clojure.builder :as b])
(def unleash (u/build
(b/app-name "app-name")
(b/unleash-api "http://unleash.herokuapp.com/api/")
(b/environment "staging")
(b/fetch-toggles-interval 1)))
;; see the builder namespace for more available options
Subscriber support
;; one a subscriber can be pased to the client builder by passing
(b/subscriber my-subscriber)
;; the subscriber namespace has functions to help you build a subsriber
(require '[unleash-client-clojure.subscriber :as s])
;; pass a map with the keys [:on-error :on-event :toggle-evaluated
;; :toggles-fetched :client-metrics :client-registered :toggles-backed-up
;; :toggle-backup-restored] and callbacks you want to register.
;; any missing key defaults to no-op
;; this is a very noisy example:
(def unleash
(u/build
(b/app-name "app-name")
(b/unleash-api "http://unleash.herokuapp.com/api/")
(b/subscriber
(s/build {:on-event println})))
TODO:
- Integration testing