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.
@@ -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
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start(__FILE__)
9
+ require 'pry'
10
+ Pry.start
data/bin/envied CHANGED
@@ -1,4 +1,5 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/env ruby -Ilib
2
+
2
3
  require 'envied'
3
4
 
4
- ENVied::Cli.start
5
+ ENVied::Cli.start
@@ -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")
@@ -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", "Javier Julio"]
10
- spec.email = ["gert@thinkcreate.nl", "jjfutbol@gmail.com"]
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.files = `git ls-files -z`.split("\x0")
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
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.15"
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
@@ -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
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'envied'
3
+
4
+ ENVied::Cli.start
@@ -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
@@ -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
@@ -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
 
@@ -39,6 +39,10 @@ class ENVied::Coercer::ENViedString
39
39
  end
40
40
  end
41
41
 
42
+ def to_env(string)
43
+ to_string(string)
44
+ end
45
+
42
46
  def to_symbol(str)
43
47
  str.to_sym
44
48
  end
@@ -1,13 +1,25 @@
1
1
  class ENVied
2
2
  class Configuration
3
- attr_reader :current_group, :defaults_enabled, :coercer
3
+ attr_reader :current_group, :coercer
4
4
 
5
5
  def initialize(**options, &block)
6
6
  @coercer = options.fetch(:coercer, Coercer.new)
7
- @defaults_enabled = options.fetch(:enable_defaults, defaults_enabled_default)
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
@@ -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 default_value_of(var)
51
- var.default_value(ENVied, var)
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 env_value_of(var)
55
- ENV[var.name.to_s]
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
- # A sample Envfile
2
- # enable_defaults! { ENV['RACK_ENV'] != 'production' }
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, default: 'redis://localhost:6379'
6
+ # variable :REDIS_URL, :string
5
7
  #
6
8
  # group :production do
7
9
  # variable :SECRET_KEY_BASE
@@ -1,23 +1,14 @@
1
1
  class ENVied::Variable
2
- attr_reader :name, :type, :group, :default
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, default] == [other.name, other.type, other.group, other.default]
12
+ [name, type, group] == [other.name, other.type, other.group]
22
13
  end
23
14
  end
@@ -1,3 +1,3 @@
1
1
  class ENVied
2
- VERSION = '0.9.3'
2
+ VERSION = '0.10.0.alpha1'
3
3
  end
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.9.3
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: bin
9
+ bindir: exe
11
10
  cert_chain: []
12
- date: 2019-06-28 00:00:00.000000000 Z
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.15'
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.15'
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: '0'
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: []