Class: ENVied
- Inherits:
-
Object
show all
- Defined in:
- lib/envied.rb,
lib/envied/version.rb
Defined Under Namespace
Modules: Arrayable, Hashable
Classes: Configuration
Constant Summary
collapse
- VERSION =
'0.5.0'
Class Attribute Summary collapse
Class Method Summary
collapse
Class Attribute Details
.required_groups ⇒ Object
Returns the value of attribute required_groups.
61
62
63
|
# File 'lib/envied.rb', line 61
def required_groups
@required_groups
end
|
Class Method Details
.build_configuration(&block) ⇒ Object
64
65
66
67
68
|
# File 'lib/envied.rb', line 64
def self.build_configuration(&block)
Class.new(Configuration).tap do |c|
c.instance_eval(&block) if block_given?
end
end
|
.configuration(options = {}, &block) ⇒ Object
Also known as:
configure
50
51
52
53
54
55
56
57
|
# File 'lib/envied.rb', line 50
def self.configuration(options = {}, &block)
if block_given?
@configuration = build_configuration(&block).tap do |c|
options.each {|k, v| c.public_send("#{k}=", v) }
end
end
@configuration ||= build_configuration
end
|
145
146
147
|
# File 'lib/envied.rb', line 145
def self.configured_variables
configuration.attribute_set.dupend
|
.default_value(variable) ⇒ Object
Yields the assigned default for the variable. When defaults are disabled, nil is returned.
125
126
127
|
# File 'lib/envied.rb', line 125
def self.default_value(variable)
defaults_enabled? ? variable.default_value.value : nil
end
|
.defaults_enabled? ⇒ Boolean
182
183
184
|
# File 'lib/envied.rb', line 182
def self.defaults_enabled?
configuration.enable_defaults
end
|
.env ⇒ Object
113
114
115
116
117
|
# File 'lib/envied.rb', line 113
def self.env
@env ||= begin
Hash[ENV.to_hash.map {|k,v| [k, v.dup.extend(Hashable, Arrayable)] }]
end
end
|
.env_value(variable) ⇒ Object
109
110
111
|
# File 'lib/envied.rb', line 109
def self.env_value(variable)
env[variable.name.to_s]
end
|
.env_value_or_default(variable) ⇒ Object
119
120
121
|
# File 'lib/envied.rb', line 119
def self.env_value_or_default(variable)
env_value(variable) || default_value(variable)
end
|
.error_on_missing_variables! ⇒ Object
90
91
92
93
94
|
# File 'lib/envied.rb', line 90
def self.error_on_missing_variables!
if missing_variable_names.any?
raise "Please set the following ENV-variables: #{missing_variable_names.sort.join(',')}"
end
end
|
.error_on_uncoercible_variables! ⇒ Object
96
97
98
99
100
101
102
103
104
105
106
107
|
# File 'lib/envied.rb', line 96
def self.error_on_uncoercible_variables!
if non_coercible_variables.any?
single_error = "ENV['%{name}'] ('%{value}' can't be coerced to %{type})"
errors = non_coercible_variables.map do |v|
var_type = v.type.to_s.split("::").last
single_error % { name: v.name, value: env_value_or_default(v), type: var_type }
end.join ", "
raise "Some ENV-variables are not coercible: #{errors}"
end
end
|
.method_missing(method, *args, &block) ⇒ Object
186
187
188
|
# File 'lib/envied.rb', line 186
def self.method_missing(method, *args, &block)
respond_to_missing?(method) ? @instance.public_send(method, *args, &block) : super
end
|
.missing_variable_names ⇒ Object
166
167
168
169
170
|
# File 'lib/envied.rb', line 166
def self.missing_variable_names
unprovided = required_variable_names - provided_variable_names
unprovided -= names_of_required_variables_with_defaults if defaults_enabled?
unprovided
end
|
.names_of_required_variables_with_defaults ⇒ Object
172
173
174
|
# File 'lib/envied.rb', line 172
def self.names_of_required_variables_with_defaults
required_variables_with_defaults.map(&:name).map(&:to_sym)
end
|
.non_coercible_variables ⇒ Object
153
154
155
|
# File 'lib/envied.rb', line 153
def self.non_coercible_variables
required_variables.reject(&method(:variable_coercible?))
end
|
.provided_variable_names ⇒ Object
149
150
151
|
# File 'lib/envied.rb', line 149
def self.provided_variable_names
ENV.keys.map(&:to_sym)
end
|
.require(*groups) ⇒ Object
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
# File 'lib/envied.rb', line 70
def self.require(*groups)
groups.compact!
@instance = nil
if groups.any?
self.required_groups = groups.map(&:to_sym)
else
self.required_groups = [:default]
end
error_on_missing_variables!
error_on_uncoercible_variables!
_required_variables = required_variables
group_configuration = build_configuration do
_required_variables.each do |v|
@attribute_set << v
end
end
@instance = group_configuration.new(env)
end
|
.required_variable_names ⇒ Array<Symbol>
A list of all configured variable names.
136
137
138
|
# File 'lib/envied.rb', line 136
def self.required_variable_names
required_variables.map(&:name).map(&:to_sym)
end
|
.required_variables ⇒ Object
140
141
142
143
|
# File 'lib/envied.rb', line 140
def self.required_variables
from_required_group = ->(var){ self.required_groups.include?(var.options[:group]) }
configured_variables.to_a.keep_if(&from_required_group)
end
|
.required_variables_with_defaults ⇒ Object
176
177
178
179
180
|
# File 'lib/envied.rb', line 176
def self.required_variables_with_defaults
required_variables.map do |v|
v unless v.default_value.value.nil?
end.compact
end
|
.respond_to_missing?(method, include_private = false) ⇒ Boolean
190
191
192
|
# File 'lib/envied.rb', line 190
def self.respond_to_missing?(method, include_private = false)
@instance.respond_to?(method) || super
end
|
.variable_coercible?(variable) ⇒ Boolean
157
158
159
160
161
162
163
164
|
# File 'lib/envied.rb', line 157
def self.variable_coercible?(variable)
var_value = env_value_or_default(variable)
return true if var_value.respond_to?(:call)
variable.coerce var_value
rescue Virtus::CoercionError
return false
end
|