env-checker 0.1.8 → 0.1.9
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/.gitignore +1 -0
- data/.rubocop_todo.yml +16 -7
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/lib/env_checker.rb +60 -53
- data/lib/env_checker/cli.rb +9 -4
- data/lib/env_checker/configuration.rb +3 -19
- data/lib/env_checker/notifier.rb +55 -0
- data/lib/env_checker/version.rb +1 -1
- metadata +3 -3
- data/test_config.yml +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e6889c86228fd44c99631f0444f423220e039167
|
4
|
+
data.tar.gz: 5fb83011dcfbe9029a0b11579bc5f16bb8b535e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1580c19ec2e28b7b3814ce6f772e31f6a2b97f47c918b44223d0132b327bdfaeed93c23a9f9b81c441463e27bb9d1f38b15e561239f6fb8042b7cd8210edbc3
|
7
|
+
data.tar.gz: c93de2bbaf04a2a1fdeed0e43627894bd3627e88b3d05c75593c7c0ebb686e5fd6ee0206d323e1c4683c61efd277d0ff1fb0f9e7317222ca60bd919c9bbedb7d
|
data/.gitignore
CHANGED
data/.rubocop_todo.yml
CHANGED
@@ -1,30 +1,39 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2016-11-
|
3
|
+
# on 2016-11-26 09:12:44 +0100 using RuboCop version 0.45.0.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
-
# Offense count:
|
9
|
+
# Offense count: 4
|
10
10
|
Metrics/AbcSize:
|
11
|
-
Max:
|
11
|
+
Max: 31
|
12
12
|
|
13
13
|
# Offense count: 1
|
14
14
|
# Configuration parameters: CountComments.
|
15
15
|
Metrics/BlockLength:
|
16
16
|
Max: 32
|
17
17
|
|
18
|
+
# Offense count: 1
|
19
|
+
Metrics/CyclomaticComplexity:
|
20
|
+
Max: 7
|
21
|
+
|
18
22
|
# Offense count: 3
|
19
23
|
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives.
|
20
24
|
# URISchemes: http, https
|
21
25
|
Metrics/LineLength:
|
22
26
|
Max: 95
|
23
27
|
|
24
|
-
# Offense count:
|
28
|
+
# Offense count: 5
|
25
29
|
# Configuration parameters: CountComments.
|
26
30
|
Metrics/MethodLength:
|
27
|
-
Max:
|
31
|
+
Max: 25
|
32
|
+
|
33
|
+
# Offense count: 1
|
34
|
+
# Configuration parameters: CountComments.
|
35
|
+
Metrics/ModuleLength:
|
36
|
+
Max: 107
|
28
37
|
|
29
38
|
# Offense count: 1
|
30
39
|
# Cop supports --auto-correct.
|
@@ -33,14 +42,14 @@ Style/ExtraSpacing:
|
|
33
42
|
Exclude:
|
34
43
|
- 'env-checker.gemspec'
|
35
44
|
|
36
|
-
# Offense count:
|
45
|
+
# Offense count: 17
|
37
46
|
# Cop supports --auto-correct.
|
38
47
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
39
48
|
# SupportedStyles: when_needed, always
|
40
49
|
Style/FrozenStringLiteralComment:
|
41
50
|
Enabled: false
|
42
51
|
|
43
|
-
# Offense count:
|
52
|
+
# Offense count: 15
|
44
53
|
# Cop supports --auto-correct.
|
45
54
|
# Configuration parameters: EnforcedStyle, SupportedStyles, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
|
46
55
|
# SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -135,7 +135,7 @@ $ env-checker check --config_file sample_config.yml
|
|
135
135
|
|
136
136
|
## Contributing
|
137
137
|
|
138
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/ryanfox1985/env-checker. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
138
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/ryanfox1985/env-checker/issues and https://github.com/ryanfox1985/env-checker/pulls. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
139
139
|
|
140
140
|
|
141
141
|
## License
|
data/lib/env_checker.rb
CHANGED
@@ -5,6 +5,7 @@ require 'env_checker/version'
|
|
5
5
|
require 'env_checker/missing_keys_error'
|
6
6
|
require 'env_checker/configuration'
|
7
7
|
require 'env_checker/cli'
|
8
|
+
require 'env_checker/notifier'
|
8
9
|
|
9
10
|
module EnvChecker
|
10
11
|
class << self
|
@@ -14,13 +15,12 @@ module EnvChecker
|
|
14
15
|
self.configurations ||= {}
|
15
16
|
configurations['global'] = Configuration.new
|
16
17
|
yield(configurations['global'])
|
17
|
-
after_configure_and_check(configurations
|
18
|
+
after_configure_and_check(configurations)
|
18
19
|
end
|
19
20
|
|
20
21
|
def cli_configure_and_check(options)
|
21
|
-
|
22
|
+
run_configure_and_check(options) && options[:run] &&
|
22
23
|
exit(system(options[:run]))
|
23
|
-
end
|
24
24
|
|
25
25
|
exit(true)
|
26
26
|
end
|
@@ -35,7 +35,9 @@ module EnvChecker
|
|
35
35
|
self.configurations = create_config_from_parameters(options)
|
36
36
|
|
37
37
|
begin
|
38
|
-
|
38
|
+
unless after_configure_and_check(configurations)
|
39
|
+
exit(options[:run] ? system(options[:run]) : 1)
|
40
|
+
end
|
39
41
|
rescue EnvChecker::MissingKeysError
|
40
42
|
exit 2
|
41
43
|
rescue EnvChecker::ConfigurationError
|
@@ -45,19 +47,26 @@ module EnvChecker
|
|
45
47
|
true
|
46
48
|
end
|
47
49
|
|
48
|
-
def after_configure_and_check(
|
49
|
-
|
50
|
+
def after_configure_and_check(configurations)
|
51
|
+
environments_to_check = %w(global)
|
50
52
|
|
51
|
-
|
52
|
-
|
53
|
+
current_env = configurations['global'].environment
|
54
|
+
if current_env && configurations.key?(current_env)
|
55
|
+
environments_to_check << current_env
|
56
|
+
end
|
53
57
|
|
54
|
-
|
58
|
+
environments_to_check.map do |env|
|
59
|
+
configurations[env].after_initialize
|
60
|
+
|
61
|
+
check_optional_variables(env, configurations) &
|
62
|
+
check_required_variables(env, configurations)
|
63
|
+
end.reduce(:&)
|
55
64
|
end
|
56
65
|
|
57
66
|
def create_config_from_parameters(options)
|
58
|
-
|
59
|
-
|
60
|
-
|
67
|
+
configurations = { 'global' => Configuration.new }
|
68
|
+
attributes = %w(environments
|
69
|
+
environment
|
61
70
|
optional_variables
|
62
71
|
required_variables
|
63
72
|
slack_webhook_url)
|
@@ -65,48 +74,66 @@ module EnvChecker
|
|
65
74
|
if options[:config_file]
|
66
75
|
from_file = YAML.load_file(options[:config_file])
|
67
76
|
|
68
|
-
attributes
|
69
|
-
|
77
|
+
configurations = config_from_file('global', attributes, from_file)
|
78
|
+
if configurations['global'].environments.any?
|
79
|
+
configurations['global'].environments.each do |env|
|
80
|
+
configurations
|
81
|
+
.merge!(config_from_file(env, attributes, from_file[env]))
|
82
|
+
end
|
70
83
|
end
|
84
|
+
end
|
71
85
|
|
72
|
-
|
86
|
+
attributes.each do |a|
|
87
|
+
options[a.to_sym] &&
|
88
|
+
configurations['global'].public_send("#{a}=", options[a.to_sym])
|
73
89
|
end
|
74
90
|
|
91
|
+
configurations
|
92
|
+
end
|
93
|
+
|
94
|
+
def config_from_file(name, attributes, from_file)
|
95
|
+
return { name => Configuration.new } unless from_file
|
96
|
+
|
97
|
+
config = Configuration.new
|
75
98
|
attributes.each do |a|
|
76
|
-
config.public_send("#{a}=",
|
99
|
+
config.public_send("#{a}=", from_file[a]) if from_file[a]
|
77
100
|
end
|
78
101
|
|
79
|
-
{
|
102
|
+
{ name => config }
|
80
103
|
end
|
81
104
|
|
82
|
-
def check_optional_variables(
|
105
|
+
def check_optional_variables(env, configurations)
|
83
106
|
return true if
|
84
|
-
!
|
85
|
-
|
107
|
+
!configurations[env].optional_variables ||
|
108
|
+
configurations[env].optional_variables.empty?
|
86
109
|
|
87
|
-
missing_keys = missing_keys_env(
|
110
|
+
missing_keys = missing_keys_env(configurations[env].optional_variables)
|
88
111
|
return true if missing_keys.empty?
|
89
112
|
|
90
|
-
log_message(
|
91
|
-
|
92
|
-
|
93
|
-
|
113
|
+
Notifier.log_message(
|
114
|
+
configurations[env],
|
115
|
+
:warning,
|
116
|
+
env,
|
117
|
+
"Warning! Missing optional variables: #{missing_keys}"
|
118
|
+
)
|
94
119
|
|
95
120
|
false
|
96
121
|
end
|
97
122
|
|
98
|
-
def check_required_variables(
|
123
|
+
def check_required_variables(env, configurations)
|
99
124
|
return true if
|
100
|
-
!
|
101
|
-
|
125
|
+
!configurations[env].required_variables ||
|
126
|
+
configurations[env].required_variables.empty?
|
102
127
|
|
103
|
-
missing_keys = missing_keys_env(
|
128
|
+
missing_keys = missing_keys_env(configurations[env].required_variables)
|
104
129
|
|
105
130
|
if missing_keys.any?
|
106
|
-
log_message(
|
107
|
-
|
108
|
-
|
109
|
-
|
131
|
+
Notifier.log_message(
|
132
|
+
configurations[env],
|
133
|
+
:error,
|
134
|
+
env,
|
135
|
+
"Error! Missing required variables: #{missing_keys}"
|
136
|
+
)
|
110
137
|
|
111
138
|
raise MissingKeysError.new(missing_keys)
|
112
139
|
end
|
@@ -114,26 +141,6 @@ module EnvChecker
|
|
114
141
|
true
|
115
142
|
end
|
116
143
|
|
117
|
-
def log_message(configuration, type, environment, error_message)
|
118
|
-
return unless error_message
|
119
|
-
|
120
|
-
message = format_error_message(environment, error_message)
|
121
|
-
|
122
|
-
configuration.notify_slack(message)
|
123
|
-
# TODO: add other integrations like email...
|
124
|
-
configuration.notify_logger(type, message)
|
125
|
-
end
|
126
|
-
|
127
|
-
def format_error_message(environment, error_message)
|
128
|
-
return [] unless error_message
|
129
|
-
|
130
|
-
messages = []
|
131
|
-
messages << '[EnvChecker]'
|
132
|
-
messages << "[#{environment}]" if environment
|
133
|
-
messages << error_message
|
134
|
-
messages.join(' ')
|
135
|
-
end
|
136
|
-
|
137
144
|
def missing_keys_env(keys)
|
138
145
|
keys.flatten - ::ENV.keys
|
139
146
|
end
|
data/lib/env_checker/cli.rb
CHANGED
@@ -5,6 +5,7 @@ module EnvChecker
|
|
5
5
|
desc 'version', 'EnvChecker version.'
|
6
6
|
def version
|
7
7
|
puts "EnvChecker #{EnvChecker::VERSION}"
|
8
|
+
EnvChecker::VERSION
|
8
9
|
end
|
9
10
|
|
10
11
|
option :environment, :aliases => :e, :type => :string
|
@@ -12,11 +13,11 @@ module EnvChecker
|
|
12
13
|
option :required_variables, :aliases => [:r, :required], :type => :array
|
13
14
|
option :optional_variables, :aliases => [:o, :optional], :type => :array
|
14
15
|
option :slack_webhook_url, :aliases => :slack, :type => :string
|
16
|
+
option :verbose, :aliases => :v, :type => :boolean, :default => false
|
15
17
|
option :run, :type => :string
|
16
18
|
desc 'check', 'Check optional and required environment variables.'
|
17
19
|
def check
|
18
|
-
output =
|
19
|
-
output << 'Variables: '
|
20
|
+
output = %w(Variables:)
|
20
21
|
|
21
22
|
variables = %w(config_file
|
22
23
|
slack_webhook_url
|
@@ -30,7 +31,10 @@ module EnvChecker
|
|
30
31
|
env_var_name = "env_checker_#{v}".upcase
|
31
32
|
if ENV[env_var_name]
|
32
33
|
my_options[v.to_sym] ||= if env_var_name.include?('_VARIABLES')
|
33
|
-
ENV[env_var_name]
|
34
|
+
ENV[env_var_name]
|
35
|
+
.split(' ')
|
36
|
+
.map { |elem| elem.split(',') }
|
37
|
+
.flatten
|
34
38
|
else
|
35
39
|
ENV[env_var_name]
|
36
40
|
end
|
@@ -38,7 +42,8 @@ module EnvChecker
|
|
38
42
|
my_options[v.to_sym] = options[v.to_sym] if options[v.to_sym]
|
39
43
|
output << "- #{v}: #{my_options[v.to_sym]}" if my_options[v.to_sym]
|
40
44
|
end
|
41
|
-
|
45
|
+
|
46
|
+
puts output.join("\n") if options[:verbose]
|
42
47
|
|
43
48
|
EnvChecker.cli_configure_and_check(my_options)
|
44
49
|
end
|
@@ -7,11 +7,13 @@ module EnvChecker
|
|
7
7
|
|
8
8
|
class Configuration
|
9
9
|
attr_accessor :required_variables, :optional_variables, :logger,
|
10
|
-
:environment, :slack_webhook_url, :slack_notifier
|
10
|
+
:environment, :slack_webhook_url, :slack_notifier,
|
11
|
+
:environments
|
11
12
|
|
12
13
|
# Has default settings, which can be overridden in the initializer.
|
13
14
|
def initialize
|
14
15
|
@environment = ENV['RACK_ENV'] || ENV['RAILS_ENV']
|
16
|
+
@environments = []
|
15
17
|
@required_variables = []
|
16
18
|
@optional_variables = []
|
17
19
|
@slack_webhook_url = nil
|
@@ -35,24 +37,6 @@ module EnvChecker
|
|
35
37
|
true
|
36
38
|
end
|
37
39
|
|
38
|
-
def notify_slack(message)
|
39
|
-
slack_notifier && slack_notifier.ping(message)
|
40
|
-
rescue StandardError => e
|
41
|
-
notify_logger(:error, e)
|
42
|
-
end
|
43
|
-
|
44
|
-
def notify_logger(type, message)
|
45
|
-
logger &&
|
46
|
-
case type
|
47
|
-
when :warning
|
48
|
-
logger.warn(message)
|
49
|
-
when :error
|
50
|
-
logger.error(message)
|
51
|
-
else
|
52
|
-
logger.info(message)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
40
|
private
|
57
41
|
|
58
42
|
def valid?
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module EnvChecker
|
2
|
+
class Notifier
|
3
|
+
class << self
|
4
|
+
def log_message(configuration, type, environment, error_message)
|
5
|
+
return unless error_message
|
6
|
+
|
7
|
+
message = format_error_message(environment, error_message)
|
8
|
+
notify(configuration, type, message)
|
9
|
+
end
|
10
|
+
|
11
|
+
def format_error_message(environment, error_message)
|
12
|
+
return [] unless error_message
|
13
|
+
|
14
|
+
messages = %w([EnvChecker])
|
15
|
+
messages << "[#{environment}]" if environment
|
16
|
+
messages << error_message
|
17
|
+
messages.join(' ')
|
18
|
+
end
|
19
|
+
|
20
|
+
def notify(configuration, type, message)
|
21
|
+
notify_slack(configuration, message)
|
22
|
+
notify_rollbar(configuration, message)
|
23
|
+
notify_email(configuration, message)
|
24
|
+
notify_logger(configuration, type, message)
|
25
|
+
end
|
26
|
+
|
27
|
+
def notify_rollbar(configuration, message)
|
28
|
+
# TODO: implement rollbar
|
29
|
+
end
|
30
|
+
|
31
|
+
def notify_email(configuration, message)
|
32
|
+
# TODO: implement email
|
33
|
+
end
|
34
|
+
|
35
|
+
def notify_slack(configuration, message)
|
36
|
+
configuration.slack_notifier &&
|
37
|
+
configuration.slack_notifier.ping(message)
|
38
|
+
rescue StandardError => e
|
39
|
+
notify_logger(:error, e)
|
40
|
+
end
|
41
|
+
|
42
|
+
def notify_logger(configuration, type, message)
|
43
|
+
configuration.logger &&
|
44
|
+
case type
|
45
|
+
when :warning
|
46
|
+
configuration.logger.warn(message)
|
47
|
+
when :error
|
48
|
+
configuration.logger.error(message)
|
49
|
+
else
|
50
|
+
configuration.logger.info(message)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/env_checker/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: env-checker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guillermo Guerrero Ibarra
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -167,9 +167,9 @@ files:
|
|
167
167
|
- lib/env_checker/cli.rb
|
168
168
|
- lib/env_checker/configuration.rb
|
169
169
|
- lib/env_checker/missing_keys_error.rb
|
170
|
+
- lib/env_checker/notifier.rb
|
170
171
|
- lib/env_checker/version.rb
|
171
172
|
- sample_config.yml
|
172
|
-
- test_config.yml
|
173
173
|
homepage: https://github.com/ryanfox1985/env-checker
|
174
174
|
licenses:
|
175
175
|
- MIT
|