really-confy 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/really_confy.rb +29 -24
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c302d38b29348f70a6e2246add5eb28fb4d25b58
|
4
|
+
data.tar.gz: b7cf55ba7d1bc753a253a38c5d952405189d8c72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 26538073af0b6b3089785ca7eab1d97d4b3601dd7d32b55d2c5aa1305c2531890d5c9fbddea68ae64f42d6733962932cf256c076f03513849390ac8007d9ff02
|
7
|
+
data.tar.gz: fad912633f37944bca950a92800c5b66f0f5386fdd539cf93f6d7583f45b09fcb5d85c2f9a5e7504cfc3b9c7b70a7713287f6ef1feefe32d7ede7b8467165539
|
data/lib/really_confy.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'yaml'
|
2
|
+
require 'hashie/mash'
|
3
|
+
require 'hashie/extensions/parsers/yaml_erb_parser'
|
4
|
+
require 'hashie/extensions/deep_fetch'
|
2
5
|
require 'rainbow'
|
3
|
-
require 'active_support/core_ext/hash/deep_merge'
|
4
6
|
|
5
7
|
class ReallyConfy
|
6
8
|
|
@@ -30,10 +32,6 @@ class ReallyConfy
|
|
30
32
|
],
|
31
33
|
# the environment key will be selected based on this ENV variable
|
32
34
|
env_var_name: 'CONFY_ENV',
|
33
|
-
# use Symbols instead of Strings for all keys in the config Hash
|
34
|
-
symbol_keys: false,
|
35
|
-
# load will return an ActiveSupport::HashWithIndifferentAccess instead of a Hash
|
36
|
-
indifferent_keys: false,
|
37
35
|
# suppress output to stdout/stderr
|
38
36
|
quiet: false,
|
39
37
|
# enable colorized output; nil means 'auto', which enables color by default unless the
|
@@ -41,7 +39,9 @@ class ReallyConfy
|
|
41
39
|
color: nil,
|
42
40
|
# force the ruby interpreter to exit if ReallyConfy encounters an error during load
|
43
41
|
# ... not a good idea to use this with quiet:true unless you know exactly what you're doing
|
44
|
-
exit_on_error: false
|
42
|
+
exit_on_error: false,
|
43
|
+
# Don't allow (inadvertent) modification of the config once it's been loaded
|
44
|
+
read_only: false
|
45
45
|
}
|
46
46
|
|
47
47
|
attr_accessor :config_files
|
@@ -67,14 +67,6 @@ class ReallyConfy
|
|
67
67
|
ensure_required_config_files_exist
|
68
68
|
check_suggested_config_files_exist
|
69
69
|
ensure_local_config_files_are_not_in_git
|
70
|
-
|
71
|
-
if @symbol_keys && @indifferent_keys
|
72
|
-
fail ArgumentError,
|
73
|
-
":symbol_keys and :indifferent_keys options cannot be used together!"
|
74
|
-
end
|
75
|
-
|
76
|
-
require 'active_support/core_ext/hash/keys' if @symbol_keys
|
77
|
-
require 'active_support/core_ext/hash/indifferent_access' if @indifferent_keys
|
78
70
|
end
|
79
71
|
|
80
72
|
def load
|
@@ -87,7 +79,7 @@ class ReallyConfy
|
|
87
79
|
multi_env_configs =
|
88
80
|
existing_config_files.map{|file| load_config_file(file) }
|
89
81
|
|
90
|
-
unless multi_env_configs.any?{|config| config.
|
82
|
+
unless multi_env_configs.any?{|config| config.has_key?(env) }
|
91
83
|
fail ConfigError, "#{env.inspect} is not a valid environment! None of the loaded configs"+
|
92
84
|
" had a top-level #{env.inspect} key. All configurations should be nested under top"+
|
93
85
|
" level keys corresponding to environment names (e.g. 'test', 'development', ...)"
|
@@ -100,8 +92,9 @@ class ReallyConfy
|
|
100
92
|
|
101
93
|
merged_config['env'] ||= env
|
102
94
|
|
103
|
-
|
104
|
-
|
95
|
+
if @read_only
|
96
|
+
merged_config.freeze
|
97
|
+
end
|
105
98
|
|
106
99
|
merged_config
|
107
100
|
rescue => e
|
@@ -113,6 +106,9 @@ class ReallyConfy
|
|
113
106
|
print_error ""
|
114
107
|
print_error "#{e}"
|
115
108
|
print_error ""
|
109
|
+
print_error "BACKTRACE:"
|
110
|
+
print_error " #{e.backtrace.join("\n ")}"
|
111
|
+
print_error ""
|
116
112
|
print_error "!"*header.length
|
117
113
|
print_error ""
|
118
114
|
if @exit_on_error
|
@@ -124,14 +120,11 @@ class ReallyConfy
|
|
124
120
|
|
125
121
|
def load_config_file(file)
|
126
122
|
full_path = full_path_to_config_file(file)
|
127
|
-
multi_env_config = (YAML.load_file full_path)
|
128
|
-
|
129
|
-
# YAML.load_file will return false if given an empty file to load
|
130
|
-
return {} if multi_env_config == false
|
131
123
|
|
132
|
-
|
133
|
-
|
134
|
-
|
124
|
+
if File.exists? full_path
|
125
|
+
multi_env_config = (ReallyConfy::Config.load full_path)
|
126
|
+
else
|
127
|
+
multi_env_config = ReallyConfy::Config.new {}
|
135
128
|
end
|
136
129
|
|
137
130
|
multi_env_config
|
@@ -229,6 +222,18 @@ class ReallyConfy
|
|
229
222
|
end
|
230
223
|
end
|
231
224
|
|
225
|
+
class Config < Hashie::Mash
|
226
|
+
include Hashie::Extensions::DeepFetch
|
227
|
+
|
228
|
+
def freeze
|
229
|
+
super
|
230
|
+
self.values.each do |v|
|
231
|
+
v.freeze
|
232
|
+
end
|
233
|
+
self
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
232
237
|
class ConfigError < StandardError
|
233
238
|
end
|
234
239
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: really-confy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Zukowski
|
@@ -11,33 +11,33 @@ cert_chain: []
|
|
11
11
|
date: 2015-10-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rainbow
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: hashie
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '3.4'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '3.4'
|
41
41
|
description:
|
42
42
|
email: mzukowski@adknowledge.com
|
43
43
|
executables: []
|