app-configs 0.1.4 → 0.1.5
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/lib/app/config.rb +15 -2
- data/lib/app/config/base.rb +3 -17
- data/lib/app/config/deeply.rb +141 -136
- data/lib/app/config/json.rb +9 -6
- data/lib/app/config/ruby.rb +14 -7
- data/lib/app/config/version.rb +1 -1
- data/lib/app/config/yaml.rb +14 -7
- 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: 1604af5697161e0aee809f766c8925509481a4f54ed767986739dcdaea6dc906
|
|
4
|
+
data.tar.gz: 66ae81383a077848a80c9ea8241611408dbda5cb5eb2eaf43e30f1df44dbcc8a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2c9e4056085ab2ed012e8e92c202a3a601083148b6deb19f6ae940103024b606edb109087f0d6064b19ad5eeec26013d936ceee14b282cdfab4e1dc390a73bf2
|
|
7
|
+
data.tar.gz: 4f61dd7411ad7f0dba986cd05fdb2c3aad58cf5deeef38f019e94a8e80558e9f6a4d8dcef4af03770cd9409c59c6ea9182b9fef02011862446e5ee7edd0ce269
|
data/lib/app/config.rb
CHANGED
|
@@ -1,13 +1,26 @@
|
|
|
1
1
|
require "app/config/version"
|
|
2
2
|
require "app/config/base"
|
|
3
|
-
require "app/config/deeply"
|
|
4
3
|
|
|
5
4
|
module App
|
|
6
5
|
module Config
|
|
7
6
|
class Error < StandardError; end
|
|
8
7
|
|
|
8
|
+
DEFAULT_PATH = "$ROOT/config/defaults:$ROOT/config:$ROOT/var"
|
|
9
|
+
|
|
9
10
|
class << self
|
|
10
|
-
|
|
11
|
+
def new( *args, **opts )
|
|
12
|
+
type = args.shift || :YAML
|
|
13
|
+
case type.to_sym
|
|
14
|
+
when :RUBY
|
|
15
|
+
App::Config::RUBY.new( **opts )
|
|
16
|
+
when :YAML
|
|
17
|
+
App::Config::YAML.new( **opts )
|
|
18
|
+
when :JSON
|
|
19
|
+
App::Config::JSON.new( **opts )
|
|
20
|
+
else
|
|
21
|
+
raise App::Config::Error, "unknown type: #{type}"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
11
24
|
end
|
|
12
25
|
|
|
13
26
|
autoload :RUBY, "app/config/ruby"
|
data/lib/app/config/base.rb
CHANGED
|
@@ -2,26 +2,12 @@
|
|
|
2
2
|
module App
|
|
3
3
|
module Config
|
|
4
4
|
|
|
5
|
-
class Error < StandardError; end
|
|
6
|
-
|
|
7
|
-
DEFAULT_PATH = "$ROOT/config/defaults:$ROOT/config:$ROOT/var"
|
|
8
|
-
|
|
9
5
|
module Base
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
case type.to_sym
|
|
14
|
-
when :RUBY
|
|
15
|
-
App::Config::RUBY.new( **opts )
|
|
16
|
-
when :YAML
|
|
17
|
-
App::Config::YAML.new( **opts )
|
|
18
|
-
when :JSON
|
|
19
|
-
App::Config::JSON.new( **opts )
|
|
20
|
-
else
|
|
21
|
-
raise App::Config::Error, "unknown type: #{type}"
|
|
6
|
+
def initialize
|
|
7
|
+
self.default_proc = proc do |hash, key|
|
|
8
|
+
hash[key] = {}
|
|
22
9
|
end
|
|
23
10
|
end
|
|
24
|
-
|
|
25
11
|
end
|
|
26
12
|
|
|
27
13
|
end
|
data/lib/app/config/deeply.rb
CHANGED
|
@@ -1,191 +1,196 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
|
|
2
|
-
|
|
3
|
+
module Deeply
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
## deeply_symbolize_keys
|
|
6
|
+
|
|
7
|
+
refine Hash do
|
|
8
|
+
def deeply_symbolize_keys!
|
|
9
|
+
temp = self.deeply_symbolize_keys
|
|
10
|
+
self.clear
|
|
11
|
+
self.merge!( temp )
|
|
12
|
+
end
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
def deeply_symbolize_keys
|
|
15
|
+
self.each_with_object({}) do |(key, obj), hash|
|
|
16
|
+
k = key.to_s.to_sym
|
|
17
|
+
case obj
|
|
18
|
+
when Array, Hash
|
|
19
|
+
hash[k] = obj.deeply_symbolize_keys
|
|
20
|
+
else
|
|
21
|
+
hash[k] = obj
|
|
22
|
+
end
|
|
19
23
|
end
|
|
20
24
|
end
|
|
21
25
|
end
|
|
22
|
-
end
|
|
23
26
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
refine Array do
|
|
28
|
+
def deeply_symbolize_keys!
|
|
29
|
+
temp = self.deeply_symbolize_keys
|
|
30
|
+
self.clear
|
|
31
|
+
self.push( *temp )
|
|
32
|
+
end
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
def deeply_symbolize_keys
|
|
35
|
+
self.map do |obj|
|
|
36
|
+
case obj
|
|
37
|
+
when Array, Hash
|
|
38
|
+
obj.deeply_symbolize_keys
|
|
39
|
+
else
|
|
40
|
+
obj.dup
|
|
41
|
+
end
|
|
38
42
|
end
|
|
39
43
|
end
|
|
40
44
|
end
|
|
41
|
-
end
|
|
42
45
|
|
|
43
46
|
|
|
44
|
-
## deeply_stringify_keys
|
|
47
|
+
## deeply_stringify_keys
|
|
45
48
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
refine Hash do
|
|
50
|
+
def deeply_stringify_keys!
|
|
51
|
+
temp = self.deeply_stringify_keys
|
|
52
|
+
self.clear
|
|
53
|
+
self.merge!( temp )
|
|
54
|
+
end
|
|
52
55
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
56
|
+
def deeply_stringify_keys
|
|
57
|
+
self.each_with_object({}) do |(key, obj), hash|
|
|
58
|
+
k = key.to_s
|
|
59
|
+
case obj
|
|
60
|
+
when Array, Hash
|
|
61
|
+
hash[k] = obj.deeply_stringify_keys
|
|
62
|
+
else
|
|
63
|
+
hash[k] = obj
|
|
64
|
+
end
|
|
61
65
|
end
|
|
62
66
|
end
|
|
63
67
|
end
|
|
64
|
-
end
|
|
65
68
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
refine Array do
|
|
70
|
+
def deeply_stringify_keys!
|
|
71
|
+
temp = self.deeply_stringify_keys
|
|
72
|
+
self.clear
|
|
73
|
+
self.push( *temp )
|
|
74
|
+
end
|
|
72
75
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
def deeply_stringify_keys
|
|
77
|
+
self.map do |obj|
|
|
78
|
+
case obj
|
|
79
|
+
when Array, Hash
|
|
80
|
+
obj.deeply_stringify_keys
|
|
81
|
+
else
|
|
82
|
+
obj.dup
|
|
83
|
+
end
|
|
80
84
|
end
|
|
81
85
|
end
|
|
82
86
|
end
|
|
83
|
-
end
|
|
84
87
|
|
|
85
88
|
|
|
86
|
-
## deeply_merge
|
|
89
|
+
## deeply_merge
|
|
87
90
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
+
refine Hash do
|
|
92
|
+
def deeply_merge( hash )
|
|
93
|
+
raise ArgumentError( "type invalid. : %s" % hash ) unless hash.is_a? Hash
|
|
91
94
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
95
|
+
temp = self.deeply_dup
|
|
96
|
+
temp.deeply_merge!( hash )
|
|
97
|
+
temp
|
|
98
|
+
end
|
|
96
99
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
100
|
+
def deeply_merge!( hash )
|
|
101
|
+
raise ArgumentError( "type invalid. : %s" % hash ) unless hash.is_a? Hash
|
|
102
|
+
|
|
103
|
+
hash.each do |key, obj|
|
|
104
|
+
case obj
|
|
105
|
+
when NilClass
|
|
106
|
+
self[key] = nil
|
|
107
|
+
when Hash
|
|
108
|
+
self[key] = {} if self[key].nil?
|
|
109
|
+
self[key].deeply_merge!(obj)
|
|
110
|
+
else
|
|
111
|
+
self[key] = obj.dup
|
|
112
|
+
end
|
|
109
113
|
end
|
|
110
114
|
end
|
|
111
115
|
end
|
|
112
|
-
end
|
|
113
116
|
|
|
114
117
|
|
|
115
|
-
## deeply_map
|
|
118
|
+
## deeply_map
|
|
116
119
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
120
|
+
refine Hash do
|
|
121
|
+
def deeply_map( &block )
|
|
122
|
+
temp = self.deeply_dup
|
|
123
|
+
temp.deeply_map!( &block )
|
|
124
|
+
temp
|
|
125
|
+
end
|
|
123
126
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
127
|
+
def deeply_map!( &block )
|
|
128
|
+
self.each do |key, obj|
|
|
129
|
+
case obj
|
|
130
|
+
when NilClass
|
|
131
|
+
self[key] = nil
|
|
132
|
+
when Array, Hash
|
|
133
|
+
self[key].deeply_map!( &block )
|
|
134
|
+
else
|
|
135
|
+
self[key] = block.call( obj )
|
|
136
|
+
end
|
|
133
137
|
end
|
|
134
138
|
end
|
|
135
139
|
end
|
|
136
|
-
end
|
|
137
140
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
141
|
+
refine Array do
|
|
142
|
+
def deeply_map( &block )
|
|
143
|
+
temp = self.deeply_dup
|
|
144
|
+
temp.deeply_map!( &block )
|
|
145
|
+
temp
|
|
146
|
+
end
|
|
144
147
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
148
|
+
def deeply_map!( &block )
|
|
149
|
+
self.map! do |obj|
|
|
150
|
+
case obj
|
|
151
|
+
when NilClass
|
|
152
|
+
nil
|
|
153
|
+
when Array, Hash
|
|
154
|
+
obj.deeply_map!( &block )
|
|
155
|
+
else
|
|
156
|
+
block.call( obj )
|
|
157
|
+
end
|
|
154
158
|
end
|
|
155
159
|
end
|
|
156
160
|
end
|
|
157
|
-
end
|
|
158
161
|
|
|
159
162
|
|
|
160
|
-
## deeply_dup
|
|
163
|
+
## deeply_dup
|
|
161
164
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
165
|
+
refine Hash do
|
|
166
|
+
def deeply_dup
|
|
167
|
+
self.each_with_object({}) do |(key, obj), hash|
|
|
168
|
+
case obj
|
|
169
|
+
when NilClass
|
|
170
|
+
hash[key] = nil
|
|
171
|
+
when Array, Hash
|
|
172
|
+
hash[key] = obj.deeply_dup
|
|
173
|
+
else
|
|
174
|
+
hash[key] = obj.dup
|
|
175
|
+
end
|
|
172
176
|
end
|
|
173
177
|
end
|
|
174
178
|
end
|
|
175
|
-
end
|
|
176
179
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
180
|
+
refine Array do
|
|
181
|
+
def deeply_dup
|
|
182
|
+
self.map do |obj|
|
|
183
|
+
case obj
|
|
184
|
+
when NilClass
|
|
185
|
+
nil
|
|
186
|
+
when Array, Hash
|
|
187
|
+
obj.deeply_dup
|
|
188
|
+
else
|
|
189
|
+
obj.dup
|
|
190
|
+
end
|
|
187
191
|
end
|
|
188
192
|
end
|
|
189
193
|
end
|
|
194
|
+
|
|
190
195
|
end
|
|
191
196
|
|
data/lib/app/config/json.rb
CHANGED
|
@@ -3,19 +3,22 @@ require "erb"
|
|
|
3
3
|
require "json"
|
|
4
4
|
require "time"
|
|
5
5
|
require "date"
|
|
6
|
+
require_relative "deeply"
|
|
6
7
|
|
|
7
8
|
module App
|
|
8
9
|
module Config
|
|
10
|
+
using Deeply
|
|
9
11
|
|
|
10
12
|
class JSON < ::Hash
|
|
13
|
+
include App::Config::Base
|
|
14
|
+
|
|
11
15
|
DEFAULT_MASK = "*.json"
|
|
12
16
|
DEFAULT_SUFFIX = ".json"
|
|
17
|
+
DEFAULT_ENCODE = { allow_nan: true }
|
|
18
|
+
DEFAULT_DECODE = { allow_nan: true }
|
|
13
19
|
|
|
14
20
|
def initialize( **opts )
|
|
15
|
-
super
|
|
16
|
-
self.default_proc = proc do |hash, key|
|
|
17
|
-
hash[key] = {}
|
|
18
|
-
end
|
|
21
|
+
super()
|
|
19
22
|
reload( **opts )
|
|
20
23
|
end
|
|
21
24
|
|
|
@@ -30,8 +33,8 @@ module App
|
|
|
30
33
|
@vardir = @paths.last
|
|
31
34
|
Dir.mkdir( @vardir ) unless ::Dir.exist?( @vardir )
|
|
32
35
|
|
|
33
|
-
@encode =
|
|
34
|
-
@decode =
|
|
36
|
+
@encode = DEFAULT_ENCODE.merge( encode || {} )
|
|
37
|
+
@decode = DEFAULT_DECODE.merge( decode || {} )
|
|
35
38
|
|
|
36
39
|
load_overlay( DEFAULT_MASK )
|
|
37
40
|
end
|
data/lib/app/config/ruby.rb
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
require "fileutils"
|
|
2
2
|
require "pp"
|
|
3
|
+
require_relative "deeply"
|
|
3
4
|
|
|
4
5
|
module App
|
|
5
6
|
module Config
|
|
7
|
+
using Deeply
|
|
6
8
|
|
|
7
9
|
class RUBY < ::Hash
|
|
10
|
+
include App::Config::Base
|
|
11
|
+
|
|
8
12
|
DEFAULT_MASK = "*.rb"
|
|
9
13
|
DEFAULT_SUFFIX = ".rb"
|
|
14
|
+
DEFAULT_ENCODE = {}
|
|
15
|
+
DEFAULT_DECODE = {}
|
|
10
16
|
|
|
11
17
|
def initialize( **opts )
|
|
12
|
-
super
|
|
13
|
-
self.default_proc = proc do |hash, key|
|
|
14
|
-
hash[key] = {}
|
|
15
|
-
end
|
|
18
|
+
super()
|
|
16
19
|
reload( **opts )
|
|
17
20
|
end
|
|
18
21
|
|
|
@@ -27,8 +30,8 @@ module App
|
|
|
27
30
|
@vardir = @paths.last
|
|
28
31
|
Dir.mkdir( @vardir ) unless ::Dir.exist?( @vardir )
|
|
29
32
|
|
|
30
|
-
@encode =
|
|
31
|
-
@decode =
|
|
33
|
+
@encode = DEFAULT_ENCODE.merge( encode || {} )
|
|
34
|
+
@decode = DEFAULT_DECODE.merge( decode || {} )
|
|
32
35
|
|
|
33
36
|
load_overlay( DEFAULT_MASK )
|
|
34
37
|
end
|
|
@@ -65,10 +68,14 @@ module App
|
|
|
65
68
|
pathname = savepathname(section)
|
|
66
69
|
hash = { section => self[section] }.deeply_stringify_keys
|
|
67
70
|
::File.open( pathname, "w" ) do |file|
|
|
68
|
-
file.puts( hash
|
|
71
|
+
file.puts( pretty_text( hash ) )
|
|
69
72
|
end
|
|
70
73
|
end
|
|
71
74
|
|
|
75
|
+
def pretty_text( hash )
|
|
76
|
+
hash.pretty_inspect
|
|
77
|
+
end
|
|
78
|
+
|
|
72
79
|
# remove and load configuration.
|
|
73
80
|
def reset( section )
|
|
74
81
|
raise ArgumentError, "'#{ section }' is not String." unless String === section
|
data/lib/app/config/version.rb
CHANGED
data/lib/app/config/yaml.rb
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
require "fileutils"
|
|
2
2
|
require "erb"
|
|
3
3
|
require "yaml"
|
|
4
|
+
require_relative "deeply"
|
|
4
5
|
|
|
5
6
|
module App
|
|
6
7
|
module Config
|
|
8
|
+
using Deeply
|
|
7
9
|
|
|
8
10
|
class YAML < ::Hash
|
|
11
|
+
include App::Config::Base
|
|
12
|
+
|
|
9
13
|
DEFAULT_MASK = "*.{yml,yaml}"
|
|
10
14
|
DEFAULT_SUFFIX = ".yaml"
|
|
15
|
+
DEFAULT_ENCODE = {}
|
|
16
|
+
DEFAULT_DECODE = {}
|
|
11
17
|
|
|
12
18
|
def initialize( **opts )
|
|
13
|
-
super
|
|
14
|
-
self.default_proc = proc do |hash, key|
|
|
15
|
-
hash[key] = {}
|
|
16
|
-
end
|
|
19
|
+
super()
|
|
17
20
|
reload( **opts )
|
|
18
21
|
end
|
|
19
22
|
|
|
@@ -28,8 +31,8 @@ module App
|
|
|
28
31
|
@vardir = @paths.last
|
|
29
32
|
Dir.mkdir( @vardir ) unless ::Dir.exist?( @vardir )
|
|
30
33
|
|
|
31
|
-
@encode =
|
|
32
|
-
@decode =
|
|
34
|
+
@encode = DEFAULT_ENCODE.merge( encode || {} )
|
|
35
|
+
@decode = DEFAULT_DECODE.merge( decode || {} )
|
|
33
36
|
|
|
34
37
|
load_overlay( DEFAULT_MASK )
|
|
35
38
|
end
|
|
@@ -67,10 +70,14 @@ module App
|
|
|
67
70
|
pathname = savepathname(section)
|
|
68
71
|
hash = { section => self[section] }.deeply_stringify_keys
|
|
69
72
|
::File.open( pathname, "w" ) do |file|
|
|
70
|
-
file.puts(
|
|
73
|
+
file.puts( pretty_text( hash ) )
|
|
71
74
|
end
|
|
72
75
|
end
|
|
73
76
|
|
|
77
|
+
def pretty_text( hash )
|
|
78
|
+
::YAML.dump( hash, **@encode )
|
|
79
|
+
end
|
|
80
|
+
|
|
74
81
|
# remove and load configuration.
|
|
75
82
|
def reset( section )
|
|
76
83
|
raise ArgumentError, "'#{ section }' is not String." unless String === section
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: app-configs
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- arimay
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-
|
|
11
|
+
date: 2021-02-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|