From 7213dfd2858f6ed11b5caec70ef247c534296223 Mon Sep 17 00:00:00 2001 From: Jeremy Woertink Date: Tue, 26 Nov 2024 14:57:16 -0800 Subject: [PATCH] Raise exception when a duplicate key is found when reading from a file. Fixes #34 (#36) --- spec/parser_spec.cr | 6 ++++++ spec/support/.badenv | 2 ++ src/lucky_env/errors.cr | 3 +++ src/lucky_env/parser.cr | 11 ++++++++++- 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 spec/support/.badenv diff --git a/spec/parser_spec.cr b/spec/parser_spec.cr index eaa7d6a..01a30c0 100644 --- a/spec/parser_spec.cr +++ b/spec/parser_spec.cr @@ -64,6 +64,12 @@ describe LuckyEnv::Parser do data["DB_NAME"].should eq "my_app_development" data["LITERAL"].should eq "${NOT_EXISTS_ENV}" end + + it "raises on duplicate keys detected" do + expect_raises(LuckyEnv::DuplicateKeyDetectedError, /Duplicate key HOST found in \.\/spec\/support\/\.badenv/) do + parser.read_file("./spec/support/.badenv") + end + end end end diff --git a/spec/support/.badenv b/spec/support/.badenv new file mode 100644 index 0000000..32b681e --- /dev/null +++ b/spec/support/.badenv @@ -0,0 +1,2 @@ +HOST=localhost +HOST=duplicate_key \ No newline at end of file diff --git a/src/lucky_env/errors.cr b/src/lucky_env/errors.cr index 37aaefb..0cfec27 100644 --- a/src/lucky_env/errors.cr +++ b/src/lucky_env/errors.cr @@ -4,4 +4,7 @@ module LuckyEnv class MissingFileError < Exception end + + class DuplicateKeyDetectedError < Exception + end end diff --git a/src/lucky_env/parser.cr b/src/lucky_env/parser.cr index 148f195..e32d67c 100644 --- a/src/lucky_env/parser.cr +++ b/src/lucky_env/parser.cr @@ -30,7 +30,16 @@ module LuckyEnv next if comment?(string) key, value = parse_value(string) - hash[key] = value + if hash.has_key?(key) + raise LuckyEnv::DuplicateKeyDetectedError.new <<-ERROR + Duplicate key #{key} found in #{file_path}. + To ignore a key, place a # at the front of the line like this: + + # YOUR_KEY=ignored_value + ERROR + else + hash[key] = value + end end keys = hash.keys