From f515cf819494010a00a11bc882a019cf6caee213 Mon Sep 17 00:00:00 2001 From: Elias Perez Date: Wed, 11 Oct 2017 20:58:06 -0400 Subject: [PATCH] Adds environment boolean checks Amber currently ships with 3 different environments: development, test and production. As a developer I would like to sometimes run code conditionally depending on the environment that the application is. ```crystal if Amber::Env.development? # ... code here ... end ``` This PR addresses the issue by creating a Amber::Env module that contains 3 module methods: Amber::Env.development? Amber::Env.test? Amber::Env.production? With the changes in this PR a developer should be able to call the appropriate method to check for the desired environment. --- spec/amber/server/env_spec.cr | 17 +++++++++++++++++ src/amber/server/env.cr | 9 +++++++++ src/amber/server/settings.cr | 3 ++- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 spec/amber/server/env_spec.cr create mode 100644 src/amber/server/env.cr diff --git a/spec/amber/server/env_spec.cr b/spec/amber/server/env_spec.cr new file mode 100644 index 000000000..b78ebc05d --- /dev/null +++ b/spec/amber/server/env_spec.cr @@ -0,0 +1,17 @@ +require "../../../spec_helper" + +describe Amber::Env do + {% for env in Amber::Env::ENVIRONMENTS %} + describe ".{{env.id}}?" do + it "returns true when the environment is {{env.id}}" do + Amber::Settings.env = {{env}} + Amber::Env.{{env.id}}?.should eq true + end + + it "returns false when the environment does not match" do + Amber::Settings.env = "invalid environment" + Amber::Env.{{env.id}}?.should eq false + end + end + {% end %} +end diff --git a/src/amber/server/env.cr b/src/amber/server/env.cr new file mode 100644 index 000000000..5d58f1f6e --- /dev/null +++ b/src/amber/server/env.cr @@ -0,0 +1,9 @@ +module Amber + module ENV + {% for env in Settings::ENVIRONMENTS %} + def self.{{env.id}}? + Settings.env.not_nil!.downcase == {{env.downcase.id.stringify}} + end + {% end %} + end +end diff --git a/src/amber/server/settings.cr b/src/amber/server/settings.cr index 65993e4ed..da8d58e7f 100644 --- a/src/amber/server/settings.cr +++ b/src/amber/server/settings.cr @@ -23,7 +23,8 @@ module Amber class_property redis_url = "" class_property session : Hash(Symbol, Symbol | String | Int32) - # loads settings from environment yaml + # Loads environment yml settings from the current AMBER_ENV environment variable + # and defaults to development environment {{ run("./environment.cr") }} end end