Skip to content

Commit ff65c10

Browse files
authored
Merge pull request #275 from DannyBen/refactor/settings
Refactor settings (internal)
2 parents f9d6855 + e19b9c7 commit ff65c10

File tree

3 files changed

+98
-9
lines changed

3 files changed

+98
-9
lines changed

lib/bashly/settings.rb

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
module Bashly
22
class Settings
33
class << self
4+
include AssetHelper
5+
46
attr_writer :source_dir, :target_dir, :lib_dir, :strict, :tab_indent
57

68
def source_dir
7-
@source_dir ||= get :source_dir, 'src'
9+
@source_dir ||= get :source_dir
810
end
911

1012
def target_dir
11-
@target_dir ||= get :target_dir, '.'
13+
@target_dir ||= get :target_dir
1214
end
1315

1416
def lib_dir
15-
@lib_dir ||= get :lib_dir, 'lib'
17+
@lib_dir ||= get :lib_dir
1618
end
1719

1820
def strict
@@ -24,7 +26,7 @@ def tab_indent
2426
end
2527

2628
def env
27-
@env ||= get(:env, :development)&.to_sym
29+
@env ||= get(:env)&.to_sym
2830
end
2931

3032
def env=(value)
@@ -41,14 +43,33 @@ def full_lib_dir
4143

4244
private
4345

44-
def get(key, default = nil)
45-
ENV["BASHLY_#{key.upcase}"] || user_settings[key.to_s] || default
46+
def get(key)
47+
case env_value key
48+
when nil then config[key.to_s]
49+
when "0", "false", "no" then false
50+
when "1", "true", "yes" then true
51+
else env_value key
52+
end
53+
end
54+
55+
def env_value(key)
56+
ENV["BASHLY_#{key.upcase}"]
57+
end
58+
59+
def config
60+
@config ||= defsult_settings.merge user_settings
4661
end
4762

4863
def user_settings
49-
@user_settings ||= begin
50-
File.exist?('settings.yml') ? Config.new('settings.yml') : {}
51-
end
64+
@user_settings ||= File.exist?('settings.yml') ? Config.new('settings.yml') : {}
65+
end
66+
67+
def defsult_settings
68+
@defsult_settings ||= Config.new(default_settings_path)
69+
end
70+
71+
def default_settings_path
72+
asset "templates/settings.yml"
5273
end
5374

5475
end

lib/bashly/templates/settings.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# All settings are optional (with their default values provided below), and
22
# can also be set with an environment variable with the same name, capitalized
33
# and prefixed by `BASHLY_` - for example: BASHLY_SOURCE_DIR
4+
#
5+
# When setting environment variables, you can use:
6+
# - "0", "false" or "no" to represent false
7+
# - "1", "true" or "yes" to represent true
48

59
# The path containing the bashly configuration and source files
610
source_dir: src

spec/bashly/settings_spec.rb

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
require 'spec_helper'
2+
3+
describe Settings do
4+
subject { described_class }
5+
6+
describe 'standard value' do
7+
it "returns a predefined default value" do
8+
expect(subject.tab_indent).to be false
9+
end
10+
11+
context "when its corresponding env var is set" do
12+
before do
13+
Settings.tab_indent = nil
14+
@original_value = ENV['BASHLY_TAB_INDENT']
15+
end
16+
17+
after do
18+
ENV['BASHLY_TAB_INDENT'] = @original_value
19+
end
20+
21+
it "returns true when the env var is truthy" do
22+
%w[1 true yes].each do |value|
23+
ENV['BASHLY_TAB_INDENT'] = value
24+
expect(subject.tab_indent).to be true
25+
end
26+
end
27+
28+
it "returns false when the env var is falsy" do
29+
%w[0 false no].each do |value|
30+
ENV['BASHLY_TAB_INDENT'] = value
31+
expect(subject.tab_indent).to be false
32+
end
33+
end
34+
35+
it "returns the env var value itself otherwise" do
36+
ENV['BASHLY_TAB_INDENT'] = "anything at all"
37+
expect(subject.tab_indent).to eq ENV['BASHLY_TAB_INDENT']
38+
end
39+
40+
end
41+
end
42+
43+
describe '::env' do
44+
it "returns :development by default" do
45+
expect(subject.env).to eq :development
46+
end
47+
end
48+
49+
describe '::production?' do
50+
it "returns false by default" do
51+
expect(subject.production?).to be false
52+
end
53+
54+
context "when env == :production" do
55+
before { subject.env = :production }
56+
after { subject.env = nil }
57+
58+
it "returns true" do
59+
expect(subject.production?).to be true
60+
end
61+
end
62+
end
63+
64+
end

0 commit comments

Comments
 (0)