anyway_config 2.4.0 → 2.4.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 +4 -4
- data/CHANGELOG.md +8 -1
- data/README.md +16 -1
- data/lib/.rbnext/2.7/anyway/config.rb +19 -1
- data/lib/.rbnext/3.0/anyway/config.rb +19 -1
- data/lib/.rbnext/3.1/anyway/config.rb +19 -1
- data/lib/anyway/config.rb +19 -1
- data/lib/anyway/loaders/ejson.rb +6 -2
- data/lib/anyway/rails/settings.rb +22 -14
- data/lib/anyway/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd660b7594fd85e041d4f00a4abbadef72085256e250df638cd239a3512db58c
|
4
|
+
data.tar.gz: 94fa4463eaf4bf2d64cddba05ba1fac18e635f62ff89620f8a460c9cf0162535
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1585d343611b50d1ca021dfbd2dfb49f92b8aad835c7f3c48aabeab4d5cc905877db4ef57a86e51b59c53f9b1192f69c7b58af4ec6c1b182447b146e19b4a3b
|
7
|
+
data.tar.gz: 983a3079303037e6cda97057ad51ef2479000baa1e975d481a7c2f4cd2510605fd36227d3692b1a82f7a85db333a7909e5610515286e1c10adc0aeb0e11f3006
|
data/CHANGELOG.md
CHANGED
@@ -2,9 +2,15 @@
|
|
2
2
|
|
3
3
|
## master
|
4
4
|
|
5
|
+
## 2.4.1 (2023-05-04)
|
6
|
+
|
7
|
+
- Add custom namespace support via `ejson_namespace` ([@bessey])
|
8
|
+
|
9
|
+
- Add arbitrary custom loader options support via `loader_options` ([@bessey])
|
10
|
+
|
5
11
|
## 2.4.0 (2023-04-04)
|
6
12
|
|
7
|
-
-
|
13
|
+
- Added `Confi#as_env` to convert config into a ENV-like Hash. ([@tagirahmad][])
|
8
14
|
|
9
15
|
- Added experimental support for sub-configs via coercion. ([@palkan][])
|
10
16
|
|
@@ -517,3 +523,4 @@ No we're dependency-free!
|
|
517
523
|
[@prog-supdex]: https://github.com/prog-supdex
|
518
524
|
[@inner-whisper]: https://github.com/inner-whisper
|
519
525
|
[@tagirahmad]: https://github.com/tagirahmad
|
526
|
+
[@bessey]: https://github.com/bessey
|
data/README.md
CHANGED
@@ -544,6 +544,8 @@ Would you like to generate a heroku.yml file? (Y/n) n
|
|
544
544
|
You can also specify the `--app` option to put the newly created class into `app/configs` folder.
|
545
545
|
Alternatively, you can call `rails g anyway:app_config name param1 param2 ...`.
|
546
546
|
|
547
|
+
**NOTE:** The generated `ApplicationConfig` class uses a singleton pattern along with `delegate_missing_to` to re-use the same instance across the application. However, the delegation can lead to unexpected behaviour and break Anyway Config internals if you have attributes named as `Anyway::Config` class methods. See [#120](https://github.com/palkan/anyway_config/issues/120).
|
548
|
+
|
547
549
|
## Using with Ruby
|
548
550
|
|
549
551
|
The default data loading mechanism for non-Rails applications is the following (ordered by priority from low to high):
|
@@ -790,6 +792,18 @@ To debug any problems with loading configurations from `.ejson` files you can di
|
|
790
792
|
ejson decrypt config/secrets.ejson
|
791
793
|
```
|
792
794
|
|
795
|
+
You can customize the JSON namespace under which a loader searches for configuration via `loader_options`:
|
796
|
+
|
797
|
+
```ruby
|
798
|
+
class MyConfig < Anyway::Config
|
799
|
+
# To look under the key "foo" instead of the default key of "my"
|
800
|
+
loader_options ejson_namespace: "foo"
|
801
|
+
|
802
|
+
# Or to disable namespacing entirely, and instead search in the root object
|
803
|
+
loader_options ejson_namespace: false
|
804
|
+
end
|
805
|
+
```
|
806
|
+
|
793
807
|
### Custom loaders
|
794
808
|
|
795
809
|
You can provide your own data loaders or change the existing ones using the Loaders API (which is very similar to Rack middleware builder):
|
@@ -810,7 +824,8 @@ def call(
|
|
810
824
|
name:, # config name
|
811
825
|
env_prefix:, # prefix for env vars if any
|
812
826
|
config_path:, # path to YML config
|
813
|
-
local
|
827
|
+
local:, # true|false, whether to load local configuration
|
828
|
+
**options # custom options can be passed via Anyway::Config.loader_options example: "custom", option: "blah"
|
814
829
|
)
|
815
830
|
#=> must return Hash with configuration data
|
816
831
|
end
|
@@ -199,6 +199,18 @@ module Anyway # :nodoc:
|
|
199
199
|
end
|
200
200
|
end
|
201
201
|
|
202
|
+
def loader_options(val = nil)
|
203
|
+
return (@loader_options = val) unless val.nil?
|
204
|
+
|
205
|
+
return @loader_options if instance_variable_defined?(:@loader_options)
|
206
|
+
|
207
|
+
@loader_options = if superclass < Anyway::Config
|
208
|
+
superclass.loader_options
|
209
|
+
else
|
210
|
+
{}
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
202
214
|
def new_empty_config() ; {}; end
|
203
215
|
|
204
216
|
def coerce_types(mapping)
|
@@ -343,7 +355,13 @@ module Anyway # :nodoc:
|
|
343
355
|
|
344
356
|
config_path = resolve_config_path(config_name, env_prefix)
|
345
357
|
|
346
|
-
load_from_sources(
|
358
|
+
load_from_sources(
|
359
|
+
base_config,
|
360
|
+
name: config_name,
|
361
|
+
env_prefix: env_prefix,
|
362
|
+
config_path: config_path,
|
363
|
+
**self.class.loader_options
|
364
|
+
)
|
347
365
|
|
348
366
|
if overrides
|
349
367
|
Tracing.trace!(:load) { overrides }
|
@@ -199,6 +199,18 @@ module Anyway # :nodoc:
|
|
199
199
|
end
|
200
200
|
end
|
201
201
|
|
202
|
+
def loader_options(val = nil)
|
203
|
+
return (@loader_options = val) unless val.nil?
|
204
|
+
|
205
|
+
return @loader_options if instance_variable_defined?(:@loader_options)
|
206
|
+
|
207
|
+
@loader_options = if superclass < Anyway::Config
|
208
|
+
superclass.loader_options
|
209
|
+
else
|
210
|
+
{}
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
202
214
|
def new_empty_config() ; {}; end
|
203
215
|
|
204
216
|
def coerce_types(mapping)
|
@@ -343,7 +355,13 @@ module Anyway # :nodoc:
|
|
343
355
|
|
344
356
|
config_path = resolve_config_path(config_name, env_prefix)
|
345
357
|
|
346
|
-
load_from_sources(
|
358
|
+
load_from_sources(
|
359
|
+
base_config,
|
360
|
+
name: config_name,
|
361
|
+
env_prefix: env_prefix,
|
362
|
+
config_path: config_path,
|
363
|
+
**self.class.loader_options
|
364
|
+
)
|
347
365
|
|
348
366
|
if overrides
|
349
367
|
Tracing.trace!(:load) { overrides }
|
@@ -199,6 +199,18 @@ module Anyway # :nodoc:
|
|
199
199
|
end
|
200
200
|
end
|
201
201
|
|
202
|
+
def loader_options(val = nil)
|
203
|
+
return (@loader_options = val) unless val.nil?
|
204
|
+
|
205
|
+
return @loader_options if instance_variable_defined?(:@loader_options)
|
206
|
+
|
207
|
+
@loader_options = if superclass < Anyway::Config
|
208
|
+
superclass.loader_options
|
209
|
+
else
|
210
|
+
{}
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
202
214
|
def new_empty_config() = {}
|
203
215
|
|
204
216
|
def coerce_types(mapping)
|
@@ -343,7 +355,13 @@ module Anyway # :nodoc:
|
|
343
355
|
|
344
356
|
config_path = resolve_config_path(config_name, env_prefix)
|
345
357
|
|
346
|
-
load_from_sources(
|
358
|
+
load_from_sources(
|
359
|
+
base_config,
|
360
|
+
name: config_name,
|
361
|
+
env_prefix: env_prefix,
|
362
|
+
config_path: config_path,
|
363
|
+
**self.class.loader_options
|
364
|
+
)
|
347
365
|
|
348
366
|
if overrides
|
349
367
|
Tracing.trace!(:load) { overrides }
|
data/lib/anyway/config.rb
CHANGED
@@ -199,6 +199,18 @@ module Anyway # :nodoc:
|
|
199
199
|
end
|
200
200
|
end
|
201
201
|
|
202
|
+
def loader_options(val = nil)
|
203
|
+
return (@loader_options = val) unless val.nil?
|
204
|
+
|
205
|
+
return @loader_options if instance_variable_defined?(:@loader_options)
|
206
|
+
|
207
|
+
@loader_options = if superclass < Anyway::Config
|
208
|
+
superclass.loader_options
|
209
|
+
else
|
210
|
+
{}
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
202
214
|
def new_empty_config() = {}
|
203
215
|
|
204
216
|
def coerce_types(mapping)
|
@@ -343,7 +355,13 @@ module Anyway # :nodoc:
|
|
343
355
|
|
344
356
|
config_path = resolve_config_path(config_name, env_prefix)
|
345
357
|
|
346
|
-
load_from_sources(
|
358
|
+
load_from_sources(
|
359
|
+
base_config,
|
360
|
+
name: config_name,
|
361
|
+
env_prefix:,
|
362
|
+
config_path:,
|
363
|
+
**self.class.loader_options
|
364
|
+
)
|
347
365
|
|
348
366
|
if overrides
|
349
367
|
Tracing.trace!(:load) { overrides }
|
data/lib/anyway/loaders/ejson.rb
CHANGED
@@ -11,7 +11,7 @@ module Anyway
|
|
11
11
|
|
12
12
|
self.bin_path = "ejson"
|
13
13
|
|
14
|
-
def call(name:, ejson_parser: Anyway::EJSONParser.new(EJSON.bin_path), **_options)
|
14
|
+
def call(name:, ejson_namespace: name, ejson_parser: Anyway::EJSONParser.new(EJSON.bin_path), **_options)
|
15
15
|
configs = []
|
16
16
|
|
17
17
|
rel_config_paths.each do |rel_config_path|
|
@@ -23,7 +23,11 @@ module Anyway
|
|
23
23
|
|
24
24
|
next unless secrets_hash
|
25
25
|
|
26
|
-
config_hash =
|
26
|
+
config_hash = if ejson_namespace
|
27
|
+
secrets_hash[ejson_namespace]
|
28
|
+
else
|
29
|
+
secrets_hash.except("_public_key")
|
30
|
+
end
|
27
31
|
|
28
32
|
next unless config_hash.is_a?(Hash)
|
29
33
|
|
@@ -11,9 +11,10 @@ module Anyway
|
|
11
11
|
class Settings
|
12
12
|
class << self
|
13
13
|
attr_reader :autoload_static_config_path, :autoloader
|
14
|
+
attr_writer :autoload_via_zeitwerk
|
14
15
|
|
15
|
-
|
16
|
-
|
16
|
+
def autoload_static_config_path=(val)
|
17
|
+
if autoload_via_zeitwerk
|
17
18
|
raise "Cannot setup autoloader after application has been initialized" if ::Rails.application.initialized?
|
18
19
|
|
19
20
|
return unless ::Rails.root.join(val).exist?
|
@@ -28,18 +29,16 @@ module Anyway
|
|
28
29
|
# and Rails 7 https://github.com/rails/rails/blob/5462fbd5de1900c1b1ce1c9dc11c1a2d8cdcd809/railties/lib/rails/autoloaders.rb#L15
|
29
30
|
@autoloader = Zeitwerk::Loader.new.tap do |loader|
|
30
31
|
loader.tag = "anyway.config"
|
31
|
-
|
32
|
+
|
33
|
+
if defined?(ActiveSupport::Dependencies::ZeitwerkIntegration::Inflector)
|
34
|
+
loader.inflector = ActiveSupport::Dependencies::ZeitwerkIntegration::Inflector
|
35
|
+
elsif defined?(::Rails::Autoloaders::Inflector)
|
36
|
+
loader.inflector = ::Rails::Autoloaders::Inflector
|
37
|
+
end
|
32
38
|
loader.push_dir(::Rails.root.join(val))
|
33
39
|
loader.setup
|
34
40
|
end
|
35
|
-
|
36
|
-
|
37
|
-
def cleanup_autoload_paths
|
38
|
-
return unless autoload_static_config_path
|
39
|
-
ActiveSupport::Dependencies.autoload_paths.delete(::Rails.root.join(autoload_static_config_path).to_s)
|
40
|
-
end
|
41
|
-
else
|
42
|
-
def autoload_static_config_path=(val)
|
41
|
+
else
|
43
42
|
if autoload_static_config_path
|
44
43
|
old_path = ::Rails.root.join(autoload_static_config_path).to_s
|
45
44
|
ActiveSupport::Dependencies.autoload_paths.delete(old_path)
|
@@ -51,10 +50,19 @@ module Anyway
|
|
51
50
|
ActiveSupport::Dependencies.autoload_paths << new_path
|
52
51
|
::Rails.application.config.eager_load_paths << new_path
|
53
52
|
end
|
53
|
+
end
|
54
54
|
|
55
|
-
|
56
|
-
|
57
|
-
|
55
|
+
def cleanup_autoload_paths
|
56
|
+
return unless autoload_via_zeitwerk
|
57
|
+
|
58
|
+
return unless autoload_static_config_path
|
59
|
+
ActiveSupport::Dependencies.autoload_paths.delete(::Rails.root.join(autoload_static_config_path).to_s)
|
60
|
+
end
|
61
|
+
|
62
|
+
def autoload_via_zeitwerk
|
63
|
+
return @autoload_via_zeitwerk if instance_variable_defined?(:@autoload_via_zeitwerk)
|
64
|
+
|
65
|
+
@autoload_via_zeitwerk = defined?(::Zeitwerk)
|
58
66
|
end
|
59
67
|
|
60
68
|
def current_environment
|
data/lib/anyway/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: anyway_config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Dementyev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04
|
11
|
+
date: 2023-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-next-core
|