envied 0.9.3 → 0.10.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []