envied 0.9.1 → 0.9.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 1eae6e996d1e0a70624b7c24167eccd631a5d9a0
4
- data.tar.gz: d9df438b52137f7a22592b468a44895f7cd5a99d
2
+ SHA256:
3
+ metadata.gz: dcc781ac6f01f4925045b61ca88d14b41dbccebe46dc34582a391c884bb99e4a
4
+ data.tar.gz: 542a7c711445013a845478f716cddf7ac82b7834365429ebf24ed36b08462ca2
5
5
  SHA512:
6
- metadata.gz: 6e770306eb9e9fb37130e5a3fb69be59d3c25443bbd1c36ab09303a9575ad884f0f4569755827f7e0f1362e05621d0c7ac6455d2eb438b620b2bd48e4f6ac3fb
7
- data.tar.gz: 6a49f0e90abb416a73e3199961df26b4cdef5e83fa8c0b60e9053f46f4ed18cec7608faddb9b82fdaa726a9329922981135eb05c6a85043ae4052ca34ddff7bb
6
+ metadata.gz: 2c976e128a2c3c8ab59c31fbec653aa7fe3b8d01973e92e4da220deff09cdee826c34627ca873d4eb612292f175419914c4235932002422cab3454f72b3da2d8
7
+ data.tar.gz: f37e48c5f981902d2db3e46dfa2a6101998ef11987e48e59ac9fc8e951d5b48d4e1cc6da756ff9b1860bb01e2abf6c72d0f1563a453f3e412754c2f0b8cfcbbb
data/.gitignore CHANGED
@@ -1,18 +1,14 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /spec/examples.txt
9
+ /tmp/
10
+
11
+ # rspec failure tracking
12
+ .rspec_status
13
+
6
14
  Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- bin
data/.gitlab-ci.yml ADDED
@@ -0,0 +1,49 @@
1
+ .rspec: &rspec
2
+ stage: test
3
+ tags:
4
+ - docker
5
+ before_script:
6
+ - "echo 'gem: --no-document' > ~/.gemrc"
7
+ - gem install bundler
8
+ - 'git -v || apk --update add git'
9
+ - bundle install -j $(nproc)
10
+ script:
11
+ - bundle exec rake
12
+
13
+ rspec ruby-2.4:
14
+ image: ruby:2.4-alpine
15
+ <<: *rspec
16
+
17
+ rspec ruby-2.5:
18
+ image: ruby:2.5-alpine
19
+ <<: *rspec
20
+
21
+ rspec ruby-2.6:
22
+ image: ruby:2.6-alpine
23
+ <<: *rspec
24
+
25
+ rspec ruby-2.7:
26
+ image: ruby:2.7-rc-alpine
27
+ <<: *rspec
28
+
29
+ rspec jruby-9.2:
30
+ image: jruby:9.2-alpine
31
+ <<: *rspec
32
+ only:
33
+ - 0-9-releases
34
+
35
+ release:
36
+ stage: deploy
37
+ image: ruby:2.6-alpine
38
+ tags:
39
+ - docker
40
+ script:
41
+ - "echo 'gem: --no-document' > ~/.gemrc"
42
+ - gem install bundler
43
+ - 'git -v || apk --update add git'
44
+ - bundle install -j $(nproc)
45
+ - 'ruby -ryaml -e "puts YAML.dump({rubygems_api_key: ENV.fetch(%{RUBYGEMS_API_KEY})})" > ~/.gem/credentials'
46
+ - chmod 600 ~/.gem/credentials
47
+ - bundle exec rake release
48
+ only:
49
+ - tags
data/.rspec CHANGED
@@ -1,3 +1,2 @@
1
- --warnings
2
- --format progress
3
1
  --color
