From 8271c32a9a1a24de379e7b2bacf4a999eb97910a 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 | 4 +++- 3 files changed, 29 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..7fc3cac5d --- /dev/null +++ b/spec/amber/server/env_spec.cr @@ -0,0 +1,17 @@ +require "../../../spec_helper" + +describe Amber::Env do + {% for env in Amber::Settings::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..25dd71818 100644 --- a/src/amber/server/settings.cr +++ b/src/amber/server/settings.cr @@ -4,6 +4,7 @@ require "./ssl" module Amber class Settings + ENVIRONMENTS = %w(development test production) include Amber::DSL::Server alias WebSocketAdapter = WebSockets::Adapters::RedisAdapter.class | WebSockets::Adapters::MemoryAdapter.class class_getter handler = Pipe::Pipeline.new @@ -23,7 +24,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