Giter Site home page Giter Site logo

poncho's Introduction

poncho-logo

Poncho

Language Tag Linux CI

A .env parser/loader improved for performance. Poncho Icon by lastspark from Noun Project.

Installation

Add this to your application's shard.yml:

dependencies:
  poncho:
    github: icyleaf/poncho

Usage

Add your application configuration to your .env file in the root of your project:

MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_DATABASE=poncho
MYSQL_USER=poncho
MYSQL_PASSWORD=74e10b72-33b1-434b-a476-cfee0faa7d75

Now you can parse or load it.

Parse

Poncho parses the contents of your file containing environment variables is available to use. It accepts a String or IO and will return an Hash with the parsed keys and values.

Rules

Poncho parser currently supports the following rules:

  • Skipped the empty line and comment(#).
  • Ignore the comment which after (#).
  • ENV=development becomes {"ENV" => "development"}.
  • Snakecase and upcase the key: dbName becomes DB_NAME, DB_NAME becomes DB_NAME
  • Support variables in value. $NAME or ${NAME}.
  • Whitespace is removed from both ends of the value. NAME = foo becomes{"NAME" => "foo"}
  • New lines are expanded if in double quotes. MULTILINE="new\nline" becomes {"MULTILINE" => "new\nline"}
  • Inner quotes are maintained (such like Hash/JSON). JSON={"foo":"bar"} becomes {"JSON" => "{\"foo\":\"bar\"}"}
  • Empty values become empty strings.
  • Single and double quoted values are escaped.
  • Overwrite optional (default is non-overwrite).
  • Support variables in value. WELCOME="hello $NAME" becomes {"WELCOME" => "hello foo"}

Overrides

By default, Poncho won't overwrite existing environment variables as dotenv assumes the deployment environment has more knowledge about configuration than the application does. To overwrite existing environment variables you can use Poncho.parse!(string_or_io) / Poncho.from_file(file, overwrite: true) and Poncho.parse(string_or_io, overwrite: true).

Examples

require "poncho"
# Or only import parser
require "poncho/parser"

poncho = Poncho.from_file ".env"
# or
poncho = Poncho.parse("ENV=development\nENV=production")
poncho["ENV"] # => "development"

# Overwrite value with exists key
poncho = Poncho.parse!("ENV=development\nENV=production")
poncho["ENV"] # => "production"

Load

Poncho loads the environment file is easy to use, based on parser above.

It accepts both single file (or path) and multiple files.

Orders

Poncho loads single file supports the following order with environment name (default is development):

  • .env - The Original®
  • .env.development - Environment-specific settings.
  • .env.local - Local overrides. This file is loaded for all environments except test.
  • .env.development.local - Local overrides of environment-specific settings.

NO effect with multiple files, it only loads the given files.

Overrides

By default, Poncho won't overwrite existing environment variables as dotenv assumes the deployment environment has more knowledge about configuration than the application does. To overwrite existing environment variables you can use Poncho.load!(*files) or Poncho.load(*files, overwrite: true).

Examples

require "poncho"
# Or only import loader
require "poncho/loader"

# Load singe file
# Searching order: .env.development, .env.local, .env.development.local
Poncho.load ".env"

# Load from path
Poncho.load "config/"

# Load production file
# Searching order: .env, .env.production, .env.local, .env.production.local
Poncho.load ".env", env: "production"

# Load multiple files and overwrite value with exists key
# note: ignore enviroment name.
# Searching order: .env, .env.local
Poncho.load! ".env", ".env.local", env: "test"

Best solution

Totem is here to help with that. Poncho was built-in to Totem to better with configuration. Configuration file formats is always the problem, you want to focus on building awesome things.

How to Contribute

Your contributions are always welcome! Please submit a pull request or create an issue to add a new question, bug or feature to the list.

All Contributors are on the wall.

You may also like

  • halite - Crystal HTTP Requests Client with a chainable REST API, built-in sessions and middlewares.
  • totem - Load and parse a configuration file or string in JSON, YAML, dotenv formats.
  • markd - Yet another markdown parser built for speed, Compliant to CommonMark specification.
  • popcorn - Easy and Safe casting from one type to another.
  • fast-crystal - 💨 Writing Fast Crystal 😍 -- Collect Common Crystal idioms.

License

MIT License © icyleaf

poncho's People

Contributors

danny8376 avatar icyleaf avatar imgbotapp avatar jasdeepsingh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

poncho's Issues

Logo proposal

Hello. I am a graphic designer. I volunteer to design a logo for you. What do you say?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.