Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chris-huxtable/config.cr
Easy to use configuration and parser.
https://github.com/chris-huxtable/config.cr
configuration crystal-lang crystal-language shards
Last synced: about 2 months ago
JSON representation
Easy to use configuration and parser.
- Host: GitHub
- URL: https://github.com/chris-huxtable/config.cr
- Owner: chris-huxtable
- License: isc
- Created: 2018-04-26T21:13:00.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2021-05-01T19:14:10.000Z (over 3 years ago)
- Last Synced: 2024-05-03T04:55:23.942Z (5 months ago)
- Topics: configuration, crystal-lang, crystal-language, shards
- Language: Crystal
- Homepage:
- Size: 87.9 KB
- Stars: 14
- Watchers: 2
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-crystal - config.cr - Easy to use configuration format parser (Data Formats)
- awesome-crystal - config.cr - Easy to use configuration format parser (Data Formats)
- awesome-crystal - config.cr - Easy to use configuration format parser (Data Formats)
README
# config.cr
[![Docs](https://img.shields.io/badge/docs-available-brightgreen.svg)](https://chris-huxtable.github.io/config.cr/)
[![GitHub release](https://img.shields.io/github/release/chris-huxtable/config.cr.svg)](https://github.com/chris-huxtable/config.cr/releases)
[![Build Status](https://travis-ci.org/chris-huxtable/config.cr.svg?branch=master)](https://travis-ci.org/chris-huxtable/config.cr)`config.cr` is a parser for a configuration format designed to be more effective than JSON, YAML, INI, and HJSON. It also inherits aspects from 'OpenBSD style' configs like macros.
```
# TL;DR
$self = config.crjson: Too many quotes
yaml: Pays attention to whitespace
ini: No nesting
hjson: Data oriented. Support?
openbsd: Macros are awesome/* If only something combined the good
parts and got rid of the bad */answer: $self
```## Installation
Add this to your application's `shard.yml`:
```yaml
dependencies:
config:
github: chris-huxtable/config.cr
```## Usage
```crystal
require "config"
```You can parse a file with:
```crystal
config = Config.file("/path/to/file.conf")
```You can access the entries via the `Config::Any` objects.
```crystal
config = Config.parse("username: chris, link: https://github.com/chris-huxtable/config.cr")username = config.as_s("username")
link = config.as_a("link")
```## Format
### Root Object:
The root is considered an object. That is to say you must provide a key for any root entry and you should not wrap entries in `{}`.
```
key: "value"
```### Keys:
Unlike JSON, object keys can be specified without quotes.
```
rate: 1000
```### Strings:
Unlike JSON, strings can be specified without quotes as long as it doesn't contain special characters like `:`, `=`, `{`, `}`, `[`, `]`, or `,`. Though, `:`, `=` are allowed if they are not a key.
```
rate: This is a string.
```### Separators:
Unlike JSON, entries can be separated with commas or newlines.
```
first: 1
second: 2, third: 3
```### Comments:
There are three types of comments to support the common commenting styles.#### Hash Comments:
A to-end-of-line comment initiated by a `#` symbol. As common in Crystal, Ruby, Python, Shell, Perl, et al.
```
# hash style comments
# (because it's just one character)
```#### Line Comments:
A to-end-of-line comment initiated by a `//`. As common in C, Objective-C, C++, D, Swift, PHP, JavaScript, et al.
```
// line style comments
// (because it's like C/Objective-C/...)
```#### Block Comments:
A block comment initiated by a `/*` and terminated by `*/`. As common in C, Objective-C, C++, D, Swift, PHP, et al.
```
/* block style comments because
it allows you to comment out a block */
```
Note: This does not *yet* support nested comments.### Macros:
A macro is a saved value which can be referenced in the rest fo the document. The key must be prefixed with a `$` and assigned with a `=` as opposed to a `:`.
```
$defaultName = "Default Name"
$nameKey = name$defaultObject = {
first: 1
second: 2
}$nameKey: $defaultName
object: $defaultObject
```Note: Macro's cannot yet be inserted into strings.
### Fault Tolerance:
Recovers from easy to make mistakes. Like useless commas.
```
first: 1
second: 2,
third: 3,,,
```## Contributing
1. Fork it ( https://github.com/chris-huxtable/config.cr/fork )
2. Create your feature branch (git checkout -b my-new-feature)
3. Commit your changes (git commit -am 'Add some feature')
4. Push to the branch (git push origin my-new-feature)
5. Create a new Pull Request## Contributors
- [Chris Huxtable](https://github.com/chris-huxtable) - creator, maintainer