envied 0.9.3 → 0.10.0.alpha1
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/.envrc.sample +9 -0
- data/.github/pull_request_template.md +2 -0
- data/.gitignore +1 -0
- data/.gitlab-ci.yml +4 -3
- data/.rspec +1 -0
- data/CHANGELOG.md +13 -1
- data/LICENSE.txt +1 -1
- data/README.md +154 -54
- data/bin/bundle +105 -0
- data/bin/console +2 -6
- data/bin/envied +3 -2
- data/bin/rspec +29 -0
- data/envied.gemspec +15 -5
- data/examples/extensive_envfile +0 -2
- data/exe/envied +4 -0
- data/lib/envied.rb +17 -0
- data/lib/envied/cli.rb +9 -0
- data/lib/envied/coercer.rb +1 -1
- data/lib/envied/coercer/envied_string.rb +4 -0
- data/lib/envied/configuration.rb +14 -32
- data/lib/envied/env_interceptor.rb +19 -0
- data/lib/envied/env_proxy.rb +8 -5
- data/lib/envied/templates/Envfile.tt +5 -3
- data/lib/envied/variable.rb +2 -11
- data/lib/envied/version.rb +1 -1
- metadata +32 -27
- data/spec/coercer_spec.rb +0 -274
- data/spec/configuration_spec.rb +0 -113
- data/spec/env_var_extractor_spec.rb +0 -22
- data/spec/envied_spec.rb +0 -339
- data/spec/gemspec_spec.rb +0 -17
- data/spec/spec_helper.rb +0 -74
- data/spec/variable_spec.rb +0 -25
data/bin/console
CHANGED
@@ -6,9 +6,5 @@ require "envied"
|
|
6
6
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
# Pry.start
|
12
|
-
|
13
|
-
require "irb"
|
14
|
-
IRB.start(__FILE__)
|
9
|
+
require 'pry'
|
10
|
+
Pry.start
|
data/bin/envied
CHANGED
data/bin/rspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'rspec' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "pathname"
|
12
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
+
Pathname.new(__FILE__).realpath)
|
14
|
+
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
+
|
17
|
+
if File.file?(bundle_binstub)
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
+
load(bundle_binstub)
|
20
|
+
else
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
require "rubygems"
|
27
|
+
require "bundler/setup"
|
28
|
+
|
29
|
+
load Gem.bin_path("rspec-core", "rspec")
|
data/envied.gemspec
CHANGED
@@ -6,23 +6,33 @@ require "envied/version"
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "envied"
|
8
8
|
spec.version = ENVied::VERSION
|
9
|
-
spec.authors = ["Gert Goet"
|
10
|
-
spec.email = ["gert@thinkcreate.nl"
|
9
|
+
spec.authors = ["Gert Goet"]
|
10
|
+
spec.email = ["gert@thinkcreate.nl"]
|
11
11
|
spec.summary = %q{Ensure presence and type of ENV-variables}
|
12
12
|
spec.description = %q{Ensure presence and type of your app's ENV-variables.}
|
13
13
|
spec.homepage = "https://gitlab.com/envied/envied/tree/master#envied"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
|
-
spec.
|
17
|
-
spec.
|
16
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
17
|
+
spec.metadata["source_code_uri"] = "https://gitlab.com/envied/envied.git"
|
18
|
+
spec.metadata["changelog_uri"] = "https://gitlab.com/envied/envied/blob/master/CHANGELOG.md"
|
19
|
+
|
20
|
+
# Specify which files should be added to the gem when it is released.
|
21
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
22
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
23
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
24
|
+
end
|
25
|
+
spec.bindir = 'exe'
|
26
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
27
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
28
|
spec.require_paths = ["lib"]
|
20
29
|
|
21
30
|
spec.required_ruby_version = ">= 2.4"
|
22
31
|
|
23
|
-
spec.add_dependency "thor", "~> 0.
|
32
|
+
spec.add_dependency "thor", "~> 0.20"
|
24
33
|
|
25
34
|
spec.add_development_dependency "bundler", "~> 2.0"
|
35
|
+
spec.add_development_dependency "pry", "~> 0.12"
|
26
36
|
spec.add_development_dependency "rake", "~> 12.0"
|
27
37
|
spec.add_development_dependency "rspec", "~> 3.0"
|
28
38
|
end
|
data/examples/extensive_envfile
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
# -*- mode: ruby -*-¬
|
2
|
-
# NOTE: defaults are deprecated and will be removed in > v0.9
|
3
|
-
|
4
2
|
# We allow defaults for local development (and local tests), but want our CI
|
5
3
|
# to mimic our production as much as possible.
|
6
4
|
# New developers that don't have RACK_ENV set, will in this way not be presented with a huge
|
data/exe/envied
ADDED
data/lib/envied.rb
CHANGED
@@ -5,6 +5,7 @@ require 'envied/coercer'
|
|
5
5
|
require 'envied/coercer/envied_string'
|
6
6
|
require 'envied/variable'
|
7
7
|
require 'envied/configuration'
|
8
|
+
require 'envied/env_interceptor'
|
8
9
|
|
9
10
|
class ENVied
|
10
11
|
class << self
|
@@ -18,6 +19,7 @@ class ENVied
|
|
18
19
|
error_on_missing_variables!(options)
|
19
20
|
error_on_uncoercible_variables!(options)
|
20
21
|
|
22
|
+
intercept_env_vars!
|
21
23
|
ensure_spring_after_fork_require(args, options)
|
22
24
|
end
|
23
25
|
|
@@ -52,6 +54,20 @@ class ENVied
|
|
52
54
|
result.any? ? result.map(&:to_sym) : [:default]
|
53
55
|
end
|
54
56
|
|
57
|
+
def self.env_keys_to_intercept
|
58
|
+
config.variables.select {|var| var.type == :env }.map{|var| var.name.to_s }
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.intercept_env_vars!
|
62
|
+
if (keys = env_keys_to_intercept).any?
|
63
|
+
ENV.instance_eval { @__envied_env_keys = keys }
|
64
|
+
class << ENV
|
65
|
+
prepend(ENVied::EnvInterceptor)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
private_class_method :intercept_env_vars!, :env_keys_to_intercept
|
70
|
+
|
55
71
|
def self.ensure_spring_after_fork_require(args, **options)
|
56
72
|
if spring_enabled? && !options[:via_spring]
|
57
73
|
Spring.after_fork { ENVied.require(args, options.merge(via_spring: true)) }
|
@@ -83,4 +99,5 @@ class ENVied
|
|
83
99
|
def self.respond_to_missing?(method, include_private = false)
|
84
100
|
(env && env.has_key?(method)) || super
|
85
101
|
end
|
102
|
+
|
86
103
|
end
|
data/lib/envied/cli.rb
CHANGED
@@ -70,6 +70,9 @@ class ENVied
|
|
70
70
|
option :groups, type: :array, desc: "uses ENV['ENVIED_GROUPS'] as default if present", default: ENV['ENVIED_GROUPS'] || %w(default), banner: 'default production'
|
71
71
|
option :quiet, type: :boolean, desc: 'Communicate success of the check only via the exit status.'
|
72
72
|
def check
|
73
|
+
if rails_project?
|
74
|
+
require File.expand_path 'config/environment.rb'
|
75
|
+
end
|
73
76
|
ENVied.require(*options[:groups])
|
74
77
|
unless options[:quiet]
|
75
78
|
puts "All variables for group(s) #{options[:groups]} are present and valid"
|
@@ -126,5 +129,11 @@ class ENVied
|
|
126
129
|
template("heroku-env-check.tt", full_dest)
|
127
130
|
FileUtils.chmod 0755, full_dest
|
128
131
|
end
|
132
|
+
|
133
|
+
no_tasks do
|
134
|
+
def rails_project?
|
135
|
+
File.exists?('config/environment.rb')
|
136
|
+
end
|
137
|
+
end
|
129
138
|
end
|
130
139
|
end
|
data/lib/envied/coercer.rb
CHANGED
@@ -22,7 +22,7 @@ class ENVied::Coercer
|
|
22
22
|
|
23
23
|
def self.supported_types
|
24
24
|
@supported_types ||= begin
|
25
|
-
[:hash, :array, :time, :date, :symbol, :boolean, :integer, :string, :uri, :float].sort
|
25
|
+
[:env, :hash, :array, :time, :date, :symbol, :boolean, :integer, :string, :uri, :float].sort
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
data/lib/envied/configuration.rb
CHANGED
@@ -1,13 +1,25 @@
|
|
1
1
|
class ENVied
|
2
2
|
class Configuration
|
3
|
-
attr_reader :current_group, :
|
3
|
+
attr_reader :current_group, :coercer
|
4
4
|
|
5
5
|
def initialize(**options, &block)
|
6
6
|
@coercer = options.fetch(:coercer, Coercer.new)
|
7
|
-
@
|
7
|
+
@key_alias = options[:key_alias]
|
8
8
|
instance_eval(&block) if block_given?
|
9
9
|
end
|
10
10
|
|
11
|
+
def key_alias!(value = false, &block)
|
12
|
+
@key_alias = block_given? ? block.call : value
|
13
|
+
end
|
14
|
+
|
15
|
+
def key_alias
|
16
|
+
@key_alias && @key_alias.to_s.upcase
|
17
|
+
end
|
18
|
+
|
19
|
+
def enable_defaults!(*args)
|
20
|
+
raise "Defaults are no longer supported. See https://gitlab.com/envied/envied/tree/master#what-happened-to-default-values for the recommended upgrade-path, or pin the gem to 0.9-release (e.g. `gem 'envied', '~> 0.9.2'`) to keep using defaults."
|
21
|
+
end
|
22
|
+
|
11
23
|
def self.load(**options)
|
12
24
|
envfile = File.expand_path('Envfile')
|
13
25
|
new(options).tap do |v|
|
@@ -15,17 +27,6 @@ class ENVied
|
|
15
27
|
end
|
16
28
|
end
|
17
29
|
|
18
|
-
def enable_defaults!(value = true, &block)
|
19
|
-
default_values_deprecation
|
20
|
-
@defaults_enabled = block_given? ? block.call : value
|
21
|
-
end
|
22
|
-
|
23
|
-
def defaults_enabled?
|
24
|
-
@defaults_enabled.respond_to?(:call) ?
|
25
|
-
@defaults_enabled.call :
|
26
|
-
@defaults_enabled
|
27
|
-
end
|
28
|
-
|
29
30
|
def variable(name, type = :string, **options)
|
30
31
|
unless coercer.supported_type?(type)
|
31
32
|
raise ArgumentError, "#{type.inspect} is not a supported type. Should be one of #{coercer.supported_types}"
|
@@ -46,24 +47,5 @@ class ENVied
|
|
46
47
|
def variables
|
47
48
|
@variables ||= []
|
48
49
|
end
|
49
|
-
|
50
|
-
private
|
51
|
-
|
52
|
-
def default_values_deprecation
|
53
|
-
warning = "Default values will be removed in the next minor-release of ENVied (i.e. > v0.9). For more info see https://gitlab.com/envied/envied/tree/0-9-releases#defaults."
|
54
|
-
if defined?(ActiveSupport::Deprecation)
|
55
|
-
ActiveSupport::Deprecation.warn warning
|
56
|
-
else
|
57
|
-
$stderr.puts "DEPRECATION WARNING: #{warning}"
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def defaults_enabled_default
|
62
|
-
if ENV['ENVIED_ENABLE_DEFAULTS'].nil?
|
63
|
-
false
|
64
|
-
else
|
65
|
-
@coercer.coerce(ENV['ENVIED_ENABLE_DEFAULTS'], :boolean)
|
66
|
-
end
|
67
|
-
end
|
68
50
|
end
|
69
51
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class ENVied
|
2
|
+
module EnvInterceptor
|
3
|
+
def [](key)
|
4
|
+
if @__envied_env_keys.include?(key)
|
5
|
+
ENVied.public_send(key)
|
6
|
+
else
|
7
|
+
super
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def fetch(key, *args)
|
12
|
+
if @__envied_env_keys.include?(key)
|
13
|
+
ENVied.public_send(key)
|
14
|
+
else
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/envied/env_proxy.rb
CHANGED
@@ -28,7 +28,6 @@ class ENVied
|
|
28
28
|
|
29
29
|
def value_to_coerce(var)
|
30
30
|
return env_value_of(var) unless env_value_of(var).nil?
|
31
|
-
config.defaults_enabled? ? default_value_of(var) : nil
|
32
31
|
end
|
33
32
|
|
34
33
|
private
|
@@ -47,12 +46,16 @@ class ENVied
|
|
47
46
|
coercer.coercible?(value_to_coerce(var), var.type)
|
48
47
|
end
|
49
48
|
|
50
|
-
def
|
51
|
-
|
49
|
+
def env_value_of(var)
|
50
|
+
ENV.values_at(*env_keys(var, key_alias: config.key_alias)).compact.first
|
52
51
|
end
|
53
52
|
|
54
|
-
def
|
55
|
-
|
53
|
+
def env_keys(var, key_alias: nil)
|
54
|
+
base_key = var.name.to_s
|
55
|
+
|
56
|
+
result = [base_key]
|
57
|
+
result.unshift "#{base_key}_#{key_alias}" if key_alias
|
58
|
+
result
|
56
59
|
end
|
57
60
|
|
58
61
|
def missing?(var)
|
@@ -1,7 +1,9 @@
|
|
1
|
-
#
|
2
|
-
#
|
1
|
+
#
|
2
|
+
# Allow ENV['FOO_<key_alias>'] to provide for ENVied.FOO (with ENV['FOO']
|
3
|
+
# as fallback).
|
4
|
+
# key_alias! { Rails.env }
|
3
5
|
|
4
|
-
# variable :REDIS_URL, :string
|
6
|
+
# variable :REDIS_URL, :string
|
5
7
|
#
|
6
8
|
# group :production do
|
7
9
|
# variable :SECRET_KEY_BASE
|
data/lib/envied/variable.rb
CHANGED
@@ -1,23 +1,14 @@
|
|
1
1
|
class ENVied::Variable
|
2
|
-
attr_reader :name, :type, :group
|
2
|
+
attr_reader :name, :type, :group
|
3
3
|
|
4
4
|
def initialize(name, type, **options)
|
5
5
|
@name = name.to_sym
|
6
6
|
@type = type.to_sym
|
7
7
|
@group = options.fetch(:group, :default).to_sym
|
8
|
-
@default = options[:default]
|
9
|
-
|
10
|
-
#if !@default.is_a? String
|
11
|
-
# raise ArgumentError, "Default values should be strings (variable #{@name})"
|
12
|
-
#end
|
13
|
-
end
|
14
|
-
|
15
|
-
def default_value(*args)
|
16
|
-
default.respond_to?(:call) ? default[*args] : default
|
17
8
|
end
|
18
9
|
|
19
10
|
def ==(other)
|
20
11
|
self.class == other.class &&
|
21
|
-
[name, type, group
|
12
|
+
[name, type, group] == [other.name, other.type, other.group]
|
22
13
|
end
|
23
14
|
end
|
data/lib/envied/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: envied
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0.alpha1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gert Goet
|
8
|
-
- Javier Julio
|
9
8
|
autorequire:
|
10
|
-
bindir:
|
9
|
+
bindir: exe
|
11
10
|
cert_chain: []
|
12
|
-
date: 2019-
|
11
|
+
date: 2019-07-16 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: thor
|
@@ -17,14 +16,14 @@ dependencies:
|
|
17
16
|
requirements:
|
18
17
|
- - "~>"
|
19
18
|
- !ruby/object:Gem::Version
|
20
|
-
version: '0.
|
19
|
+
version: '0.20'
|
21
20
|
type: :runtime
|
22
21
|
prerelease: false
|
23
22
|
version_requirements: !ruby/object:Gem::Requirement
|
24
23
|
requirements:
|
25
24
|
- - "~>"
|
26
25
|
- !ruby/object:Gem::Version
|
27
|
-
version: '0.
|
26
|
+
version: '0.20'
|
28
27
|
- !ruby/object:Gem::Dependency
|
29
28
|
name: bundler
|
30
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,6 +38,20 @@ dependencies:
|
|
39
38
|
- - "~>"
|
40
39
|
- !ruby/object:Gem::Version
|
41
40
|
version: '2.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.12'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.12'
|
42
55
|
- !ruby/object:Gem::Dependency
|
43
56
|
name: rake
|
44
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,14 +83,13 @@ dependencies:
|
|
70
83
|
description: Ensure presence and type of your app's ENV-variables.
|
71
84
|
email:
|
72
85
|
- gert@thinkcreate.nl
|
73
|
-
- jjfutbol@gmail.com
|
74
86
|
executables:
|
75
|
-
- console
|
76
87
|
- envied
|
77
|
-
- setup
|
78
88
|
extensions: []
|
79
89
|
extra_rdoc_files: []
|
80
90
|
files:
|
91
|
+
- ".envrc.sample"
|
92
|
+
- ".github/pull_request_template.md"
|
81
93
|
- ".gitignore"
|
82
94
|
- ".gitlab-ci.yml"
|
83
95
|
- ".rspec"
|
@@ -86,33 +98,33 @@ files:
|
|
86
98
|
- LICENSE.txt
|
87
99
|
- README.md
|
88
100
|
- Rakefile
|
101
|
+
- bin/bundle
|
89
102
|
- bin/console
|
90
103
|
- bin/envied
|
104
|
+
- bin/rspec
|
91
105
|
- bin/setup
|
92
106
|
- envied.gemspec
|
93
107
|
- examples/extensive_envfile
|
108
|
+
- exe/envied
|
94
109
|
- lib/envied.rb
|
95
110
|
- lib/envied/cli.rb
|
96
111
|
- lib/envied/coercer.rb
|
97
112
|
- lib/envied/coercer/envied_string.rb
|
98
113
|
- lib/envied/configuration.rb
|
114
|
+
- lib/envied/env_interceptor.rb
|
99
115
|
- lib/envied/env_proxy.rb
|
100
116
|
- lib/envied/env_var_extractor.rb
|
101
117
|
- lib/envied/templates/Envfile.tt
|
102
118
|
- lib/envied/templates/heroku-env-check.tt
|
103
119
|
- lib/envied/variable.rb
|
104
120
|
- lib/envied/version.rb
|
105
|
-
- spec/coercer_spec.rb
|
106
|
-
- spec/configuration_spec.rb
|
107
|
-
- spec/env_var_extractor_spec.rb
|
108
|
-
- spec/envied_spec.rb
|
109
|
-
- spec/gemspec_spec.rb
|
110
|
-
- spec/spec_helper.rb
|
111
|
-
- spec/variable_spec.rb
|
112
121
|
homepage: https://gitlab.com/envied/envied/tree/master#envied
|
113
122
|
licenses:
|
114
123
|
- MIT
|
115
|
-
metadata:
|
124
|
+
metadata:
|
125
|
+
homepage_uri: https://gitlab.com/envied/envied/tree/master#envied
|
126
|
+
source_code_uri: https://gitlab.com/envied/envied.git
|
127
|
+
changelog_uri: https://gitlab.com/envied/envied/blob/master/CHANGELOG.md
|
116
128
|
post_install_message:
|
117
129
|
rdoc_options: []
|
118
130
|
require_paths:
|
@@ -124,19 +136,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
124
136
|
version: '2.4'
|
125
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
138
|
requirements:
|
127
|
-
- - "
|
139
|
+
- - ">"
|
128
140
|
- !ruby/object:Gem::Version
|
129
|
-
version:
|
141
|
+
version: 1.3.1
|
130
142
|
requirements: []
|
131
143
|
rubygems_version: 3.0.3
|
132
144
|
signing_key:
|
133
145
|
specification_version: 4
|
134
146
|
summary: Ensure presence and type of ENV-variables
|
135
|
-
test_files:
|
136
|
-
- spec/coercer_spec.rb
|
137
|
-
- spec/configuration_spec.rb
|
138
|
-
- spec/env_var_extractor_spec.rb
|
139
|
-
- spec/envied_spec.rb
|
140
|
-
- spec/gemspec_spec.rb
|
141
|
-
- spec/spec_helper.rb
|
142
|
-
- spec/variable_spec.rb
|
147
|
+
test_files: []
|