blinkist-config 1.0.2 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8ea30ece0d13a1b1603254be36125c28709c77d2
4
- data.tar.gz: 9c9bb44d87a2310bfceb28e2e21c1d2eb387e58f
2
+ SHA256:
3
+ metadata.gz: 7868467c713d2e0e0b123ac62d14f02d3a56455bf9040739eb22f328a6f6f7d2
4
+ data.tar.gz: 53e8be79f97294c44fe95134a31d1658d526bf9ea7514f4310881ab261860341
5
5
  SHA512:
6
- metadata.gz: 660c83fc9d879674dd268b90f63bf5398d6b0a470ecbf049844ce29c86d0bdc4b766d77c3e63728a3480025622f585a162d9984259e2f51b074ac70e2576b1a8
7
- data.tar.gz: e5d1b4cd3db5f6522a622dfabbcd8d02ad5a15a69668579e33ab97de07db93e87c2fde7ce83880e5b673afa50cfc5029b493aeea13e364721cdbeebeb1352fc8
6
+ metadata.gz: 88d3c68372a36670303fb7d2268d8bd5b57fab6735310e49fa578f9bd4fb9e6326999cdff380f0739ceb09ab67605eba091b11d4eaf0a8f5761d0bc997dfd9b7
7
+ data.tar.gz: a45d7dc3d5f72a38cfa2e747ae3a6d4c06f3234bea9a0476d98d722d1367f03ae022be1acbc1866f786e223ddacfd4c7c7144933285da7b9a743db394975fe0b
@@ -0,0 +1,26 @@
1
+ version: 2
2
+ jobs:
3
+ build:
4
+ working_directory: ~/blinkist/blinkist-config
5
+ parallelism: 1
6
+ docker:
7
+ - image: cimg/ruby:2.7.3-browsers
8
+ steps:
9
+ - checkout
10
+ - restore_cache:
11
+ keys:
12
+ - gem-cache-{{ checksum "Gemfile.lock" }}
13
+ - gem-cache-
14
+ - run:
15
+ name: Bundle Install
16
+ command: bundle install --jobs=4 --retry=3 --path=vendor/bundle
17
+ - save_cache:
18
+ key: gem-cache-{{ checksum "Gemfile.lock" }}
19
+ paths:
20
+ - vendor/bundle
21
+ - run:
22
+ name: RSpec
23
+ command: bundle exec rspec --format progress spec
24
+ environment:
25
+ RAILS_ENV: test
26
+ RACK_ENV: test
data/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM ruby:2.3.1-slim
1
+ FROM ruby:2.5.1-slim
2
2
 
3
3
  ENV RAILS_ENV=test
4
4
  ENV LANG en_US.UTF-8
@@ -14,7 +14,7 @@ ADD . /tmp/tmpapp
14
14
 
15
15
  RUN echo 'gem: --no-document' >> ~/.gemrc && \
16
16
  apt-get clean && apt-get update -qq && apt-get install -y build-essential $RUNTIME_PACKAGES && \
17
- gem install bundler --version 1.12.5 && \
17
+ gem install bundler --version 2.2.10 && \
18
18
  gem install gem-release && \
19
19
  bundle update && bundle install --jobs 20 --retry 5 && \
20
20
  rm -Rf /tmp/tmpapp/ && \
@@ -29,4 +29,4 @@ RUN bundle install -j1
29
29
  RUN chown -R nobody:nogroup /app
30
30
  RUN whoami
31
31
  USER nobody
32
- RUN whoami
32
+ RUN whoami
data/Gemfile CHANGED
@@ -3,8 +3,6 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in blinkist-config.gemspec
4
4
  gemspec
5
5
 
6
- gem "rubocop", "~> 0"
7
-
8
6
  group :test do
9
7
  gem "codeclimate-test-reporter", "~> 1.0.0"
10
8
  gem "simplecov"
data/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  # Blinkist::Config
2
2
 
