<commit_before># OmniConfig

Omniconfig is a Ruby configuration library that allows Ruby libraries
and applications to be configured by _anything_. For web applications,
this may be useful as service configuration can come from a central
source such as ZooKeeper. For command line applications, this is useful
because the application configuration itself can potentially be in
any format: Ruby, Python, XML, etc.

## Installation

Omniconfig is distributed as a gem. Any software that wants to be configured
with omniconfig will require this gem:

    $ gem install omniconfig

## Usage

OmniConfig is a schema-based configuration library. This allows OmniConfig
to validate structure and types of incoming configuration values. Of course,
embracing the dynamic nature of Ruby, it is perfectly possible to accept any
values and do decoding yourself, if you wish. However, most applications have
a finite set of configuration parameters.

Defining a schema for your configuration is easy:

```ruby
person = OmniConfig.structure do |s|
  s.define("name", OmniConfig::Types::String)
  s.define("age", OmniConfig::Types::Integer)
end

root = OmniConfig.structure do |s|
  s.define("manager", OmniConfig::Types::String)
  s.define("employees", OmniConfig::Types::List, person)
end
```<commit_msg>Fix more README bugs<commit_after># OmniConfig

Omniconfig is a Ruby configuration library that allows Ruby libraries
and applications to be configured by _anything_. For web applications,
this may be useful as service configuration can come from a central
source such as ZooKeeper. For command line applications, this is useful
because the application configuration itself can potentially be in
any format: Ruby, Python, XML, etc.

## Installation

Omniconfig is distributed as a gem. Any software that wants to be configured
with omniconfig will require this gem:

    $ gem install omniconfig

## Usage

OmniConfig is a schema-based configuration library. This allows OmniConfig
to validate structure and types of incoming configuration values. Of course,
embracing the dynamic nature of Ruby, it is perfectly possible to accept any
values and do decoding yourself, if you wish. However, most applications have
a finite set of configuration parameters.

Defining a schema for your configuration is easy:

```ruby
person = OmniConfig.structure do |s|
  s.define("name", OmniConfig::Type::String)
  s.define("age", OmniConfig::Type::Integer)
end

root = OmniConfig.structure do |s|
  s.define("manager", OmniConfig::Type::String)
  s.define("employees", OmniConfig::Type::List, person)
end
```
{'fraction_non_alphanumeric': 0.06576402321083172, 'fraction_numerical': 0.0, 'mean_word_length': 5.276699029126213, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, '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': '5115449', 'n_tokens_mistral': 679, 'n_tokens_neox': 654, 'n_words': 329}