superconfig 2.1.1 → 2.2.0

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: 38c1ba78820c0d5133c121b5b4157a94c0f49030ae4ae3ee700e231564d4bfc6
4
+ data.tar.gz: '014789c1819732d0b4e213d59189a5c958b60475ec06d71c3d25bdcc1c9bd0f9'
5
5
  SHA512:
6
- metadata.gz: 0075c401a0fb1c7735a44538d6544bc17e79fd83e8ad7b068da06a52f0f96cd1eda15a65a4276f22f4711caf3cc41f782f05dd50c768cca7e34379da167d125d
7
- data.tar.gz: db789b81ef4ebd8f6a0705178208ba88452d477e66dbb44d6c37fed764eaa1584d0a1f8c07cb5c253877cbb7f01bd69aea51d2d0475f3784b43782e28840fe65
6
+ metadata.gz: 43da8d2e33cdbcc32bc1c53d89bec045049500a6dca584d86eb8ce51fa6a14db3104b955d17cab3a5a3f493e831da923226a05399a07b6438ddf93cd3da52e21
7
+ data.tar.gz: 57723e9ac840ddf395a63496836770f4905ee4a2747f77fb72a19b49c8e81a51e1dffd9cff4ec2b99376caf94789d46c7a0a4e0f1750abe60d93b87241ac6b8f
@@ -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,10 @@ Prefix your message with one of the following:
11
11
  - [Security] in case of vulnerabilities.
12
12
  -->
13
13
 
14
+ # Unreleased
15
+
16
+ - [Added] `SuperConfig#set(key, value)` method to set arbitrary values.
17
+
14
18
  ## v2.1.1
15
19
 
16
20
  - [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.0"
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,25 @@ 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
+ property(name) { value }
86
62
  end
87
63
 
88
64
  def property(name, func = nil, cache: true, description: nil, &block) # rubocop:disable Lint/UnusedMethodArgument
89
- callable = (func || block)
65
+ callable = func || block
90
66
 
91
67
  unless callable
92
68
  raise MissingCallable, "arg[1] must respond to #call or pass a block"
@@ -103,7 +79,7 @@ module SuperConfig
103
79
 
104
80
  def credential(name, &block)
105
81
  define_singleton_method(name) do
106
- @__cache__["_credential_#{name}".to_sym] ||= begin
82
+ @__cache__[:"_credential_#{name}"] ||= begin
107
83
  value = Rails.application.credentials.fetch(name)
108
84
  block ? block.call(value) : value # rubocop:disable Performance/RedundantBlockCall
109
85
  end
@@ -208,7 +184,35 @@ module SuperConfig
208
184
  args = [name, value]
209
185
  args << sub_type if sub_type
210
186
 
211
- send("coerce_to_#{main_type}", *args)
187
+ send(:"coerce_to_#{main_type}", *args)
188
+ end
189
+
190
+ private def assign(
191
+ name,
192
+ type,
193
+ default = nil,
194
+ required: false,
195
+ aliases: [],
196
+ description: nil
197
+ )
198
+ name = name.to_s
199
+ env_var = name.upcase
200
+
201
+ @attributes[env_var] = {required:, default:}
202
+
203
+ name = "#{name}?" if type == bool
204
+
205
+ validate!(env_var, required, description)
206
+
207
+ define_singleton_method(name) do
208
+ return default unless @env.key?(env_var)
209
+
210
+ coerce(env_var, type, @env[env_var])
211
+ end
212
+
213
+ aliases.each do |alias_name|
214
+ define_singleton_method(alias_name, method(name))
215
+ end
212
216
  end
213
217
  end
214
218
  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.0
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-10 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.