3
3
  [![CircleCI](https://circleci.com/gh/blinkist/blinkist-config.svg?style=shield)](https://circleci.com/gh/blinkist/blinkist-config)
4
- [![Dependency Status](https://www.versioneye.com/user/projects/58abf0e4b4d2a20036950ef0/badge.svg?style=flat-square)](https://www.versioneye.com/user/projects/58abf0e4b4d2a20036950ef0)
5
4
  [![Code Climate](https://codeclimate.com/github/blinkist/blinkist-config/badges/gpa.svg)](https://codeclimate.com/github/blinkist/blinkist-config)
6
5
 
7
6
  This GEM allows you to access configuration stores with different adapters. Here're some examples of usage:
@@ -10,19 +9,41 @@ This GEM allows you to access configuration stores with different adapters. Here
10
9
 
11
10
  ```ruby
12
11
  # First setup the Config to use the ENV as config store
12
+
13
+ Diplomat.configure do |config|
14
+ config.url = "http://172.17.0.1:8500"
15
+ end
16
+
13
17
  Blinkist::Config.env = ENV["RAILS_ENV"]
14
18
  Blinkist::Config.app_name = "my_nice_app"
15
19
  Blinkist::Config.adapter_type = :env
20
+ Blinkist::Config.error_handler = :strict
16
21
 
17
- my_config_value = Blinkist::Config.get "some/folder/config"
22
+ my_config_value = Blinkist::Config.get! "some/folder/config"
18
23
 
19
24
  # This is being translated to ENV["SOME_FOLDER_CONFIG"]
20
25
  ```
21
26
 
27
+ ### Error handling
28
+
29
+ When configured with `Blinkist::Config.error_handler = :strict` (as recommended)
30
+ reading a configuration entry for which the value is missing
31
+ (for example missing enviroment variables) will cause
32
+ `Blinkist::Config::ValueMissingError` to be raised.
33
+
34
+ There is also an alternative mode `Blinkist::Config.error_handler = :heuristic` which
35
+ will raise exceptions only when `Blinkist::Config.env == "production"`.
36
+
37
+ This alternative mode is also the default for compatibility.
38
+
22
39
  ### Having a default value
23
40
 
41
+ If you don't want `Blinkist::Config.get!` to scream at you for missing
42
+ configuration entries then you canprovide a default value as a second
43
+ paramter to `get!`:
44
+
24
45
  ```ruby
25
- my_config_value = Blinkist::Config.get "some/folder/config", "default value"
46
+ my_config_value = Blinkist::Config.get! "some/folder/config", "default value"
26
47
 
27
48
  # If ENV["SOME_FOLDER_CONFIG"] is nil, "default value" will be returned
28
49
  ```
@@ -42,7 +63,7 @@ Blinkist::Config.env = ENV["RAILS_ENV"]
42
63
  Blinkist::Config.app_name = "my_nice_app"
43
64
  Blinkist::Config.adapter_type = ENV["CONSUL_AVAILABLE"] == "true" ? :diplomat : :env
44
65
 
45
- my_config_value = Blinkist::Config.get "some/folder/config"
66
+ my_config_value = Blinkist::Config.get! "some/folder/config"
46
67
 
47
68
  # This is will try to get a value from Consul's KV store at "my_nice_app/some/folder/config"
48
69
  ```
@@ -51,12 +72,41 @@ my_config_value = Blinkist::Config.get "some/folder/config"
51
72
  ```ruby
52
73
  # Here we setting a scope outside of the app
53
74
 
54
- my_config_value = Blinkist::Config.get "another/config", scope: "global"
75
+ my_config_value = Blinkist::Config.get! "another/config", scope: "global"
55
76
 
56
77
  # This will replace `my_nice_app` with `global` and try to resolve "global/another/config"
57
78
  # With :env the scope will simply be ignored
58
79
  ```
59
80
 
81
+ ### Using AWS SSM
82
+
83
+ If you want to use EC2's key value store SSM, simply use our aws_ssm adapter. It'll automatically try to decrypt all keys.
84
+
85
+ The GEM expects the code to run in an AWS environment with properly set up IAM.
86
+
87
+ ```ruby
88
+ Blinkist::Config.env = ENV["RAILS_ENV"]
89
+ Blinkist::Config.app_name = "my_nice_app"
90
+ Blinkist::Config.adapter_type = ENV["SSM_AVAILABLE"] == "true" ? :aws_ssm : :env
91
+
92
+ my_config_value = Blinkist::Config.get! "some/folder/config"
93
+
94
+ # This is will try to get a parameter from SSM at "/application/my_nice_app/some/folder/config"
95
+
96
+ # You can also preload all parameters to avoid later calls to SSM
97
+ Blinkist::Config.preload
98
+ Blinkist::Config.preload scope: "global" # in case you need also another scope being preloaded
99
+ ```
100
+
101
+ ### Using SSM with a folder scope
102
+ ```ruby
103
+ # Here we setting a scope outside of the app
104
+
105
+ my_config_value = Blinkist::Config.get! "another/config", scope: "global"
106
+
107
+ # This will replace `my_nice_app` with `global` and try to resolve "/application/global/another/config"
108
+ ```
109
+
60
110
 
61
111
  ## Installation
62
112
 
@@ -112,10 +162,9 @@ You'll have to have proper rights to access rubygems.org
112
162
 
113
163
  ## Contributing
114
164
 
115
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/blinkist-config.
165
+ Bug reports and pull requests are welcome on GitHub at https://github.com/blinkist/blinkist-config.
116
166
 
117
167
 
118
168
  ## License
119
169
 
120
170
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
121
-
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+
2
2
  lib = File.expand_path("../lib", __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require_relative "lib/blinkist/config/version"
@@ -10,16 +10,17 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["sj@blinkist.com"]
11
11
 
12
12
  spec.summary = "Simple adapter based configuration handler (supports ENV and Consul/Diplomat)."
13
- spec.description = "This GEM allows you to keep your configuration class-based by calling Blinkist::Config.get(...) instead of accessing the ENV directly. You can set up different types of adapters to connect to various configuration systems like your ENV or Consul's key-value-store."
13
+ spec.description = "This GEM allows you to keep your configuration class-based by calling Blinkist::Config.get!(...) instead of accessing the ENV directly. You can set up different types of adapters to connect to various configuration systems like your ENV or Consul's key-value-store."
14
14
  spec.homepage = "https://github.com/blinkist/blinkist-config"
15
15
  spec.license = "MIT"
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
18
  spec.require_paths = %w(lib)
19
19
 
20
- spec.add_development_dependency "bundler", "~> 1.12"
20
+ spec.add_development_dependency "bundler", "~> 2.2.10"
21
21
  spec.add_development_dependency "rake", "~> 12.0"
22
22
  spec.add_development_dependency "rspec", "~> 3.0"
23
23
 
24
- spec.add_runtime_dependency "diplomat", "~> 1"
24
+ spec.add_runtime_dependency "diplomat", "~> 2"
25
+ spec.add_runtime_dependency "aws-sdk-ssm", "~> 1"
25
26
  end
@@ -10,17 +10,17 @@ module Blinkist
10
10
  raise NotImplementedError
11
11
  end
12
12
 
13
+ def preload(**)
14
+ # nothing to do
15
+ end
16
+
13
17
  class << self
14
18
  def instance_for(type, env, app_name)
15
- case type
16
- when :env
17
- EnvAdapter.new env, app_name
18
- when :diplomat
19
- DiplomatAdapter.new env, app_name
20
- else
21
- raise NotImplementedError
22
- end
19
+ Factory.new("Blinkist::Adapter.for", Adapters::BUILT_IN, env, app_name).call(type)
23
20
  end
21
+
22
+ extend Gem::Deprecate
23
+ deprecate :instance_for, :none, 2017, 12
24
24
  end
25
25
  end
26
26
  end
@@ -0,0 +1,70 @@
1
+ require_relative "adapter"
2
+ require "aws-sdk-ssm"
3
+
4
+ module Blinkist
5
+ class Config
6
+ class AwsSsmAdapter < Adapter
7
+ DEFAULT_PREFIX = "/application/".freeze
8
+
9
+ def initialize(env, app_name)
10
+ super env, app_name
11
+
12
+ @items_cache = {}
13
+ @client = Aws::SSM::Client.new
14
+ end
15
+
16
+ def get(key, default=nil, scope: nil)
17
+ prefix = prefix_for(scope)
18
+
19
+ query_ssm_parameter prefix + key
20
+ rescue Aws::SSM::Errors::ParameterNotFound
21
+ default
22
+ end
23
+
24
+ def preload(scope: nil)
25
+ query_all_ssm_parameters prefix_for(scope)
26
+ end
27
+
28
+ private
29
+
30
+ def prefix_for(scope)
31
+ if scope.nil?
32
+ DEFAULT_PREFIX + @app_name + "/"
33
+ else
34
+ DEFAULT_PREFIX + scope + "/"
35
+ end
36
+ end
37
+
38
+ def query_ssm_parameter(name)
39
+ @items_cache[name] ||= @client.get_parameter(
40
+ name: name,
41
+ with_decryption: true
42
+ ).parameter.value
43
+ end
44
+
45
+ def query_all_ssm_parameters(prefix)
46
+ parameters = []
47
+ next_token = nil
48
+
49
+ # SSM limits the results and we need to loop
50
+ loop do
51
+ result = @client.get_parameters_by_path(
52
+ path: prefix,
53
+ recursive: true,
54
+ with_decryption: true,
55
+ next_token: next_token
56
+ )
57
+
58
+ parameters += result.parameters
59
+ next_token = result.next_token
60
+
61
+ break if next_token.nil?
62
+ end
63
+
64
+ parameters.map do |parameter|
65
+ @items_cache[parameter.name] = parameter.value
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -8,10 +8,6 @@ module Blinkist
8
8
  super env, app_name
9
9
 
10
10
  @items_cache = {}
11
-
12
- Diplomat.configure do |config|
13
- config.url = "http://172.17.0.1:8500"
14
- end
15
11
  end
16
12
 
17
13
  def get(key, default=nil, scope: nil)
@@ -0,0 +1,11 @@
1
+ module Blinkist
2
+ class Config
3
+ module Adapters
4
+ BUILT_IN = {
5
+ env: EnvAdapter,
6
+ diplomat: DiplomatAdapter,
7
+ aws_ssm: AwsSsmAdapter
8
+ }.freeze
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ module Blinkist
2
+ class Config
3
+ class Error < ::StandardError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,14 @@
1
+ module Blinkist
2
+ class Config
3
+ class ErrorHandler
4
+ def initialize(env, app_name)
5
+ @env = env
6
+ @app_name = app_name
7
+ end
8
+
9
+ def call(key, scope)
10
+ raise ValueMissingError, "Missing value for #{key} in the scope: #{scope || '<default>'} (Please check the configuration for missing keys)"
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ module Blinkist
2
+ class Config
3
+ class ProductionOnlyErrorHandler < ErrorHandler
4
+ def call(key, scope)
5
+ super(key, scope) if @env.to_s == "production"
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+
2
+ module Blinkist
3
+ class Config
4
+ module ErrorHandlers
5
+ BUILT_IN = {
6
+ strict: ErrorHandler,
7
+ heuristic: ProductionOnlyErrorHandler
8
+ }.freeze
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,30 @@
1
+ module Blinkist
2
+ class Config
3
+ class Factory
4
+ def initialize(aspect, implementations, env=Blinkist::Config.env, app_name=Blinkist::Config.app_name)
5
+ @aspect = aspect
6
+ @implementations = implementations
7
+ @env = env
8
+ @app_name = app_name
9
+ end
10
+
11
+ def call(strategy)
12
+ case strategy
13
+ when Symbol
14
+ klass = @implementations[strategy] ||
15
+ raise(NotImplementedError, "Unknown strategy #{strategy} for #{@aspect}")
16
+ when Class
17
+ klass = strategy
18
+ else
19
+ if strategy.respond_to?(:call)
20
+ return strategy
21
+ else
22
+ raise InvalidStrategyError
23
+ end
24
+ end
25
+
26
+ klass.new(@env, @app_name)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,6 @@
1
+ module Blinkist
2
+ class Config
3
+ class InvalidStrategyError < Error
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Blinkist
2
+ class Config
3
+ class NotImplementedError < Error
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Blinkist
2
+ class Config
3
+ class ValueMissingError < Error
4
+ end
5
+ end
6
+ end
@@ -1,5 +1,5 @@
1
1
  module Blinkist
2
2
  class Config
3
- VERSION = "1.0.2".freeze
3
+ VERSION = "1.3.1".freeze
4
4
  end
5
5
  end
@@ -1,19 +1,68 @@
1
1
  require_relative "config/version"
2
+ require_relative "config/error"
3
+ require_relative "config/factory"
4
+ require_relative "config/not_implemented_error"
5
+ require_relative "config/invalid_strategy_error"
6
+ require_relative "config/value_missing_error"
7
+ require_relative "config/error_handlers/error_handler"
8
+ require_relative "config/error_handlers/production_only_error_handler"
9
+ require_relative "config/error_handlers"
2
10
  require_relative "config/adapters/env_adapter"
3
11
  require_relative "config/adapters/diplomat_adapter"
12
+ require_relative "config/adapters/aws_ssm_adapter"
13
+ require_relative "config/adapters"
4
14
 
5
15
  module Blinkist
6
16
  class Config
7
17
  class << self
8
- attr_accessor :adapter_type, :logger, :env, :app_name
18
+ attr_accessor :adapter_type, :logger, :env, :app_name, :error_handler
9
19
 
10
20
  def get(key, default = nil, scope: nil)
11
- adapter.get(key, scope: scope) || default
21
+ get!(key, default, scope: scope)
22
+ end
23
+
24
+ def preload(scope: nil)
25
+ adapter.preload scope: scope
26
+ end
27
+
28
+ extend Gem::Deprecate
29
+ deprecate :get, "get!", 2017, 12
30
+
31
+ def get!(key, *args, scope: nil)
32
+ # NOTE: we need to do this this way
33
+ # to handle 'nil' default correctly
34
+ case args.length
35
+ when 0
36
+ default = nil
37
+ bang = true
38
+ when 1
39
+ default = args.first
40
+ bang = false
41
+ else
42
+ raise ArgumentError, "wrong number of arguments (given #{args.length + 1}, expected 1..2)"
43
+ end
44
+
45
+ from_adapter = adapter.get(key, scope: scope)
46
+
47
+ if from_adapter.nil? && bang
48
+ handle_error(key, scope)
49
+ else
50
+ return from_adapter || default
51
+ end
12
52
  end
13
53
 
14
54
  def adapter
15
- @adapter ||= Adapter.instance_for adapter_type, env, app_name
55
+ @adapter ||= Factory.new("Blinkist::Config.adapter_type", Adapters::BUILT_IN).call(adapter_type)
56
+ end
57
+
58
+ def handle_error(key, scope)
59
+ handler = Factory.new("Blinkist::Config.error_handler", ErrorHandlers::BUILT_IN).call(error_handler)
60
+ handler.call(key, scope)
16
61
  end
62
+
17
63
  end
64
+
65
+ # NOTE: default configuration goes here
66
+ self.error_handler = :heuristic
18
67
  end
19
68
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blinkist-config
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian Schleicher, Blinks Labs GmbH
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-22 00:00:00.000000000 Z
11
+ date: 2021-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.12'
19
+ version: 2.2.10
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.12'
26
+ version: 2.2.10
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -54,6 +54,20 @@ dependencies:
54
54
  version: '3.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: diplomat
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2'
69
+ - !ruby/object:Gem::Dependency
70
+ name: aws-sdk-ssm
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
@@ -67,7 +81,7 @@ dependencies:
67
81
  - !ruby/object:Gem::Version
68
82
  version: '1'
69
83
  description: This GEM allows you to keep your configuration class-based by calling
70
- Blinkist::Config.get(...) instead of accessing the ENV directly. You can set up
84
+ Blinkist::Config.get!(...) instead of accessing the ENV directly. You can set up
71
85
  different types of adapters to connect to various configuration systems like your
72
86
  ENV or Consul's key-value-store.
73
87
  email:
@@ -76,6 +90,7 @@ executables: []
76
90
  extensions: []
77
91
  extra_rdoc_files: []
78
92
  files:
93
+ - ".circleci/config.yml"
79
94
  - ".gitignore"
80
95
  - ".rubocop.yml"
81
96
  - Dockerfile
@@ -89,15 +104,25 @@ files:
89
104
  - blinkist-config.gemspec
90
105
  - docker-compose.yml
91
106
  - lib/blinkist/config.rb
107
+ - lib/blinkist/config/adapters.rb
92
108
  - lib/blinkist/config/adapters/adapter.rb
109
+ - lib/blinkist/config/adapters/aws_ssm_adapter.rb
93
110
  - lib/blinkist/config/adapters/diplomat_adapter.rb
94
111
  - lib/blinkist/config/adapters/env_adapter.rb
112
+ - lib/blinkist/config/error.rb
113
+ - lib/blinkist/config/error_handlers.rb
114
+ - lib/blinkist/config/error_handlers/error_handler.rb
115
+ - lib/blinkist/config/error_handlers/production_only_error_handler.rb
116
+ - lib/blinkist/config/factory.rb
117
+ - lib/blinkist/config/invalid_strategy_error.rb
118
+ - lib/blinkist/config/not_implemented_error.rb
119
+ - lib/blinkist/config/value_missing_error.rb
95
120
  - lib/blinkist/config/version.rb
96
121
  homepage: https://github.com/blinkist/blinkist-config
97
122
  licenses:
98
123
  - MIT
99
124
  metadata: {}
100
- post_install_message:
125
+ post_install_message:
101
126
  rdoc_options: []
102
127
  require_paths:
103
128
  - lib
@@ -112,9 +137,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
137
  - !ruby/object:Gem::Version
113
138
  version: '0'
114
139
  requirements: []
115
- rubyforge_project:
116
- rubygems_version: 2.6.8
117
- signing_key:
140
+ rubygems_version: 3.2.22
141
+ signing_key:
118
142
  specification_version: 4
119
143
  summary: Simple adapter based configuration handler (supports ENV and Consul/Diplomat).
120
144
  test_files: []