anyway_config 2.6.2 → 2.6.3
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 +4 -0
- data/README.md +6 -0
- data/lib/.rbnext/2.7/anyway/loaders/yaml.rb +8 -2
- data/lib/.rbnext/3.0/anyway/loaders/yaml.rb +90 -0
- data/lib/anyway/loaders/yaml.rb +8 -2
- data/lib/anyway/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9272986ff4c206ffad5c0877ca80e7506568f37ec5bce4d2d21de72c4892780e
|
4
|
+
data.tar.gz: b2437f38022bb345cee5d4d92f482ff3ca0e4789420c68a8f8c3121b27e92403
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2081d401c0f624420ee215c3d5941e17c2e7a0180e8e803830442ed284e5316631be8f458f903a61c6c234e94d05c1a4fb9c3e6f52f9e03435cea4db466806d
|
7
|
+
data.tar.gz: 36cff9c0ad7a1c0f6c5a5ff9b601f31dd559936fdb6edcbd50457f3c65a8337e5dc68c185e7888a46e7ae89909aab9d2aa3cc3ef7fe1949d6d21057bcc731584
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
## master
|
4
4
|
|
5
|
+
## 2.6.3 (2024-02-06)
|
6
|
+
|
7
|
+
- Add `permitted_classes` configuration for YAML loaders. ([@palkan][])
|
8
|
+
|
5
9
|
## 2.6.2 (2024-01-08)
|
6
10
|
|
7
11
|
- Fix Ruby 3.3.0 compatibility issues (caused by [Ruby bug](https://bugs.ruby-lang.org/issues/20090)) ([@palkan][])
|
data/README.md
CHANGED
@@ -370,6 +370,12 @@ development:
|
|
370
370
|
|
371
371
|
**NOTE:** You can override the environment name for configuration files via the `ANYWAY_ENV` environment variable or by setting it explicitly in the code: `Anyway::Settings.current_environment = "some_other_env"`.
|
372
372
|
|
373
|
+
You can also configure additional Ruby classes that you want to deserialized from YAML (`permitted_classes` option). For example:
|
374
|
+
|
375
|
+
```ruby
|
376
|
+
Anyway::Loaders::YAML.permitted_classes << Date
|
377
|
+
```
|
378
|
+
|
373
379
|
### Multi-env configuration
|
374
380
|
|
375
381
|
_⚡️ This feature will be turned on by default in the future releases. You can turn it on now via `config.anyway_config.future.use :unwrap_known_environments`._
|
@@ -9,6 +9,12 @@ using Anyway::Ext::Hash
|
|
9
9
|
module Anyway
|
10
10
|
module Loaders
|
11
11
|
class YAML < Base
|
12
|
+
@@permitted_classes = []
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def permitted_classes ; @@permitted_classes; end
|
16
|
+
end
|
17
|
+
|
12
18
|
def call(config_path:, **_options)
|
13
19
|
rel_config_path = relative_config_path(config_path).to_s
|
14
20
|
base_config = trace!(:yml, path: rel_config_path) do
|
@@ -53,9 +59,9 @@ module Anyway
|
|
53
59
|
# the interface when no config file is present.
|
54
60
|
begin
|
55
61
|
if defined?(ERB)
|
56
|
-
::YAML.load(ERB.new(File.read(path)).result, aliases: true) || {}
|
62
|
+
::YAML.load(ERB.new(File.read(path)).result, aliases: true, permitted_classes: self.class.permitted_classes) || {}
|
57
63
|
else
|
58
|
-
::YAML.load_file(path, aliases: true) || {}
|
64
|
+
::YAML.load_file(path, aliases: true, permitted_classes: self.class.permitted_classes) || {}
|
59
65
|
end
|
60
66
|
rescue ArgumentError
|
61
67
|
if defined?(ERB)
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pathname"
|
4
|
+
require "anyway/ext/hash"
|
5
|
+
|
6
|
+
using RubyNext
|
7
|
+
using Anyway::Ext::Hash
|
8
|
+
|
9
|
+
module Anyway
|
10
|
+
module Loaders
|
11
|
+
class YAML < Base
|
12
|
+
@@permitted_classes = []
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def permitted_classes ; @@permitted_classes; end
|
16
|
+
end
|
17
|
+
|
18
|
+
def call(config_path:, **_options)
|
19
|
+
rel_config_path = relative_config_path(config_path).to_s
|
20
|
+
base_config = trace!(:yml, path: rel_config_path) do
|
21
|
+
config = load_base_yml(config_path)
|
22
|
+
environmental?(config) ? config_with_env(config) : config
|
23
|
+
end
|
24
|
+
|
25
|
+
return base_config unless use_local?
|
26
|
+
|
27
|
+
local_path = local_config_path(config_path)
|
28
|
+
local_config = trace!(:yml, path: relative_config_path(local_path).to_s) { load_local_yml(local_path) }
|
29
|
+
Utils.deep_merge!(base_config, local_config)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def environmental?(parsed_yml)
|
35
|
+
# strange, but still possible
|
36
|
+
return true if Settings.default_environmental_key? && parsed_yml.key?(Settings.default_environmental_key)
|
37
|
+
# possible
|
38
|
+
return true if !Settings.future.unwrap_known_environments && Settings.current_environment
|
39
|
+
# for other environments
|
40
|
+
return true if Settings.known_environments&.any? { parsed_yml.key?(_1) }
|
41
|
+
# preferred
|
42
|
+
parsed_yml.key?(Settings.current_environment)
|
43
|
+
end
|
44
|
+
|
45
|
+
def config_with_env(config)
|
46
|
+
env_config = config[Settings.current_environment] || {}
|
47
|
+
return env_config unless Settings.default_environmental_key?
|
48
|
+
|
49
|
+
default_config = config[Settings.default_environmental_key] || {}
|
50
|
+
Utils.deep_merge!(default_config, env_config)
|
51
|
+
end
|
52
|
+
|
53
|
+
def parse_yml(path)
|
54
|
+
return {} unless File.file?(path)
|
55
|
+
require "yaml" unless defined?(::YAML)
|
56
|
+
|
57
|
+
# By default, YAML load will return `false` when the yaml document is
|
58
|
+
# empty. When this occurs, we return an empty hash instead, to match
|
59
|
+
# the interface when no config file is present.
|
60
|
+
begin
|
61
|
+
if defined?(ERB)
|
62
|
+
::YAML.load(ERB.new(File.read(path)).result, aliases: true, permitted_classes: self.class.permitted_classes) || {}
|
63
|
+
else
|
64
|
+
::YAML.load_file(path, aliases: true, permitted_classes: self.class.permitted_classes) || {}
|
65
|
+
end
|
66
|
+
rescue ArgumentError
|
67
|
+
if defined?(ERB)
|
68
|
+
::YAML.load(ERB.new(File.read(path)).result) || {}
|
69
|
+
else
|
70
|
+
::YAML.load_file(path) || {}
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
alias_method :load_base_yml, :parse_yml
|
76
|
+
alias_method :load_local_yml, :parse_yml
|
77
|
+
|
78
|
+
def local_config_path(path)
|
79
|
+
path.sub(".yml", ".local.yml")
|
80
|
+
end
|
81
|
+
|
82
|
+
def relative_config_path(path)
|
83
|
+
Pathname.new(path).then do |path|
|
84
|
+
return path if path.relative?
|
85
|
+
path.relative_path_from(Settings.app_root)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/lib/anyway/loaders/yaml.rb
CHANGED
@@ -9,6 +9,12 @@ using Anyway::Ext::Hash
|
|
9
9
|
module Anyway
|
10
10
|
module Loaders
|
11
11
|
class YAML < Base
|
12
|
+
@@permitted_classes = []
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def permitted_classes = @@permitted_classes
|
16
|
+
end
|
17
|
+
|
12
18
|
def call(config_path:, **_options)
|
13
19
|
rel_config_path = relative_config_path(config_path).to_s
|
14
20
|
base_config = trace!(:yml, path: rel_config_path) do
|
@@ -53,9 +59,9 @@ module Anyway
|
|
53
59
|
# the interface when no config file is present.
|
54
60
|
begin
|
55
61
|
if defined?(ERB)
|
56
|
-
::YAML.load(ERB.new(File.read(path)).result, aliases: true) || {}
|
62
|
+
::YAML.load(ERB.new(File.read(path)).result, aliases: true, permitted_classes: self.class.permitted_classes) || {}
|
57
63
|
else
|
58
|
-
::YAML.load_file(path, aliases: true) || {}
|
64
|
+
::YAML.load_file(path, aliases: true, permitted_classes: self.class.permitted_classes) || {}
|
59
65
|
end
|
60
66
|
rescue ArgumentError
|
61
67
|
if defined?(ERB)
|
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.6.
|
4
|
+
version: 2.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Dementyev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-next-core
|
@@ -132,6 +132,7 @@ files:
|
|
132
132
|
- lib/.rbnext/3.0/anyway/config.rb
|
133
133
|
- lib/.rbnext/3.0/anyway/loaders.rb
|
134
134
|
- lib/.rbnext/3.0/anyway/loaders/base.rb
|
135
|
+
- lib/.rbnext/3.0/anyway/loaders/yaml.rb
|
135
136
|
- lib/.rbnext/3.0/anyway/tracing.rb
|
136
137
|
- lib/.rbnext/3.1/anyway/config.rb
|
137
138
|
- lib/.rbnext/3.1/anyway/dynamic_config.rb
|