superconfig 2.1.1 → 2.2.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
2
  SHA256:
3
- metadata.gz: 19c4f5d2faef5fdb37e7e7d90aaee000304324181ed100ceba65f2d5ca6deae4
4
- data.tar.gz: 29e04481feccd4677d1d5d460fceb83a48d9e283d32bbadf76e29adf47336cce
3
+ metadata.gz: c4cefd39e531ddd3bd73508b42f10594c5723d57b3c78655b64a4a745c41be90
4
+ data.tar.gz: f115b83ecf9165eccadb65658f486274988f8741b7dc1031d80894d492194a35
5
5
  SHA512:
6
- metadata.gz: 0075c401a0fb1c7735a44538d6544bc17e79fd83e8ad7b068da06a52f0f96cd1eda15a65a4276f22f4711caf3cc41f782f05dd50c768cca7e34379da167d125d
7
- data.tar.gz: db789b81ef4ebd8f6a0705178208ba88452d477e66dbb44d6c37fed764eaa1584d0a1f8c07cb5c253877cbb7f01bd69aea51d2d0475f3784b43782e28840fe65
6
+ metadata.gz: c84799398211996ea64120c5d3d41cfb800cc17f4555719e3c7b6e857f6ed4b4b97dd28b067a982d6686c679888c77267da61d252913033a1e85848ab42f5cfd
7
+ data.tar.gz: ae6415b1f50f06eb63cdcf393486ecf2ccbaf23ab05663ba3641a3e4a0e242a2871b0ade58c1602e759c60a0506418cb8dd16536c9049098b3ba7ddf39be82de
@@ -19,14 +19,14 @@ jobs:
19
19
  strategy:
20
20
  fail-fast: false
21
21
  matrix:
22
- ruby: ["2.7", "3.0", "3.1"]
22
+ ruby: ["3.1", "3.2", "3.3"]
23
23
  gemfile:
24
24
  - Gemfile
25
25
 
26
26
  steps:
27
- - uses: actions/checkout@v3
27
+ - uses: actions/checkout@v4
28
28
 
29
- - uses: actions/cache@v3
29
+ - uses: actions/cache@v4
30
30
  with:
31
31
  path: vendor/bundle
32
32
  key: >
data/.rubocop.yml CHANGED
@@ -3,7 +3,7 @@ inherit_gem:
3
3
  rubocop-fnando: .rubocop.yml
4
4
 
5
5
  AllCops:
6
- TargetRubyVersion: 2.7
6
+ TargetRubyVersion: 3.1
7
7
  NewCops: enable
8
8
  Exclude:
9
9
  - vendor/**/*
data/CHANGELOG.md CHANGED
@@ -11,6 +11,14 @@ Prefix your message with one of the following:
11
11
  - [Security] in case of vulnerabilities.
12
12
  -->
13
13
 
14
+ # v2.2.1
15
+
16
+ - [Changed] Silence warnings when reassigning a method with `set`.
17
+
18
+ # v2.2.0
19
+
20
+ - [Added] `SuperConfig#set(key, value)` method to set arbitrary values.
21
+
14
22
  ## v2.1.1
15
23
 
16
24
  - [Changed] Ensure bad JSON strings doesn't leak it's contents.
data/README.md CHANGED
@@ -73,6 +73,14 @@ Config = SuperConfig.new do
73
73
  end
74
74
  ```
75
75
 
76
+ You can also set values using `SuperConfig#set`.
77
+
78
+ ```ruby
79
+ Config = SuperConfig.new do
80
+ set :domain, "example.com"
81
+ end
82
+ ```
83
+
76
84
  You may want to start a debug session without raising exceptions for missing
77
85
  variables. In this case, just pass `raise_exception: false` instead to log error
78
86
  messages to `$stderr`. This is especially great with Rails' credentials command
data/lib/superconfig.rb CHANGED
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SuperConfig
4
- VERSION = "2.1.1"
4
+ VERSION = "2.2.1"
5
5
 
6
6
  MissingEnvironmentVariable = Class.new(StandardError)
7
7
  MissingCallable = Class.new(StandardError)
8
8
 
9
- def self.new(**kwargs, &block)
10
- Base.new(**kwargs, &block)
9
+ def self.new(...)
10
+ Base.new(...)
11
11
  end
12
12
 
13
13
  class Base
@@ -28,34 +28,6 @@ module SuperConfig
28
28
  end
29
29
  alias inspect to_s
30
30
 
31
- def set(
32
- name,
33
- type,
34
- default = nil,
35
- required: false,
36
- aliases: [],
37
- description: nil
38
- )
39
- name = name.to_s
40
- env_var = name.upcase
41
-
42
- @attributes[env_var] = {required: required, default: default}
43
-
44
- name = "#{name}?" if type == bool
45
-
46
- validate!(env_var, required, description)
47
-
48
- define_singleton_method(name) do
49
- return default unless @env.key?(env_var)
50
-
51
- coerce(env_var, type, @env[env_var])
52
- end
53
-
54
- aliases.each do |alias_name|
55
- define_singleton_method(alias_name, method(name))
56
- end
57
- end
58
-
59
31
  def validate!(env_var, required, description)
