From 699416730636c43891053c9259c817d8bad5c93a Mon Sep 17 00:00:00 2001 From: Dominic Grimm Date: Sat, 22 Jan 2022 21:31:30 +0100 Subject: [PATCH] Init --- .editorconfig | 9 +++++++++ .gitignore | 9 +++++++++ LICENSE | 21 +++++++++++++++++++++ README.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ shard.yml | 9 +++++++++ src/senf.cr | 38 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 135 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 shard.yml create mode 100644 src/senf.cr diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..163eb75 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*.cr] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0bbd4a9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +/docs/ +/lib/ +/bin/ +/.shards/ +*.dwarf + +# Libraries don't need dependency lock +# Dependencies will be locked in applications that use them +/shard.lock diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d380e85 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Dominic Grimm + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..f261313 --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +# senf + +A safe environment variable requester. +Should not be used in any kind of production environment. + +## Installation + +1. Add the dependency to your `shard.yml`: + + ```yaml + dependencies: + senf: + git: https://git.dergrimm.net/dergrimm/senf.git + ``` + +2. Run `shards install` + +## Usage + +```crystal +require "senf" + +SAFE_ENV = Senf::SafeEnv.new([ + "TEST_1", + "TEST_2" +]) + +SAFE_ENV << "TEST_3" + +p! SAFE_ENV["TEST_1"], + SAFE_ENV["TEST_2"], + SAFE_ENV["TEST_3"] +``` + +## Development + +TODO: Write development instructions here + +## Contributing + +1. Fork it +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 + +- [Dominic Grimm](https://git.dergrimm.net/dergrimm) - creator and maintainer diff --git a/shard.yml b/shard.yml new file mode 100644 index 0000000..a91dfcc --- /dev/null +++ b/shard.yml @@ -0,0 +1,9 @@ +name: senf +version: 0.1.0 + +authors: + - Dominic Grimm + +crystal: 1.3.0 + +license: MIT diff --git a/src/senf.cr b/src/senf.cr new file mode 100644 index 0000000..8dedd41 --- /dev/null +++ b/src/senf.cr @@ -0,0 +1,38 @@ +module Senf + VERSION = {{ `shards version`.stringify.chomp.downcase }} + + class SafeEnv + private property keys + + def initialize(@keys = {} of String => String?) + end + + def initialize(keys : Array(String)) + @keys = {} of String => String? + keys.each { |k| self.<< k } + end + + def <<(key : String) : self + @keys[key] = ENV[key]? + + self + end + + def []?(key : String) : String? + if @keys.has_key?(key) + @keys[key]? + end + end + + def [](key : String) : String + if @keys.has_key?(key) + val = @keys[key]? + raise "ENV[#{key}] is nil" unless val + + val + else + raise "No such key: #{key}" + end + end + end +end