runger_config 4.0.0 → 5.0.0
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/lib/generators/runger/app_config/app_config_generator.rb +6 -10
- data/lib/generators/runger/config/config_generator.rb +44 -41
- data/lib/generators/runger/install/install_generator.rb +35 -37
- data/lib/runger/auto_cast.rb +3 -3
- data/lib/runger/config.rb +114 -94
- data/lib/runger/dynamic_config.rb +21 -23
- data/lib/runger/ejson_parser.rb +24 -24
- data/lib/runger/env.rb +50 -52
- data/lib/runger/ext/deep_dup.rb +33 -36
- data/lib/runger/ext/deep_freeze.rb +28 -32
- data/lib/runger/ext/flatten_names.rb +23 -27
- data/lib/runger/ext/hash.rb +26 -29
- data/lib/runger/ext/string_constantize.rb +12 -15
- data/lib/runger/loaders/base.rb +11 -15
- data/lib/runger/loaders/doppler.rb +38 -42
- data/lib/runger/loaders/ejson.rb +65 -63
- data/lib/runger/loaders/env.rb +6 -10
- data/lib/runger/loaders/yaml.rb +69 -66
- data/lib/runger/loaders.rb +69 -71
- data/lib/runger/option_parser_builder.rb +16 -18
- data/lib/runger/optparse_config.rb +11 -10
- data/lib/runger/rails/autoload.rb +24 -26
- data/lib/runger/rails/config.rb +13 -17
- data/lib/runger/rails/loaders/credentials.rb +53 -57
- data/lib/runger/rails/loaders/secrets.rb +21 -25
- data/lib/runger/rails/loaders/yaml.rb +1 -6
- data/lib/runger/rails/loaders.rb +3 -3
- data/lib/runger/rails/settings.rb +49 -49
- data/lib/runger/rails.rb +9 -11
- data/lib/runger/railtie.rb +3 -2
- data/lib/runger/rbs.rb +29 -29
- data/lib/runger/settings.rb +82 -84
- data/lib/runger/testing/helpers.rb +26 -28
- data/lib/runger/testing.rb +2 -2
- data/lib/runger/tracing.rb +143 -136
- data/lib/runger/type_casting.rb +16 -11
- data/lib/runger/utils/which.rb +10 -12
- data/lib/runger/version.rb +1 -1
- data/lib/runger.rb +1 -1
- data/lib/runger_config.rb +34 -27
- metadata +18 -18
data/lib/runger/type_casting.rb
CHANGED
@@ -15,7 +15,8 @@ module Runger
|
|
15
15
|
|
16
16
|
def accept(name_or_object, &block)
|
17
17
|
if !block && !name_or_object.respond_to?(:call)
|
18
|
-
raise
|
18
|
+
raise(ArgumentError,
|
19
|
+
'Please, provide a type casting block or an object implementing #call(val) method')
|
19
20
|
end
|
20
21
|
|
21
22
|
registry[name_or_object] = block || name_or_object
|
@@ -26,9 +27,13 @@ module Runger
|
|
26
27
|
|
27
28
|
caster =
|
28
29
|
if type_id.is_a?(Symbol) || type_id.nil?
|
29
|
-
registry.fetch(type_id) { raise
|
30
|
+
registry.fetch(type_id) { raise(ArgumentError, "Unknown type: #{type_id}") }
|
30
31
|
else
|
31
|
-
|
32
|
+
unless type_id.respond_to?(:call)
|
33
|
+
raise(ArgumentError,
|
34
|
+
"Type must implement #call(val): #{type_id}")
|
35
|
+
end
|
36
|
+
|
32
37
|
type_id
|
33
38
|
end
|
34
39
|
|
@@ -58,7 +63,7 @@ module Runger
|
|
58
63
|
obj.accept(:float, &:to_f)
|
59
64
|
|
60
65
|
obj.accept(:date) do
|
61
|
-
require
|
66
|
+
require 'date' unless defined?(::Date)
|
62
67
|
|
63
68
|
next _1 if _1.is_a?(::Date)
|
64
69
|
|
@@ -68,7 +73,7 @@ module Runger
|
|
68
73
|
end
|
69
74
|
|
70
75
|
obj.accept(:datetime) do
|
71
|
-
require
|
76
|
+
require 'date' unless defined?(::Date)
|
72
77
|
|
73
78
|
next _1 if _1.is_a?(::DateTime)
|
74
79
|
|
@@ -78,7 +83,7 @@ module Runger
|
|
78
83
|
end
|
79
84
|
|
80
85
|
obj.accept(:uri) do
|
81
|
-
require
|
86
|
+
require 'uri' unless defined?(::URI)
|
82
87
|
|
83
88
|
next _1 if _1.is_a?(::URI)
|
84
89
|
|
@@ -90,8 +95,8 @@ module Runger
|
|
90
95
|
end
|
91
96
|
end
|
92
97
|
|
93
|
-
unless
|
94
|
-
require
|
98
|
+
unless ''.respond_to?(:safe_constantize)
|
99
|
+
require 'runger/ext/string_constantize'
|
95
100
|
using Runger::Ext::StringConstantize
|
96
101
|
end
|
97
102
|
|
@@ -115,16 +120,16 @@ module Runger
|
|
115
120
|
|
116
121
|
case caster_config
|
117
122
|
in Hash[array:, type:, **nil]
|
118
|
-
registry.deserialize(val, type, array:
|
123
|
+
registry.deserialize(val, type, array:)
|
119
124
|
in Hash[config: subconfig]
|
120
125
|
subconfig = subconfig.safe_constantize if subconfig.is_a?(::String)
|
121
|
-
raise
|
126
|
+
raise(ArgumentError, "Config is not found: #{subconfig}") unless subconfig
|
122
127
|
|
123
128
|
subconfig.new(val)
|
124
129
|
in Hash
|
125
130
|
return val unless val.is_a?(Hash)
|
126
131
|
|
127
|
-
caster_config.
|
132
|
+
caster_config.each_key do |k|
|
128
133
|
ks = k.to_s
|
129
134
|
next unless val.key?(ks)
|
130
135
|
|
data/lib/runger/utils/which.rb
CHANGED
@@ -1,18 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module Runger
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
return exe if File.executable?(exe) && !File.directory?(exe)
|
13
|
-
end
|
3
|
+
module Runger::Utils
|
4
|
+
# Cross-platform solution
|
5
|
+
# taken from https://stackoverflow.com/a/5471032
|
6
|
+
def self.which(cmd)
|
7
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
8
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
9
|
+
exts.each do |ext|
|
10
|
+
exe = File.join(path, "#{cmd}#{ext}")
|
11
|
+
return exe if File.executable?(exe) && !File.directory?(exe)
|
14
12
|
end
|
15
|
-
nil
|
16
13
|
end
|
14
|
+
nil
|
17
15
|
end
|
18
16
|
end
|
data/lib/runger/version.rb
CHANGED
data/lib/runger.rb
CHANGED
data/lib/runger_config.rb
CHANGED
@@ -1,23 +1,30 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
|
17
|
-
require
|
18
|
-
require
|
19
|
-
|
20
|
-
require
|
3
|
+
require 'runger/version'
|
4
|
+
|
5
|
+
module Runger ; end
|
6
|
+
module Runger::Ext ; end
|
7
|
+
module Runger::Utils ; end
|
8
|
+
module Runger::Tracing ; end
|
9
|
+
module Runger::Loaders ; end
|
10
|
+
module Runger::Testing ; end
|
11
|
+
|
12
|
+
require 'runger/ext/deep_dup'
|
13
|
+
require 'runger/ext/deep_freeze'
|
14
|
+
require 'runger/ext/flatten_names'
|
15
|
+
require 'runger/ext/hash'
|
16
|
+
|
17
|
+
require 'runger/utils/deep_merge'
|
18
|
+
require 'runger/utils/which'
|
19
|
+
|
20
|
+
require 'runger/auto_cast'
|
21
|
+
require 'runger/config'
|
22
|
+
require 'runger/env'
|
23
|
+
require 'runger/loaders'
|
24
|
+
require 'runger/rbs'
|
25
|
+
require 'runger/settings'
|
26
|
+
require 'runger/tracing'
|
27
|
+
require 'runger/type_casting'
|
21
28
|
|
22
29
|
module Runger # :nodoc:
|
23
30
|
class << self
|
@@ -31,19 +38,19 @@ module Runger # :nodoc:
|
|
31
38
|
end
|
32
39
|
|
33
40
|
# Configure default loaders
|
34
|
-
loaders.append
|
35
|
-
loaders.append
|
36
|
-
loaders.append
|
41
|
+
loaders.append(:yml, Loaders::YAML)
|
42
|
+
loaders.append(:ejson, Loaders::EJSON) if Utils.which('ejson')
|
43
|
+
loaders.append(:env, Loaders::Env)
|
37
44
|
|
38
|
-
if ENV.key?(
|
39
|
-
loaders.append
|
45
|
+
if ENV.key?('DOPPLER_TOKEN') && ENV['RUNGER_CONFIG_DISABLE_DOPPLER'] != 'true'
|
46
|
+
loaders.append(:doppler, Loaders::Doppler)
|
40
47
|
end
|
41
48
|
end
|
42
49
|
|
43
|
-
if defined?(
|
44
|
-
require
|
50
|
+
if defined?(Rails::VERSION)
|
51
|
+
require 'runger/rails'
|
45
52
|
else
|
46
|
-
require
|
53
|
+
require 'runger/rails/autoload'
|
47
54
|
end
|
48
55
|
|
49
|
-
require
|
56
|
+
require 'runger/testing' if ENV['RACK_ENV'] == 'test' || ENV['RAILS_ENV'] == 'test'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: runger_config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Runger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 1.1.3
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: ejson
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.3.1
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.3.1
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,20 +94,6 @@ dependencies:
|
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '3.18'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: ejson
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 1.3.1
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 1.3.1
|
97
97
|
description: "\n Configuration DSL for Ruby libraries and applications.\n Allows
|
98
98
|
you to easily follow the twelve-factor application principles (https://12factor.net/config).\n
|
99
99
|
\ "
|
@@ -174,14 +174,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
174
174
|
requirements:
|
175
175
|
- - ">="
|
176
176
|
- !ruby/object:Gem::Version
|
177
|
-
version: 3.
|
177
|
+
version: 3.3.0
|
178
178
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
179
179
|
requirements:
|
180
180
|
- - ">="
|
181
181
|
- !ruby/object:Gem::Version
|
182
182
|
version: '0'
|
183
183
|
requirements: []
|
184
|
-
rubygems_version: 3.
|
184
|
+
rubygems_version: 3.5.3
|
185
185
|
signing_key:
|
186
186
|
specification_version: 4
|
187
187
|
summary: Configuration DSL for Ruby libraries and applications
|