60
32
  return unless required
61
33
  return if @env.key?(env_var)
@@ -72,21 +44,27 @@ module SuperConfig
72
44
  end
73
45
 
74
46
  def mandatory(name, type, aliases: [], description: nil)
75
- set(
47
+ assign(
76
48
  name,
77
49
  type,
78
50
  required: true,
79
- aliases: aliases,
80
- description: description
51
+ aliases:,
52
+ description:
81
53
  )
82
54
  end
83
55
 
84
56
  def optional(name, type, default = nil, aliases: [], description: nil)
85
- set(name, type, default, aliases: aliases, description: description)
57
+ assign(name, type, default, aliases:, description:)
58
+ end
59
+
60
+ def set(name, value)
61
+ silence_warnings do
62
+ property(name) { value }
63
+ end
86
64
  end
87
65
 
88
66
  def property(name, func = nil, cache: true, description: nil, &block) # rubocop:disable Lint/UnusedMethodArgument
89
- callable = (func || block)
67
+ callable = func || block
90
68
 
91
69
  unless callable
92
70
  raise MissingCallable, "arg[1] must respond to #call or pass a block"
@@ -103,7 +81,7 @@ module SuperConfig
103
81
 
104
82
  def credential(name, &block)
105
83
  define_singleton_method(name) do
106
- @__cache__["_credential_#{name}".to_sym] ||= begin
84
+ @__cache__[:"_credential_#{name}"] ||= begin
107
85
  value = Rails.application.credentials.fetch(name)
108
86
  block ? block.call(value) : value # rubocop:disable Performance/RedundantBlockCall
109
87
  end
@@ -208,7 +186,43 @@ module SuperConfig
208
186
  args = [name, value]
209
187
  args << sub_type if sub_type
210
188
 
211
- send("coerce_to_#{main_type}", *args)
189
+ send(:"coerce_to_#{main_type}", *args)
190
+ end
191
+
192
+ private def assign(
193
+ name,
194
+ type,
195
+ default = nil,
196
+ required: false,
197
+ aliases: [],
198
+ description: nil
199
+ )
200
+ name = name.to_s
201
+ env_var = name.upcase
202
+
203
+ @attributes[env_var] = {required:, default:}
204
+
205
+ name = "#{name}?" if type == bool
206
+
207
+ validate!(env_var, required, description)
208
+
209
+ define_singleton_method(name) do
210
+ return default unless @env.key?(env_var)
211
+
212
+ coerce(env_var, type, @env[env_var])
213
+ end
214
+
215
+ aliases.each do |alias_name|
216
+ define_singleton_method(alias_name, method(name))
217
+ end
218
+ end
219
+
220
+ private def silence_warnings(&)
221
+ old_verbose = $VERBOSE
222
+ $VERBOSE = nil
223
+ yield
224
+ ensure
225
+ $VERBOSE = old_verbose
212
226
  end
213
227
  end
214
228
  end
data/superconfig.gemspec CHANGED
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "./lib/superconfig"
3
+ require_relative "lib/superconfig"
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "superconfig"
7
7
  spec.version = SuperConfig::VERSION
8
8
  spec.authors = ["Nando Vieira"]
9
9
  spec.email = ["me@fnando.com"]
10
- spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
10
+ spec.required_ruby_version = Gem::Requirement.new(">= 3.1.0")
11
11
  spec.metadata = {"rubygems_mfa_required" => "true"}
12
12
 
13
13
  spec.summary = "Access environment variables. Also includes presence " \
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: superconfig
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-02-15 00:00:00.000000000 Z
10
+ date: 2025-02-11 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bundler
@@ -169,7 +168,6 @@ licenses:
169
168
  - MIT
170
169
  metadata:
171
170
  rubygems_mfa_required: 'true'
172
- post_install_message:
173
171
  rdoc_options: []
174
172
  require_paths:
175
173
  - lib
@@ -177,15 +175,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
177
175
  requirements:
178
176
  - - ">="
179
177
  - !ruby/object:Gem::Version
180
- version: 2.7.0
178
+ version: 3.1.0
181
179
  required_rubygems_version: !ruby/object:Gem::Requirement
182
180
  requirements:
183
181
  - - ">="
184
182
  - !ruby/object:Gem::Version
185
183
  version: '0'
186
184
  requirements: []
187
- rubygems_version: 3.4.6
188
- signing_key:
185
+ rubygems_version: 3.6.2
189
186
  specification_version: 4
190
187
  summary: Access environment variables. Also includes presence validation, type coercion
191
188
  and default values.