dotenv_validator 1.1.0 → 1.3.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/dotenv_validator/errors.rb +6 -0
- data/lib/dotenv_validator/version.rb +1 -1
- data/lib/dotenv_validator.rb +57 -24
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '03040841959fe965027d57672d55726640199bb217b52a169c40b3bf465c7d69'
|
4
|
+
data.tar.gz: 80f1543f7719e2f3758bcf69b6294469c22033a56e96f03358d1627350e266b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aee0d70d03f541d3d30171f1eafc5481df165a702b60bb0426b21db52af3c561100213765b0df20f80aeaa8b866b1fb47019b0bf5600aa8d181c825a64df63cf
|
7
|
+
data.tar.gz: a0e9a2bedb35d6cd82b5ebb3872544b009d849fa6de34044e060aeadbea12f77cf53a98b6a8ee7e95ef865bf7ecd40ab9e6583e7db99e6065434278090b67f59
|
data/lib/dotenv_validator.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "fast_blank"
|
4
|
+
require "pathname"
|
5
|
+
require "dotenv_validator/errors"
|
3
6
|
|
4
7
|
# Knows how to check the environment variables and compares it to .env.sample
|
5
8
|
# and the comments in every line of your .env.sample file.
|
@@ -15,8 +18,8 @@ module DotenvValidator
|
|
15
18
|
invalid_format = []
|
16
19
|
|
17
20
|
open_sample_file.each do |line|
|
18
|
-
variable, config = line.split(
|
19
|
-
variable_name, _sample = variable.split(
|
21
|
+
variable, config = line.split(" #")
|
22
|
+
variable_name, _sample = variable.split("=")
|
20
23
|
value = ENV[variable_name]
|
21
24
|
|
22
25
|
if value.nil? || value.blank?
|
@@ -26,18 +29,22 @@ module DotenvValidator
|
|
26
29
|
|
27
30
|
next unless config =~ /format=(.*)/
|
28
31
|
|
32
|
+
format = Regexp.last_match(1)
|
33
|
+
|
29
34
|
valid =
|
30
|
-
case
|
31
|
-
when
|
32
|
-
when
|
33
|
-
when
|
34
|
-
when
|
35
|
-
when
|
35
|
+
case format
|
36
|
+
when "int", "integer", "Integer" then integer?(value)
|
37
|
+
when "float", "Float" then float?(value)
|
38
|
+
when "str", "string", "String" then true
|
39
|
+
when "email" then email?(value)
|
40
|
+
when "url" then url?(value)
|
41
|
+
when "bool", "boolean", "Boolean" then boolean?(value)
|
42
|
+
when "uuid", "UUID" then uuid?(value)
|
36
43
|
else
|
37
44
|
value.match?(Regexp.new(Regexp.last_match(1)))
|
38
45
|
end
|
39
46
|
|
40
|
-
invalid_format << variable_name unless valid
|
47
|
+
invalid_format << {name: variable_name, value: value, format: format} unless valid
|
41
48
|
end
|
42
49
|
|
43
50
|
[missing_variables, invalid_format]
|
@@ -51,12 +58,13 @@ module DotenvValidator
|
|
51
58
|
|
52
59
|
missing_variables, invalid_format = analyze_variables
|
53
60
|
if missing_variables.any?
|
54
|
-
puts("WARNING - Missing environment variables: #{missing_variables.join(
|
61
|
+
puts("WARNING - Missing environment variables: #{missing_variables.join(", ")}")
|
55
62
|
result = false
|
56
63
|
end
|
57
64
|
|
58
65
|
if invalid_format.any?
|
59
|
-
puts
|
66
|
+
puts "WARNING - Environment variables with invalid format:"
|
67
|
+
puts invalid_format_list(invalid_format)
|
60
68
|
result = false
|
61
69
|
end
|
62
70
|
|
@@ -69,53 +77,72 @@ module DotenvValidator
|
|
69
77
|
def self.check!
|
70
78
|
missing_variables, invalid_format = analyze_variables
|
71
79
|
|
72
|
-
raise("Missing environment variables: #{missing_variables.join(
|
80
|
+
raise("Missing environment variables: #{missing_variables.join(", ")}") if missing_variables.any?
|
73
81
|
|
74
|
-
raise("Environment variables with invalid format
|
82
|
+
raise("Environment variables with invalid format:\n#{invalid_format_list(invalid_format)}") if invalid_format.any?
|
75
83
|
end
|
76
84
|
|
77
|
-
# It checks the value
|
85
|
+
# It checks if the value is float or not.
|
78
86
|
#
|
79
87
|
# @param [String] A string
|
80
88
|
# @return [Boolean] True if it is a float value. False otherwise.
|
81
89
|
def self.float?(string)
|
82
90
|
true if Float(string)
|
83
|
-
rescue
|
91
|
+
rescue
|
84
92
|
false
|
85
93
|
end
|
86
94
|
|
87
|
-
# It checks the value
|
95
|
+
# It checks if the value is an integer or not.
|
88
96
|
#
|
89
97
|
# @param [String] A string
|
90
98
|
# @return [Boolean] True if it is an integer value. False otherwise.
|
91
99
|
def self.integer?(string)
|
92
100
|
true if Integer(string)
|
93
|
-
rescue
|
101
|
+
rescue
|
94
102
|
false
|
95
103
|
end
|
96
104
|
|
97
|
-
# It checks the value
|
105
|
+
# It checks if the value is an email or not.
|
98
106
|
#
|
99
107
|
# @param [String] A string
|
100
108
|
# @return [Boolean] True if it is an email value. False otherwise.
|
101
109
|
def self.email?(string)
|
102
|
-
string.match?(
|
110
|
+
string.match?(URI::MailTo::EMAIL_REGEXP)
|
103
111
|
end
|
104
112
|
|
105
|
-
# It checks the value
|
113
|
+
# It checks if the value is a URL or not.
|
106
114
|
#
|
107
115
|
# @param [String] A string
|
108
116
|
# @return [Boolean] True if it is an URL value. False otherwise.
|
109
117
|
def self.url?(string)
|
110
|
-
string.match?(%
|
118
|
+
string.match?(/\A#{URI::DEFAULT_PARSER.make_regexp(%w[http https])}\z/)
|
119
|
+
end
|
120
|
+
|
121
|
+
# It checks if the value is a boolean or not.
|
122
|
+
#
|
123
|
+
# @param [String] A string
|
124
|
+
# @return [Boolean] True if it is a boolean value. False otherwise.
|
125
|
+
def self.boolean?(string)
|
126
|
+
string.match?(/(true|false)/)
|
127
|
+
end
|
128
|
+
|
129
|
+
# It checks if the value is a uuid or not.
|
130
|
+
#
|
131
|
+
# @param [String] A string
|
132
|
+
# @return [Boolean] True if it is a UUID value. False otherwise.
|
133
|
+
def self.uuid?(string)
|
134
|
+
string.match?(/\A[\da-f]{32}\z/i) ||
|
135
|
+
string.match?(/\A[\da-f]{8}-([\da-f]{4}-){3}[\da-f]{12}\z/i)
|
111
136
|
end
|
112
137
|
|
113
138
|
def self.open_sample_file
|
114
139
|
File.open(sample_file)
|
140
|
+
rescue Errno::ENOENT
|
141
|
+
raise DotenvValidator::SampleFileNotFoundError, "#{sample_file} was not found!"
|
115
142
|
end
|
116
143
|
|
117
144
|
def self.sample_file
|
118
|
-
File.join(root,
|
145
|
+
File.join(root, ".env.sample")
|
119
146
|
end
|
120
147
|
|
121
148
|
# Internal: `Rails.root` is nil in Rails 4.1 before the application is
|
@@ -132,4 +159,10 @@ module DotenvValidator
|
|
132
159
|
root_or_pwd
|
133
160
|
end
|
134
161
|
end
|
162
|
+
|
163
|
+
def self.invalid_format_list(invalid_format)
|
164
|
+
invalid_format.map do |var|
|
165
|
+
%(- #{var[:name]}: expected "#{var[:value]}" to match "#{var[:format]}" format)
|
166
|
+
end.join("\n")
|
167
|
+
end
|
135
168
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dotenv_validator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ariel Juodziukynas
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2023-01-04 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: fast_blank
|
@@ -176,6 +176,7 @@ extensions: []
|
|
176
176
|
extra_rdoc_files: []
|
177
177
|
files:
|
178
178
|
- lib/dotenv_validator.rb
|
179
|
+
- lib/dotenv_validator/errors.rb
|
179
180
|
- lib/dotenv_validator/version.rb
|
180
181
|
homepage: https://github.com/fastruby/dotenv_validator
|
181
182
|
licenses:
|
@@ -196,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
196
197
|
- !ruby/object:Gem::Version
|
197
198
|
version: '0'
|
198
199
|
requirements: []
|
199
|
-
rubygems_version: 3.
|
200
|
+
rubygems_version: 3.3.7
|
200
201
|
signing_key:
|
201
202
|
specification_version: 4
|
202
203
|
summary: Checks required env variables and its format using .env.sample
|