blinkist-config 1.0.2 → 1.3.1

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: 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: []