<commit_before>[![Kotlin M12](https://img.shields.io/badge/Kotlin-M12%20%40%200.12.1230-blue.svg)](http://kotlinlang.org) [![Maven Version](https://img.shields.io/maven-central/v/uy.klutter/klutter-all-jdk8.svg)](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22uy.klutter%22) [![CircleCI branch](https://img.shields.io/circleci/project/klutter/klutter/master.svg)](https://circleci.com/gh/klutter/klutter/tree/master) [![Issues](https://img.shields.io/github/issues/klutter/klutter.svg)](https://github.com/klutter/klutter/issues?q=is%3Aopen) [![DUB](https://img.shields.io/dub/l/vibe-d.svg)](https://github.com/klutter/klutter/blob/master/LICENSE) 

# klutter
Random small libraries, usually extensions making other libraries happier.  

Please send contributions, fork the repo, issue a pull request and write a comment in the pull request granting the
rights for the code to be used in Klutter.

## Maven Dependency

Each module has its own set of dependencies.  There is a main dependency which is always the most current JDK
version of the module, and also a version suffixed by the JDK version for which it is compatible (that version or newer).
Include the dependency in your Gradle / Maven projects, ones that already have Kotlin configured for Kotlin M12 versions
`0.12.1218` or `0.12.1230`

For example, for the whole package (one of `klutter-all` (lastest JDK), `klutter-all-jdk6`, `klutter-all-jdk7`, or `klutter-all-jdk8`) and using an
open-ended dependency number while Klutter is in early active development:

**Gradle:**

```
compile "uy.klutter:klutter-all:0.3.+"
```

**Maven:**
```
<dependency>
    <groupId>uy.klutter</groupId>
    <artifactId>klutter-all</artifactId>
    <version>[0.3.0,0.4.0)</version>
</dependency>
```
 
See all modules and current versions on [Maven Central search](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22uy.klutter%22%20) (or the [raw repo](https://repo1.maven.org/maven2/uy/klutter/))

## Modules

|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maven&#8209;Artifact&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|Size|Topic|Injekt|
|------|------|------|------|
|all|*|Everything available for a given JDK version|*|
|[aws-s3](aws-s3/)|tiny|Amazon AWS SDK S3 helper extensions|Yes|
|[aws-core](aws-core/)|tiny|Amazon AWS SDK helper extensions|No|
|[config-typesafe](config-typesafe/)|medium|Typesafe Config easier loader and access to configuration|No|
|[core](core/)|small|Core extension methods on strings, numbers, dates, URI Builder, better URL Encoding/Decoding|No|
|[json-jackson](json-jackson/)|tiny|Jackson JSON Data Binding extensions + loading of Kotlin module|Yes|
|[netflix-graph](netflix-graph/)|medium|In memory graph building and compression/serialization.  A wrapper adding schema, ordinal tracking, serialization with ordinals, and is much easier to use API|No|
|[vertx3](vertx3/)|medium|Vert.x-3 helpers and integration with Kovenant Promises|Yes|

Modules marked with "yes" for Injekt, are modules that have intergration with [Kohesive/Injekt](http://github.com/kohesive/injekt) and provide prebuild injectable modules that you can easily import providing factories or singletons for dependency injection.  Using an Injekt module looks something like:

```kotlin
class MyApp {
    companion object : InjektMain() {
        // my app starts here with a static main()
        platformStatic public fun main(args: Array<String>) {
            MyApp().run()
        }

        // the Injekt system will call me back here on a method I override.  And all my functions for registration are
        // easy to find on the receiver class
        override fun InjektRegistrar.registerInjectables() {
            // add my singletons, factories, keyed factories, per-thread factories, ...
            ...
 
            // import prebuilt Injekt modules
            importModule(AmazonS3Injektables)  
            importModule(JacksonWithKotlinAndJdk8Injektables)
        }
    }

    ...
    // later, use them in properties in any class
    val s3: AmazonS3Client by Delegates.injectLazy()
    // or use them anywhere in code
    val myObject: CoolObject = Inject.get<ObjectMapper>().readValue(jsonString)<commit_msg>adding elasticsearch to main readme updating version numbers on main readme<commit_after>[![Kotlin M12](https://img.shields.io/badge/Kotlin-M12%20%40%200.12.1230-blue.svg)](http://kotlinlang.org) [![Maven Version](https://img.shields.io/maven-central/v/uy.klutter/klutter-all-jdk8.svg)](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22uy.klutter%22) [![CircleCI branch](https://img.shields.io/circleci/project/klutter/klutter/master.svg)](https://circleci.com/gh/klutter/klutter/tree/master) [![Issues](https://img.shields.io/github/issues/klutter/klutter.svg)](https://github.com/klutter/klutter/issues?q=is%3Aopen) [![DUB](https://img.shields.io/dub/l/vibe-d.svg)](https://github.com/klutter/klutter/blob/master/LICENSE) 

# klutter
Random small libraries, usually extensions making other libraries happier.  

Please send contributions, fork the repo, issue a pull request and write a comment in the pull request granting the
rights for the code to be used in Klutter.

## Maven Dependency

Each module has its own set of dependencies.  There is a main dependency which is always the most current JDK
version of the module, and also a version suffixed by the JDK version for which it is compatible (that version or newer).
Include the dependency in your Gradle / Maven projects, ones that already have Kotlin configured for Kotlin M12 versions
`0.12.1218` or `0.12.1230`

For example, for the whole package (one of `klutter-all` (lastest JDK), `klutter-all-jdk6`, `klutter-all-jdk7`, or `klutter-all-jdk8`) and using an
open-ended dependency number while Klutter is in early active development:

**Gradle:**

```
compile "uy.klutter:klutter-all:0.4.+"
```

**Maven:**
```
<dependency>
    <groupId>uy.klutter</groupId>
    <artifactId>klutter-all</artifactId>
    <version>[0.4.0,0.5.0)</version>
</dependency>
```
 
See all modules and current versions on [Maven Central search](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22uy.klutter%22%20) (or the [raw repo](https://repo1.maven.org/maven2/uy/klutter/))

## Modules

|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maven&#8209;Artifact&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|Size|Topic|Injekt|
|------|------|------|------|
|all|*|Everything available for a given JDK version|*|
|[aws-s3](aws-s3/)|tiny|Amazon AWS SDK S3 helper extensions|Yes|
|[aws-core](aws-core/)|tiny|Amazon AWS SDK helper extensions|No|
|[config-typesafe](config-typesafe/)|medium|Typesafe Config easier loader and access to configuration|No|
|[core](core/)|small|Core extension methods on strings, numbers, dates, URI Builder, better URL Encoding/Decoding|No|
|[elasticsearch](elasticsearch/)|medium|Extensions to ElasticSearch client library|No|
|[json-jackson](json-jackson/)|tiny|Jackson JSON Data Binding extensions + loading of Kotlin module|Yes|
|[netflix-graph](netflix-graph/)|medium|In memory graph building and compression/serialization.  A wrapper adding schema, ordinal tracking, serialization with ordinals, and is much easier to use API|No|
|[vertx3](vertx3/)|medium|Vert.x-3 helpers and integration with Kovenant Promises|Yes|

Modules marked with "yes" for Injekt, are modules that have intergration with [Kohesive/Injekt](http://github.com/kohesive/injekt) and provide prebuild injectable modules that you can easily import providing factories or singletons for dependency injection.  Using an Injekt module looks something like:

```kotlin
class MyApp {
    companion object : InjektMain() {
        // my app starts here with a static main()
        platformStatic public fun main(args: Array<String>) {
            MyApp().run()
        }

        // the Injekt system will call me back here on a method I override.  And all my functions for registration are
        // easy to find on the receiver class
        override fun InjektRegistrar.registerInjectables() {
            // add my singletons, factories, keyed factories, per-thread factories, ...
            ...
 
            // import prebuilt Injekt modules
            importModule(AmazonS3Injektables)  
            importModule(JacksonWithKotlinAndJdk8Injektables)
        }
    }

    ...
    // later, use them in properties in any class
    val s3: AmazonS3Client by Delegates.injectLazy()
    // or use them anywhere in code
    val myObject: CoolObject = Inject.get<ObjectMapper>().readValue(jsonString)
{'fraction_non_alphanumeric': 0.13060451910564297, 'fraction_numerical': 0.019401395954099135, 'mean_word_length': 4.234674922600619, 'pattern_counts': {'":': 0, '<': 23, '<?xml version=': 0, '>': 23, 'https://': 18, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4274069', 'n_tokens_mistral': 2766, 'n_tokens_neox': 2604, 'n_words': 744}