-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit e80dee1
Showing
44 changed files
with
14,118 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
--- | ||
name: Bug report | ||
about: Create a report to help us improve this library. | ||
title: '' | ||
labels: '' | ||
assignees: '' | ||
|
||
--- | ||
|
||
**Describe the bug** | ||
A clear and concise description of what the bug is. | ||
|
||
**To Reproduce** | ||
Steps to reproduce the behavior: | ||
1. Go to '...' | ||
2. Click on '....' | ||
3. Scroll down to '....' | ||
4. See error | ||
|
||
**Expected behavior** | ||
A clear and concise description of what you expected to happen. | ||
|
||
**Screenshots** | ||
If applicable, add screenshots to help explain your problem. | ||
|
||
**Environment** | ||
- OS, including version | ||
- Version of this library | ||
|
||
**Additional information** | ||
Add any other information about the problem here. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
--- | ||
name: Feature request | ||
about: Suggest an idea for this project | ||
title: '' | ||
labels: '' | ||
assignees: '' | ||
|
||
--- | ||
|
||
**Is your feature request related to a problem? Please describe.** | ||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] | ||
|
||
**Describe the solution you'd like** | ||
A clear and concise description of what you want to happen. | ||
|
||
**Describe alternatives you've considered** | ||
A clear and concise description of any alternative solutions or features you've considered. | ||
|
||
**Additional context** | ||
Add any other context or screenshots about the feature request here. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
|
||
name: Dart | ||
|
||
on: | ||
push: | ||
branches: [ main ] | ||
pull_request: | ||
branches: [ main ] | ||
|
||
jobs: | ||
test: | ||
runs-on: ${{ matrix.os }} | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
os: [ubuntu-latest, macos-latest, windows-latest] | ||
sdk: ['stable', 'dev'] | ||
|
||
steps: | ||
- uses: actions/checkout@v2 | ||
- name: Set up Dart | ||
uses: dart-lang/setup-dart@v1 | ||
with: | ||
sdk: ${{matrix.sdk}} | ||
- name: Run tests on Windows after setting the HOME environment variable | ||
if: ${{ matrix.os == 'windows-latest' }} | ||
run: | | ||
$env:HOME = $env:USERPROFILE | ||
echo "Env: HOME = $env:HOME" | ||
dart pub get | ||
dart test | ||
- name: Run tests on POSIX | ||
if: ${{ matrix.os != 'windows-latest' }} | ||
run: | | ||
dart pub get | ||
dart test --verbose-trace |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
# Files and directories created by pub. | ||
.dart_tool/ | ||
.packages | ||
|
||
# Conventional directory for build output. | ||
build/ | ||
|
||
# Omit committing pubspec.lock for library packages; see | ||
# https://dart.dev/guides/libraries/private-files#pubspeclock. | ||
pubspec.lock |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
# Change Log | ||
|
||
All notable changes for the new implementation should be documented in this file. | ||
|
||
## 0.1.0 - 2021-11-16 | ||
### Added | ||
- [`TBD`](https://github.com/vsajip/dart-cfg-lib/commit/TBD) | ||
Release new implementation. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
BSD 3-Clause License | ||
|
||
Copyright (c) 2021, Vinay Sajip. | ||
All rights reserved. | ||
|
||
Redistribution and use in source and binary forms, with or without | ||
modification, are permitted provided that the following conditions are met: | ||
|
||
1. Redistributions of source code must retain the above copyright notice, this | ||
list of conditions and the following disclaimer. | ||
|
||
2. Redistributions in binary form must reproduce the above copyright notice, | ||
this list of conditions and the following disclaimer in the documentation | ||
and/or other materials provided with the distribution. | ||
|
||
3. Neither the name of the copyright holder nor the names of its | ||
contributors may be used to endorse or promote products derived from | ||
this software without specific prior written permission. | ||
|
||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | ||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
# CFG.Config | ||
|
||
A Dart library for working with the CFG configuration format. | ||
|
||
## Installation | ||
|
||
The package can be installed by adding `cfg_lib` to your list of dependencies in `pubspec.yaml`: | ||
|
||
```yaml | ||
cfg_lib: ^0.1.0 | ||
``` | ||
## Usage | ||
The CFG configuration format is a text format for configuration files which is similar to, and a superset of, the JSON format. It dates from before its first announcement in [2008](https://wiki.python.org/moin/HierConfig) and has the following aims: | ||
* Allow a hierarchical configuration scheme with support for key-value mappings and lists. | ||
* Support cross-references between one part of the configuration and another. | ||
* Provide a string interpolation facility to easily build up configuration values from other configuration values. | ||
* Provide the ability to compose configurations (using include and merge facilities). | ||
* Provide the ability to access real application objects safely, where supported by the platform. | ||
* Be completely declarative. | ||
It overcomes a number of drawbacks of JSON when used as a configuration format: | ||
* JSON is more verbose than necessary. | ||
* JSON doesn’t allow comments. | ||
* JSON doesn’t provide first-class support for dates and multi-line strings. | ||
* JSON doesn’t allow trailing commas in lists and mappings. | ||
* JSON doesn’t provide easy cross-referencing, interpolation, or composition. | ||
A simple example | ||
================ | ||
With the following configuration file, `test0.cfg`: | ||
```text | ||
a: 'Hello, ' | ||
b: 'world!' | ||
c: { | ||
d: 'e' | ||
} | ||
'f.g': 'h' | ||
christmas_morning: `2019-12-25 08:39:49` | ||
home: `$HOME` | ||
foo: `$FOO|bar` | ||
``` | ||
You can load and query the above configuration using [iex](https://hexdocs.pm/iex/IEx.html): | ||
Loading a configuration | ||
----------------------- | ||
The configuration above can be loaded as shown below. In the REPL shell: | ||
```text | ||
iex(1)> alias CFG.Config | ||
CFG.Config | ||
iex(2)> {:ok, cfg} = Config.from_file("test0.cfg") | ||
{:ok, #PID<0.218.0>} | ||
``` | ||
|
||
The successful call returns a `Config` which can be used to query the configuration. | ||
|
||
Access elements with keys | ||
------------------------- | ||
Accessing elements of the configuration with a simple key is not much harder than using a map: | ||
```text | ||
iex(3)> Config.get(cfg, "a") | ||
{:ok, "Hello, "} | ||
iex(4)> Config.get(cfg, "b") | ||
{:ok, "world!"} | ||
``` | ||
|
||
Access elements with paths | ||
-------------------------- | ||
As well as simple keys, elements can also be accessed using path strings: | ||
```text | ||
iex(5)> Config.get(cfg, "c.d") | ||
{:ok, "e"} | ||
``` | ||
Here, the desired value is obtained in a single step, by (under the hood) walking the path `c.d` – first getting the mapping at key `c`, and then the value at `d` in the resulting mapping. | ||
|
||
Note that you can have simple keys which look like paths: | ||
```text | ||
iex(6)> Config.get(cfg, "f.g") | ||
{:ok, "h"} | ||
``` | ||
If a key is given that exists in the configuration, it is used as such, and if it is not present in the configuration, an attempt is made to interpret it as a path. Thus, `f.g` is present and accessed via key, whereas `c.d` is not an existing key, so is interpreted as a path. | ||
|
||
Access to date/time objects | ||
--------------------------- | ||
You can also get native Elixir date/time objects from a configuration, by using an ISO date/time pattern in a backtick-string: | ||
```text | ||
iex(7)> Config.get(cfg, "christmas_morning") | ||
{:ok, ~U[2019-12-25 08:39:49.000000Z]} | ||
``` | ||
Access to other Elixir/Erlang objects | ||
--------------------------------------- | ||
Access to other Elixir/Erlang objects is also possible using the backtick-string syntax, provided that they are one of: | ||
* Environment variables | ||
* Public functions in public modules which take no arguments | ||
```text | ||
iex(8)> {:ok, dt} = Config.get(cfg, "now") | ||
{:ok, ~U[2021-10-16 12:37:37.781391Z]} | ||
iex(9)> DateTime.diff(DateTime.utc_now, dt) | ||
6 | ||
``` | ||
|
||
Access to environment variables | ||
------------------------------- | ||
To access an environment variable, use a backtick-string of the form `$VARNAME`: | ||
```text | ||
iex(10)> elem(Config.get(cfg, "home"), 1) == System.get_env("HOME") | ||
true | ||
``` | ||
You can specify a default value to be used if an environment variable isn’t present using the `$VARNAME|default-value` form. Whatever string follows the pipe character (including the empty string) is returned if the VARNAME is not a variable in the environment. | ||
```text | ||
iex(11)> Config.get(cfg, "foo") | ||
{:ok, "bar"} | ||
``` | ||
|
||
For more information, see [the CFG documentation](https://docs.red-dove.com/cfg/index.html). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# This file configures the static analysis results for your project (errors, | ||
# warnings, and lints). | ||
# | ||
# This enables the 'recommended' set of lints from `package:lints`. | ||
# This set helps identify many issues that may lead to problems when running | ||
# or consuming Dart code, and enforces writing Dart using a single, idiomatic | ||
# style and format. | ||
# | ||
# If you want a smaller set of lints you can change this to specify | ||
# 'package:lints/core.yaml'. These are just the most critical lints | ||
# (the recommended set includes the core lints). | ||
# The core lints are also what is used by pub.dev for scoring packages. | ||
|
||
include: package:lints/recommended.yaml | ||
|
||
# Uncomment the following section to specify additional rules. | ||
|
||
# linter: | ||
# rules: | ||
# - camel_case_types | ||
|
||
# analyzer: | ||
# exclude: | ||
# - path/to/excluded/files/** | ||
|
||
# For more information about the core and recommended set of lints, see | ||
# https://dart.dev/go/core-lints | ||
|
||
# For additional information about configuring this file, see | ||
# https://dart.dev/guides/language/analysis-options |
Oops, something went wrong.