CrossClj

0.5.4 docs

SourceDocs



RECENT

    metosin/palikka

    Clojars

    Jan 26, 2018


    OWNER
    Metosin
    Tampere, Helsinki, Finland
    www.metosin.fi

    Readme

    Index of all namespaces


    « Project + dependencies

    Metosin palikka

    palikka.coerceDocsSource
    Provides Schema coercion for component configuration values.
    
    This is useful when options are read from string only sources like
    envinronment variables or system properties. Coercion is based on
    schema.coerce/string-coercion-matcher but additionally includes
    following coercions:
    
    - Single string to collection by splitting the string on ":"
    The README below is fetched from the published project artifact. Some relative links may be broken.

    Palikka Build Status

    Clojars Project

    API Docs.

    Project statement

    Unlike more general of our libraries (like compojure-api and ring-swagger) this project is primarily intended for use in Metosin’s projects. Feel free to use, but don’t expect full support.

    • We might remove features if we think they are not useful anymore
    • We will reject PRs and issues about features we wouldn’t use ourselves

    Features

    • The components use clojure.tools.logging
    • The components use Schema to validate and coerce their configuration
      • Coercion allows using strings from environment variables and system properties easily
    • Includes test utilities for clojure.test and Midje.
    • Context is curated value created from interesting parts of the system.
      • Passing the whole system down to implementation is inconvenient as the interesting bits of system are somewhere inside the components.
      • Follows the semantics of using
      • (providing (mongo/create (:db env)) [:db]) will publish value of (:db mongo) as (:db context)
      • (providing (mongo/create (:db env)) {:mongo :db}) will publish value of (:db mongo) as (:mongo context)
      • (providing (mongo/create (:db env)) {:mongo (fn [component] (:db component))}) will publish value of (:db mongo) as (:mongo context)
    • Ring handler can be created using a function taking system as argument. This makes it easy to create handler accessing system or context, directly or through middleware.
      • (http-kit/create (:http env) {:fn (fn [system] (let [ctx (palikka.core/create-context system)] (fn [req] {:body ctx})))})
    • Idempotent components

    Differences to System

    • Components log messages
    • Context
    • Schema validation and coercion for options

    Example

    (defn base-system [override]
      (let [env (m/build-config
                  (m/resource "config-defaults.edn")
                  (m/file "./config-local.edn"))
            create-handler (fn [system]
                             (-> (create-handler system)
                                 (wrap-context system)))]
        (component/system-map
          :mongo        (-> (mongo/create (:mongo env))
                            (providing {:db :db, :gfs :gfs}))
          :http         (-> (http-kit/create (:http env) {:fn create-handler})
                            ; Though components are accessed through context,
                            ; complete system map is needed for creating the context
                            (using [:mongo]))
          :nrepl        (nrepl/create (:nrepl env)))))
    

    Component dependencies

    This library doesn’t depend on libraries used by components, depend on these on your project.

    License

    Copyright © 2015-2016 Metosin Oy

    Distributed under the Eclipse Public License, the same as Clojure.