2
+ --require spec_helper
data/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ ## 0.9.2 / 2019-06-29
2
+
3
+ * Project moved to GitLab (https://gitlab.com/envied/envied)
4
+ * Now requiring Ruby 2.4+ [#48], [#51]
5
+ * Removed `coercible` dependency as now all coercion functionality is implemented locally. This is a backwards compatible change. [#49]
6
+ * Lots of refactoring and bringing the project up-to-date
7
+
8
+ ### Deprecated
9
+
10
+ * default values
11
+
12
+ See https://gitlab.com/envied/envied/tree/0-9-releases#defaults
13
+
1
14
  ## 0.9.1 / 2017-07-06
2
15
 
3
16
  * Updates `envied check:heroku` to support multiline ENV variables [#42](../../pull/42)
data/Gemfile CHANGED
@@ -2,6 +2,3 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in envied.gemspec
4
4
  gemspec
5
-
6
- gem 'pry'
7
- gem 'benchmark-ips'
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # ENVied [![Build Status](https://travis-ci.org/eval/envied.svg?branch=master)](https://travis-ci.org/eval/envied)
1
+ # ENVied [![pipeline status](https://gitlab.com/envied/envied/badges/0-9-releases/pipeline.svg)](https://gitlab.com/envied/envied/commits/0-9-releases) [![project chat](https://img.shields.io/badge/zulip-join_chat-brightgreen.svg)](https://envied-rb.zulipchat.com/)
2
2
 
3
3
  ### TL;DR ensure presence and type of your app's ENV-variables.
4
4
 
@@ -19,7 +19,6 @@ For the rationale behind this project, see this [blogpost](http://www.gertgoet.c
19
19
  * [Groups](#groups)
20
20
  * [Defaults](#defaults)
21
21
  * [More examples](#more-examples)
22
- * [Rails](#rails--spring)
23
22
  * [Command-line interface](#command-line-interface)
24
23
  * [How do I...?](#how-do-i)
25
24
  * [Testing](#testing)
@@ -91,11 +90,11 @@ The following types are supported:
91
90
  * `:time` (e.g. '14:00')
92
91
  * `:hash` (e.g. 'a=1&b=2' becomes `{'a' => '1', 'b' => '2'}`)
93
92
  * `:array` (e.g. 'tag1,tag2' becomes `['tag1', 'tag2']`)
94
- * `:uri` (e.g. 'http://www.google.com' becomes `URI.parse('http://www.google.com')`
93
+ * `:uri` (e.g. 'http://www.google.com' becomes result of `URI.parse('http://www.google.com')`)
95
94
 
96
95
  ### Groups
97
96
 
98
- Groups give you more flexibility to define when variables are needed.
97
+ Groups give you more flexibility to define when variables are needed.
99
98
  It's similar to groups in a Gemfile:
100
99
 
101
100
  ```ruby
@@ -134,6 +133,9 @@ ENVied.require(nil)
134
133
 
135
134
  ### Defaults
136
135
 
136
+ > *NOTE*: default values will be removed in the next minor-release (i.e. > v0.9). See https://gitlab.com/envied/envied/tree/master#what-happened-to-default-values for more information and how to migrate.
137
+ > While your project depends on this feature it's recommended to pin the gem to 0.9-releases, i.e. `gem 'envied', '~> 0.9.3'`.
138
+
137
139
  In order to let other developers easily bootstrap the application, you can assign defaults to variables.
138
140
  Defaults can be a value or a `Proc` (see example below).
139
141
 
@@ -147,7 +149,7 @@ variable :FORCE_SSL, :boolean, default: 'false'
147
149
  variable :PORT, :integer, default: proc {|envied| envied.FORCE_SSL ? 443 : 80 }
148
150
  ```
149
151
 
150
- Please remember that ENVied only **reads** from ENV; it doesn't mutate ENV.
152
+ Please remember that ENVied only **reads** from ENV; it doesn't mutate ENV.
151
153
  Don't let setting a default for, say `RAILS_ENV`, give you the impression that `ENV['RAILS_ENV']` is set.
152
154
  As a rule of thumb you should only use defaults:
153
155
  * for local development
@@ -220,12 +222,14 @@ bundle exec rspec
220
222
  ## Developing
221
223
 
222
224
  ```bash
223
- bundle exec pry --gem
225
+ bin/console
224
226
  ```
225
227
 
226
228
  ## Contributing
227
229
 
228
- 1. Fork it: http://github.com/eval/envied/fork
230
+ To suggest a new feature, [open an Issue](https://gitlab.com/envied/envied/issues/new) before opening a PR.
231
+
232
+ 1. Fork it: https://gitlab.com/envied/envied/-/forks/new
229
233
  2. Create your feature branch: `git checkout -b my-new-feature`
230
234
  3. Commit your changes: `git commit -am 'Add some feature'`
231
235
  4. Push to the branch: `git push origin my-new-feature`
data/Rakefile CHANGED
@@ -1,10 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
- require 'rspec/core/rake_task'
2
+ require "rspec/core/rake_task"
3
3
 
4
- RSpec::Core::RakeTask.new(:spec) do |s|
5
- s.ruby_opts = %w(-w)
6
- s.rspec_opts = '--format progress'
7
- end
4
+ RSpec::Core::RakeTask.new(:spec)
8
5
 
9
- desc "Run the specs"
10
6
  task default: :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "envied"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
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__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/envied.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["gert@thinkcreate.nl", "jjfutbol@gmail.com"]
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
- spec.homepage = "https://github.com/eval/envied"
13
+ spec.homepage = "https://gitlab.com/envied/envied/tree/master#envied"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
@@ -18,10 +18,11 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.required_ruby_version = ">= 2.1.9"
22
- spec.add_dependency "coercible", "~> 1.0"
21
+ spec.required_ruby_version = ">= 2.4"
22
+
23
23
  spec.add_dependency "thor", "~> 0.15"
24
- spec.add_development_dependency "bundler", "~> 1.5"
25
- spec.add_development_dependency "rake"
24
+
25
+ spec.add_development_dependency "bundler", "~> 2.0"
26
+ spec.add_development_dependency "rake", "~> 12.0"
26
27
  spec.add_development_dependency "rspec", "~> 3.0"
27
28
  end
@@ -1,4 +1,6 @@
1
1
  # -*- mode: ruby -*-¬
2
+ # NOTE: defaults are deprecated and will be removed in > v0.9
3
+
2
4
  # We allow defaults for local development (and local tests), but want our CI
3
5
  # to mimic our production as much as possible.
4
6
  # New developers that don't have RACK_ENV set, will in this way not be presented with a huge
data/lib/envied/cli.rb CHANGED
@@ -43,10 +43,8 @@ class ENVied
43
43
  puts "Writing Envfile to #{File.expand_path('Envfile')}"
44
44
  template("Envfile.tt")
45
45
 
46
- puts <<-INIT
47
- Add the following snippet (or similar) to your app's initialization:
48
- ENVied.require(*ENV['ENVIED_GROUPS'] || [:default, ENV['RACK_ENV']])
49
- INIT
46
+ puts "Add the following snippet (or similar) to your app's initialization:"
47
+ puts "ENVied.require(*ENV['ENVIED_GROUPS'] || [:default, ENV['RACK_ENV']])"
50
48
  end
51
49
 
52
50
  desc "init:rails", "Generate all files needed for a Rails project"
@@ -79,7 +77,6 @@ INIT
79
77
  end
80
78
 
81
79
  desc "check:heroku", "Checks whether a Heroku config contains required variables"
82
-
83
80
  long_desc <<-LONG
84
81
  Checks the config of your Heroku app against the local Envfile.
85
82
 
@@ -96,14 +93,11 @@ INIT
96
93
  option :quiet, type: :boolean, desc: 'Communicate success of the check only via the exit status.'
97
94
  define_method "check:heroku" do
98
95
  if STDIN.tty?
99
- error <<-ERR
100
- Please pipe the contents of `heroku config --json` to this task.
101
- I.e. `heroku config --json | bundle exec envied check:heroku`"
102
- ERR
96
+ error "Please pipe to this task i.e. `heroku config --json | bundle exec envied check:heroku`"
103
97
  exit 1
104
98
  end
105
99
  heroku_env = JSON.parse(STDIN.read)
106
- ENV.replace({}).update(heroku_env)
100
+ ENV.replace(heroku_env)
107
101
 
108
102
  requested_groups = ENV['ENVIED_GROUPS'] || options[:groups]
109
103
  ENVied.require(*requested_groups)
@@ -117,7 +111,6 @@ ERR
117
111
  Generates a shell script to check the Heroku config against the local Envfile.
118
112
 
119
113
  The same as the check:heroku-task, but all in one script (no need to pipe `heroku config --json` to it etc.).
120
-
121
114
  LONG
122
115
  option :dest, banner: "where to put the script", desc: "Default: bin/<app>-env-check or bin/heroku-env-check"
123
116
  option :app, banner: "name of Heroku app", desc: "uses ENV['HEROKU_APP'] as default if present", default: ENV['HEROKU_APP']
@@ -1,15 +1,55 @@
1
- require 'coercible'
1
+ class ENVied::Coercer::ENViedString
2
+ TRUE_VALUES = %w[1 on t true y yes].freeze
3
+ FALSE_VALUES = %w[0 off f false n no].freeze
4
+ BOOLEAN_MAP = (TRUE_VALUES.product([ true ]) + FALSE_VALUES.product([ false ])).to_h.freeze
2
5
 
3
- class ENVied::Coercer::ENViedString < Coercible::Coercer::String
4
6
  def to_array(str)
5
7
  str.split(/(?<!\\),/).map{|i| i.gsub(/\\,/,',') }
6
8
  end
7
9
 
10
+ def to_boolean(str)
11
+ BOOLEAN_MAP.fetch(str&.downcase) do
12
+ raise_unsupported_coercion(str, __method__)
13
+ end
14
+ end
15
+
16
+ def to_date(str)
17
+ require 'date'
18
+ ::Date.parse(str)
19
+ rescue ArgumentError
20
+ raise_unsupported_coercion(str, __method__)
21
+ end
22
+
23
+ def to_float(str)
24
+ Float(str)
25
+ rescue ArgumentError
26
+ raise_unsupported_coercion(str, __method__)
27
+ end
28
+
8
29
  def to_hash(str)
9
30
  require 'cgi'
10
31
  ::CGI.parse(str).map { |key, values| [key, values[0]] }.to_h
11
32
  end
12
33
 
34
+ def to_string(str)
35
+ if str.respond_to?(:to_str)
36
+ str.public_send(:to_str)
37
+ else
38
+ raise_unsupported_coercion(str, __method__)
39
+ end
40
+ end
41
+
42
+ def to_symbol(str)
43
+ str.to_sym
44
+ end
45
+
46
+ def to_time(str)
47
+ require 'time'
48
+ ::Time.parse(str)
49
+ rescue ArgumentError
50
+ raise_unsupported_coercion(str, __method__)
51
+ end
52
+
13
53
  def to_uri(str)
14
54
  require 'uri'
15
55
  ::URI.parse(str)
@@ -20,4 +60,13 @@ class ENVied::Coercer::ENViedString < Coercible::Coercer::String
20
60
  rescue ArgumentError
21
61
  raise_unsupported_coercion(str, __method__)
22
62
  end
63
+
64
+ private
65
+
66
+ def raise_unsupported_coercion(value, method)
67
+ raise(
68
+ ENVied::Coercer::UnsupportedCoercion,
69
+ "#{self.class}##{method} doesn't know how to coerce #{value.inspect}"
70
+ )
71
+ end
23
72
  end
@@ -1,7 +1,8 @@
1
- require 'coercible'
2
-
3
1
  # Responsible for all string to type coercions.
4
2
  class ENVied::Coercer
3
+
4
+ UnsupportedCoercion = Class.new(StandardError)
5
+
5
6
  # Coerce strings to specific type.
6
7
  #
7
8
  # @param string [String] the string to be coerced
@@ -14,14 +15,9 @@ class ENVied::Coercer
14
15
  # @return [type] the coerced string.
15
16
  def coerce(string, type)
16
17
  unless supported_type?(type)
17
- raise ArgumentError, "#{type.inspect} is not supported type"
18
+ raise ArgumentError, "The type `#{type.inspect}` is not supported."
18
19
  end
19
- coerce_method_for(type.to_sym)[string]
20
- end
21
-
22
- def coerce_method_for(type)
23
- return nil unless supported_type?(type)
24
- coercer.method("to_#{type.downcase}")
20
+ coercer.public_send("to_#{type.downcase}", string)
25
21
  end
26
22
 
27
23
  def self.supported_types
@@ -52,7 +48,7 @@ class ENVied::Coercer
52
48
  end
53
49
 
54
50
  def coercer
55
- @coercer ||= Coercible::Coercer.new[ENViedString]
51
+ @coercer ||= ENViedString.new
56
52
  end
57
53
 
58
54
  def coerced?(value)
@@ -63,7 +59,7 @@ class ENVied::Coercer
63
59
  return false unless supported_type?(type)
64
60
  coerce(string, type)
65
61
  true
66
- rescue Coercible::UnsupportedCoercion
62
+ rescue UnsupportedCoercion
67
63
  false
68
64
  end
69
65
  end
@@ -2,21 +2,13 @@ class ENVied
2
2
  class Configuration
3
3
  attr_reader :current_group, :defaults_enabled, :coercer
4
4
 
5
- def initialize(options = {}, &block)
5
+ def initialize(**options, &block)
6
6
  @coercer = options.fetch(:coercer, Coercer.new)
7
7
  @defaults_enabled = options.fetch(:enable_defaults, defaults_enabled_default)
8
8
  instance_eval(&block) if block_given?
9
9
  end
10
10
 
11
- def defaults_enabled_default
12
- if ENV['ENVIED_ENABLE_DEFAULTS'].nil?
13
- false
14
- else
15
- @coercer.coerce(ENV['ENVIED_ENABLE_DEFAULTS'], :boolean)
16
- end
17
- end
18
-
19
- def self.load(options = {})
11
+ def self.load(**options)
20
12
  envfile = File.expand_path('Envfile')
21
13
  new(options).tap do |v|
22
14
  v.instance_eval(File.read(envfile), envfile)
@@ -24,6 +16,7 @@ class ENVied
24
16
  end
25
17
 
26
18
  def enable_defaults!(value = true, &block)
19
+ default_values_deprecation
27
20
  @defaults_enabled = block_given? ? block.call : value
28
21
  end
29
22
 
@@ -33,13 +26,9 @@ class ENVied
33
26
  @defaults_enabled
34
27
  end
35
28
 
36
- def variable(name, *args)
37
- options = args.last.is_a?(Hash) ? args.pop : {}
38
- type = args.first || :string
39
-
29
+ def variable(name, type = :string, **options)
40
30
  unless coercer.supported_type?(type)
41
- raise ArgumentError,
42
- "Variable type (of #{name}) should be one of #{coercer.supported_types}"
31
+ raise ArgumentError, "#{type.inspect} is not a supported type. Should be one of #{coercer.supported_types}"
43
32
  end
44
33
  options[:group] = current_group if current_group
45
34
  variables << ENVied::Variable.new(name, type, options)
@@ -57,6 +46,24 @@ class ENVied
57
46
  def variables
58
47
  @variables ||= []
59
48
  end
60
- end
61
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
+ end
62
69
  end
@@ -2,8 +2,9 @@ class ENVied
2
2
  # Responsible for anything related to the ENV.
3
3
  class EnvProxy
4
4
  attr_reader :config, :coercer, :groups
5
+ private :config, :coercer, :groups
5
6
 
6
- def initialize(config, options = {})
7
+ def initialize(config, **options)
7
8
  @config = config
8
9
  @coercer = options.fetch(:coercer, ENVied::Coercer.new)
9
10
  @groups = options.fetch(:groups, [])
@@ -17,16 +18,6 @@ class ENVied
17
18
  variables.reject(&method(:coerced?)).reject(&method(:coercible?))
18
19
  end
19
20
 
20
- def variables
21
- @variables ||= begin
22
- config.variables.select {|v| groups.include?(v.group) }
23
- end
24
- end
25
-
26
- def variables_by_name
27
- Hash[variables.map {|v| [v.name, v] }]
28
- end
29
-
30
21
  def [](name)
31
22
  coerce(variables_by_name[name.to_sym])
32
23
  end
@@ -35,35 +26,45 @@ class ENVied
35
26
  variables_by_name[name.to_sym]
36
27
  end
37
28
 
38
- def env_value_of(var)
39
- ENV[var.name.to_s]
40
- end
41
-
42
- def default_value_of(var)
43
- var.default_value(ENVied, var)
44
- end
45
-
46
29
  def value_to_coerce(var)
47
30
  return env_value_of(var) unless env_value_of(var).nil?
48
31
  config.defaults_enabled? ? default_value_of(var) : nil
49
32
  end
50
33
 
34
+ private
35
+
51
36
  def coerce(var)
52
37
  coerced?(var) ?
53
38
  value_to_coerce(var) :
54
39
  coercer.coerce(value_to_coerce(var), var.type)
55
40
  end
56
41
 
42
+ def coerced?(var)
43
+ coercer.coerced?(value_to_coerce(var))
44
+ end
45
+
57
46
  def coercible?(var)
58
47
  coercer.coercible?(value_to_coerce(var), var.type)
59
48
  end
60
49
 
50
+ def default_value_of(var)
51
+ var.default_value(ENVied, var)
52
+ end
53
+
54
+ def env_value_of(var)
55
+ ENV[var.name.to_s]
56
+ end
57
+
61
58
  def missing?(var)
62
59
  value_to_coerce(var).nil?
63
60
  end
64
61
 
65
- def coerced?(var)
66
- coercer.coerced?(value_to_coerce(var))
62
+ def variables
63
+ @variables ||= config.variables.select {|v| groups.include?(v.group) }
64
+ end
65
+
66
+ def variables_by_name
67
+ @variables_by_name ||= variables.map {|v| [v.name, v] }.to_h
67
68
  end
68
69
  end
69
70
  end
@@ -15,12 +15,12 @@ class ENVied
15
15
 
16
16
  attr_reader :globs, :extensions
17
17
 
18
- def initialize(options = {})
18
+ def initialize(**options)
19
19
  @globs = options.fetch(:globs, self.defaults[:globs])
20
20
  @extensions = options.fetch(:extensions, self.defaults[:extensions])
21
21
  end
22
22
 
23
- def self.extract_from(globs, options = {})
23
+ def self.extract_from(globs, **options)
24
24
  new(options.merge(globs: Array(globs))).extract
25
25
  end
26
26
 
@@ -1,7 +1,7 @@
1
1
  class ENVied::Variable
2
2
  attr_reader :name, :type, :group, :default
3
3
 
4
- def initialize(name, type, options = {})
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
@@ -1,3 +1,3 @@
1
1
  class ENVied
2
- VERSION = '0.9.1'
2
+ VERSION = '0.9.3'
3
3
  end