potrubi 0.0.3 → 0.0.4
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.
- data/lib/potrubi.rb +1 -1
- data/lib/potrubi/bootstrap.rb +1 -1
- data/lib/potrubi/core.rb +3 -3
- data/lib/potrubi/dsl.rb +86 -0
- data/lib/potrubi/dsl/accessor.rb +76 -0
- data/lib/potrubi/dsl/cache_2d.rb +811 -0
- data/lib/potrubi/dsl/contract.rb +731 -0
- data/lib/potrubi/dsl/super.rb +517 -0
- data/lib/potrubi/klass/syntax/alias.rb +150 -0
- data/lib/potrubi/klass/syntax/braket.rb +115 -25
- data/lib/potrubi/klass/syntax/builder.rb +45 -0
- data/lib/potrubi/klass/syntax/method.rb +436 -0
- data/lib/potrubi/klass/syntax/mixin/name_generation.rb +85 -0
- data/lib/potrubi/klass/syntax/mixin/new_aliases.rb +76 -0
- data/lib/potrubi/klass/syntax/mixin/new_brakets.rb +89 -0
- data/lib/potrubi/klass/syntax/mixin/new_methods.rb +158 -0
- data/lib/potrubi/klass/syntax/mixin/new_snippets.rb +74 -0
- data/lib/potrubi/klass/syntax/mixin/new_statements.rb +0 -0
- data/lib/potrubi/klass/syntax/mixin/statement_management.rb +69 -0
- data/lib/potrubi/klass/syntax/mixin/synel_management.rb +168 -0
- data/lib/potrubi/klass/syntax/snippet.rb +386 -0
- data/lib/potrubi/klass/syntax/statement.rb +91 -0
- data/lib/potrubi/klass/syntax/super.rb +88 -0
- data/lib/potrubi/mixin/bootstrap_common.rb +38 -12
- data/lib/potrubi/mixin/configuration.rb +31 -3
- data/lib/potrubi/mixin/contract.rb +5 -14
- data/lib/potrubi/mixin/contract/recipes.rb +307 -0
- data/lib/potrubi/mixin/dynamic-recipes.rb +1 -11
- data/lib/potrubi/mixin/dynamic.rb +223 -115
- data/lib/potrubi/mixin/exception.rb +3 -22
- data/lib/potrubi/mixin/filesys.rb +5 -21
- data/lib/potrubi/mixin/initialize.rb +11 -6
- data/lib/potrubi/mixin/konstant.rb +14 -118
- data/lib/potrubi/mixin/logger.rb +28 -41
- data/lib/potrubi/mixin/pathandnames.rb +4 -34
- data/lib/potrubi/mixin/persistence.rb +115 -10
- data/lib/potrubi/mixin/script.rb +0 -5
- data/lib/potrubi/mixin/{text-snippets → snippet-dictionaries}/methods-text-snippets.rb +138 -49
- data/lib/potrubi/mixin/{text-snippets.rb → snippet-manager.rb} +51 -39
- data/lib/potrubi/mixin/util.rb +66 -20
- data/lib/potrubi/version.rb +1 -1
- data/test/potrubi/mixin/bootstrap_common.rb +205 -0
- data/test/potrubi/mixin/konstant.rb +216 -0
- data/test/potrubi/mixin/logger.rb +124 -0
- data/test/ts_bootstrap_mixins.rb +16 -0
- data/test/ts_core_mixins.rb +7 -0
- metadata +31 -6
- data/lib/potrubi/mixin/contract-recipes.rb +0 -226
data/lib/potrubi/mixin/logger.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
|
2
|
-
#
|
3
|
-
|
4
|
-
# logger methods
|
2
|
+
# potrubi mixin logger
|
5
3
|
|
6
4
|
require "logger"
|
7
5
|
|
@@ -36,7 +34,6 @@ module Potrubi
|
|
36
34
|
|
37
35
|
end
|
38
36
|
|
39
|
-
#=begin
|
40
37
|
def logger_enabled?(logrLevel=nil)
|
41
38
|
case logrLevel
|
42
39
|
when Fixnum
|
@@ -45,34 +42,25 @@ module Potrubi
|
|
45
42
|
nil
|
46
43
|
end
|
47
44
|
end
|
48
|
-
#=end
|
49
45
|
|
50
|
-
#=begin
|
51
46
|
def logger_fmt(*logrArgs)
|
52
47
|
logrArgs.flatten.compact.join(' ')
|
53
48
|
end
|
54
49
|
alias_method :logger_format_telltales, :logger_fmt
|
55
50
|
alias_method :potrubi_bootstrap_logger_format_telltales, :logger_fmt
|
56
|
-
#=end
|
57
51
|
|
58
|
-
#=begin
|
59
52
|
def logger_message(logEye, *logArgs, &msgBlok)
|
60
53
|
$DEBUG && logger.debug(logEye) { logger_format_telltales(*logArgs) }
|
61
54
|
end
|
62
|
-
|
63
|
-
|
64
|
-
#=begin
|
55
|
+
|
65
56
|
def logger_message_beg(logEye, *logArgs, &msgBlok)
|
66
57
|
logger_message(logEye, :BEG, *logArgs, &msgBlok)
|
67
58
|
end
|
68
|
-
|
69
|
-
#=begin
|
59
|
+
|
70
60
|
def logger_message_fin(logEye, *logArgs, &msgBlok)
|
71
61
|
logger_message(logEye, :FIN, *logArgs, &msgBlok)
|
72
62
|
end
|
73
|
-
#=end
|
74
63
|
|
75
|
-
#=begin
|
76
64
|
def logger_method_entry(logEye, *a)
|
77
65
|
logger_message(logEye, '==>', *a)
|
78
66
|
end
|
@@ -87,7 +75,6 @@ module Potrubi
|
|
87
75
|
alias_method :logger_me, :logger_method_entry
|
88
76
|
alias_method :logger_mx, :logger_method_exit
|
89
77
|
alias_method :logger_ca, :logger_method_call
|
90
|
-
#=end
|
91
78
|
|
92
79
|
alias_method :logger_ms, :logger_message
|
93
80
|
alias_method :logger_en?, :logger_enabled?
|
@@ -95,47 +82,41 @@ module Potrubi
|
|
95
82
|
alias_method :logger_beg, :logger_message_beg
|
96
83
|
alias_method :logger_fin, :logger_message_fin
|
97
84
|
|
98
|
-
#=begin
|
99
85
|
def logger_fmt0(logrArgs)
|
100
86
|
logrArgs.is_a?(Hash) || raise(ArgumentError,"logrArgs >#{logrArgs}< not hash",caller)
|
101
|
-
logrArgs.inject([]) {|s, (k,v)| s << "#{k} >#{v.class}< >#{v}<"}
|
87
|
+
logrArgs.inject([]) {|s, (k,v)| s << "#{k} >#{v.class}< >#{v.inspect}<"}
|
102
88
|
end
|
103
|
-
|
104
|
-
#=begin
|
89
|
+
|
105
90
|
def logger_fmt00(logrArgs)
|
106
91
|
logrArgs.is_a?(Hash) || raise(ArgumentError,"logrArgs >#{logrArgs}< not hash",caller)
|
107
92
|
logrArgs.inject([]) {|s, (k,v)| s << "#{k} >#{v.class}<"}
|
108
93
|
end
|
109
|
-
|
110
|
-
|
94
|
+
|
95
|
+
def logger_fmt000(logrArgs)
|
96
|
+
logrArgs.is_a?(Hash) || raise(ArgumentError,"logrArgs >#{logrArgs}< not hash",caller)
|
97
|
+
logrArgs.inject([]) {|s, (k,v)| s << "#{k} >#{v.inspect}<"}
|
98
|
+
end
|
99
|
+
|
100
|
+
def logger_fmt0000(logrArgs)
|
101
|
+
logrArgs.is_a?(Hash) || raise(ArgumentError,"logrArgs >#{logrArgs}< not hash",caller)
|
102
|
+
logrArgs.inject([]) {|s, (k,v)| s << "#{k} >#{v.class}< >#{v.size rescue :nosize}<"}
|
103
|
+
end
|
104
|
+
|
111
105
|
def logger_fmt1(logrArgs)
|
112
106
|
logrArgs.is_a?(Hash) || raise(ArgumentError,"logrArgs >#{logrArgs}< not hash",caller)
|
113
|
-
logrArgs.inject([]) {|s, (k,v)| s << "#{k} >#{v.whoami?}< >#{v}<"}
|
107
|
+
logrArgs.inject([]) {|s, (k,v)| s << "#{k} >#{v.whoami?}< >#{v.inspect}<"}
|
114
108
|
end
|
115
|
-
|
116
|
-
#=begin
|
109
|
+
|
117
110
|
def logger_fmt2(logrArgs)
|
118
111
|
logrArgs.is_a?(Hash) || raise(ArgumentError,"logrArgs >#{logrArgs}< not hash",caller)
|
119
112
|
logrArgs.inject([]) {|s, (k,v)| s << "#{k} >#{v.whoami?}<"}
|
120
113
|
end
|
121
|
-
#=end
|
122
114
|
|
123
115
|
alias_method :logger_fmt_kls, :logger_fmt0
|
124
116
|
alias_method :logger_fmt_kls_only, :logger_fmt00
|
125
117
|
alias_method :logger_fmt_who, :logger_fmt1
|
126
118
|
alias_method :logger_fmt_who_only, :logger_fmt2
|
127
119
|
|
128
|
-
=begin
|
129
|
-
alias_method :potrubi_bootstrap_logger, :logger_message
|
130
|
-
alias_method :potrubi_bootstrap_logger_me, :logger_me
|
131
|
-
alias_method :potrubi_bootstrap_logger_mx, :logger_mx
|
132
|
-
alias_method :potrubi_bootstrap_logger_ms, :logger_ms
|
133
|
-
alias_method :potrubi_bootstrap_logger_ca, :logger_ca
|
134
|
-
alias_method :potrubi_bootstrap_logger_fmt_class, :logger_fmt0
|
135
|
-
alias_method :potrubi_bootstrap_logger_fmt_who, :logger_fmt0
|
136
|
-
alias_method :potrubi_bootstrap_logger_fmt_who_only, :logger_fmt00
|
137
|
-
=end
|
138
|
-
|
139
120
|
def logger_info(*a, &b)
|
140
121
|
logger_generic(:info, *a, &b)
|
141
122
|
end
|
@@ -161,18 +142,24 @@ module Potrubi
|
|
161
142
|
|
162
143
|
logTypeCheck.empty? || raise_exception(ArgumentError, "log type >#{logType}< unknown")
|
163
144
|
|
164
|
-
#logger.__send__(logType, *logArgs, &logBlok)
|
165
145
|
logger.__send__(logType, *logEye) { logger_fmt(*logArgs) }
|
166
146
|
end
|
167
147
|
|
168
148
|
|
169
149
|
end
|
150
|
+
|
151
|
+
def logger_instance_telltale(tellTale=nil)
|
152
|
+
case tellTale
|
153
|
+
when NilClass then
|
154
|
+
@logger_instance_telltale ||= "I(%x)" % (object_id.abs*2)
|
155
|
+
else
|
156
|
+
@logger_instance_telltale = "#{tellTale}(%x)" % (object_id.abs*2)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
170
160
|
end
|
171
161
|
end
|
172
162
|
end
|
173
163
|
|
174
164
|
|
175
165
|
__END__
|
176
|
-
|
177
|
-
IGR::Mixin::Logger.instance_methods.each {|m| puts("Lgr Inst Mth >#{m}<")}
|
178
|
-
|
@@ -3,15 +3,11 @@
|
|
3
3
|
|
4
4
|
require_relative '../bootstrap'
|
5
5
|
|
6
|
-
#requireList = %w(bootstrap)
|
7
|
-
#requireList.each {|r| require_relative "#{r}"}
|
8
|
-
|
9
6
|
mixinContent = Module.new do
|
10
7
|
|
11
8
|
# Fundamental Methods
|
12
9
|
# ###################
|
13
10
|
|
14
|
-
#=begin
|
15
11
|
def transform_pathandname_or_croak(transformSpec, *transformData)
|
16
12
|
eye = :tfm_pan
|
17
13
|
|
@@ -21,15 +17,12 @@ mixinContent = Module.new do
|
|
21
17
|
|
22
18
|
transformDefs = case transformSpec
|
23
19
|
when Proc, Symbol, Array then [*transformSpec].compact
|
24
|
-
#when Array then transformSpec
|
25
|
-
###mustbe_hashs_or_croak(transformSpec)
|
26
20
|
else
|
27
21
|
potrubi_bootstrap_surprise_exception(transformSpec, eye, "transformSpec is what?")
|
28
22
|
end
|
29
23
|
|
30
24
|
|
31
25
|
transformResult = transformDefs.inject(transformData) do |s, transformCode|
|
32
|
-
###transformCode = transformDef[:transform]
|
33
26
|
$DEBUG_POTRUBI_BOOTSTRAP && potrubi_bootstrap_logger_ms(eye,"INJ BEG", potrubi_bootstrap_logger_fmt_who(:transformCode => transformCode, :s => s))
|
34
27
|
case transformCode
|
35
28
|
when Proc then transformCode.call(s)
|
@@ -53,13 +46,10 @@ mixinContent = Module.new do
|
|
53
46
|
transformResult
|
54
47
|
|
55
48
|
end
|
56
|
-
#=end
|
57
|
-
|
58
49
|
|
59
50
|
# Core Methods
|
60
51
|
# ############
|
61
52
|
|
62
|
-
#=begin
|
63
53
|
def normalise_pathandname_names_syntax_or_croak(*names, &block)
|
64
54
|
eye = :nrm_pan_ns_syn
|
65
55
|
|
@@ -70,20 +60,16 @@ mixinContent = Module.new do
|
|
70
60
|
nameNorm
|
71
61
|
|
72
62
|
end
|
73
|
-
#=end
|
74
63
|
|
75
|
-
#=begin
|
76
64
|
def normalise_pathandname_hier_drop_while(*names, &block)
|
77
65
|
r = names.flatten.compact.drop_while(&block)
|
78
66
|
potrubi_bootstrap_logger_ca(:nrm_pan_drop_while, potrubi_bootstrap_logger_fmt_who(:r => r, :names => names))
|
79
67
|
r
|
80
68
|
end
|
81
|
-
#=end
|
82
69
|
|
83
|
-
#=begin
|
84
70
|
def normalise_pathandname_hier_split_at(*names, &splitBlok)
|
85
71
|
a = names.flatten
|
86
|
-
i =
|
72
|
+
i = splitBlok.call(a)
|
87
73
|
|
88
74
|
r = case i
|
89
75
|
when NilClass then [a] # not found: all are "before"
|
@@ -93,40 +79,33 @@ mixinContent = Module.new do
|
|
93
79
|
potrubi_bootstrap_surprise_exception(i, eye, "a >#{a}< i is what?")
|
94
80
|
end
|
95
81
|
|
96
|
-
potrubi_bootstrap_logger_ca(:nrm_pan_h_split_at, potrubi_bootstrap_logger_fmt_who(:r => r, :
|
82
|
+
potrubi_bootstrap_logger_ca(:nrm_pan_h_split_at, potrubi_bootstrap_logger_fmt_who(:r => r, :a => a))
|
97
83
|
|
98
84
|
r
|
99
85
|
end
|
100
|
-
#=end
|
101
86
|
|
102
|
-
#=begin
|
103
87
|
def normalise_pathandname_hier_from_lib(*names) # from as in after
|
104
|
-
r = normalise_pathandname_hier_split_at(*names) {|v| v.downcase == 'lib' }
|
88
|
+
r = normalise_pathandname_hier_split_at(*names) {|a| a.rindex {|v| v.downcase == 'lib' }}
|
105
89
|
q = case
|
106
90
|
when r.size == 1 then r.first # no match; use all
|
107
91
|
else
|
108
92
|
r[1] # the after
|
109
93
|
end
|
110
|
-
potrubi_bootstrap_logger_ca(:nrm_pan_h_from_lib, potrubi_bootstrap_logger_fmt_who(:q => q, :r => r, :
|
94
|
+
potrubi_bootstrap_logger_ca(:nrm_pan_h_from_lib, potrubi_bootstrap_logger_fmt_who(:q => q, :r => r, :a => names))
|
111
95
|
q
|
112
96
|
end
|
113
|
-
#=end
|
114
97
|
|
115
|
-
#=begin
|
116
98
|
def normalise_pathandname_names_elements(*names)
|
117
99
|
versionSuffixRegexp = Regexp.new('(.+)_v\d+.*\Z')
|
118
100
|
r = names.flatten.compact.map {|n| m = n.to_s; (mD = m.to_s.match(versionSuffixRegexp)) ? mD[1] : m}.map {|n| p = n.split('_'); p.map {|q| q[0] = q.chr.upcase; q}.join }
|
119
101
|
potrubi_bootstrap_logger_ca(:nrm_pan_ns_eles, potrubi_bootstrap_logger_fmt_who(:r => r, :names => names))
|
120
102
|
r
|
121
103
|
end
|
122
|
-
#=end
|
123
104
|
|
124
|
-
#=begin
|
125
105
|
def normalise_pathandname_paths_or_croak(*paths, &block)
|
126
106
|
eye = :nrm_pan_ps
|
127
107
|
pathNorm = begin
|
128
108
|
pathNomn = paths.flatten.compact.join('/').gsub('\\', '/').gsub('::', '/').gsub('//', '/')
|
129
|
-
#pathFull = (pathNomn =~ /\A\./) ? ::File.expand_path(pathNomn) : pathNomn
|
130
109
|
File.expand_path(pathNomn)
|
131
110
|
end
|
132
111
|
|
@@ -134,9 +113,7 @@ mixinContent = Module.new do
|
|
134
113
|
pathNorm
|
135
114
|
end
|
136
115
|
alias_method :normalise_pathandname_path_or_croak, :normalise_pathandname_paths_or_croak
|
137
|
-
#=end
|
138
116
|
|
139
|
-
#=begin
|
140
117
|
def normalise_pathandname_names_to_hier_or_croak(*names, &block)
|
141
118
|
eye = :nrm_pan_ns_2_h
|
142
119
|
|
@@ -155,9 +132,7 @@ mixinContent = Module.new do
|
|
155
132
|
|
156
133
|
end
|
157
134
|
alias_method :normalise_pathandname_name_to_hier_or_croak, :normalise_pathandname_names_to_hier_or_croak
|
158
|
-
#=end
|
159
135
|
|
160
|
-
#=begin
|
161
136
|
def normalise_pathandname_paths_to_hier_or_croak(*paths, &block)
|
162
137
|
eye = :nrm_pan_ps_2_h
|
163
138
|
|
@@ -174,12 +149,10 @@ mixinContent = Module.new do
|
|
174
149
|
|
175
150
|
end
|
176
151
|
alias_method :normalise_pathandname_path_to_hier_or_croak, :normalise_pathandname_paths_to_hier_or_croak
|
177
|
-
#=end
|
178
152
|
|
179
153
|
# Derivative Methods
|
180
154
|
# ##################
|
181
155
|
|
182
|
-
#=begin
|
183
156
|
def normalise_pathandname_names_or_croak(*names, &block)
|
184
157
|
eye = :nrm_pan_ns
|
185
158
|
nameNorm = normalise_pathandname_names_to_hier_or_croak(*names, &block).join('::')
|
@@ -187,9 +160,7 @@ mixinContent = Module.new do
|
|
187
160
|
nameNorm
|
188
161
|
end
|
189
162
|
alias_method :normalise_pathandname_name_or_croak, :normalise_pathandname_names_or_croak
|
190
|
-
#=end
|
191
163
|
|
192
|
-
#=begin
|
193
164
|
def find_pathandname_names_hier_from_lib_or_croak(*names, &block)
|
194
165
|
eye = :f_pan_ns_hier_fr_lib
|
195
166
|
|
@@ -208,7 +179,6 @@ mixinContent = Module.new do
|
|
208
179
|
potrubi_bootstrap_mustbe_array_or_croak(libHier)
|
209
180
|
|
210
181
|
end
|
211
|
-
#=end
|
212
182
|
|
213
183
|
end
|
214
184
|
|
@@ -13,11 +13,44 @@ require 'yaml'
|
|
13
13
|
mixinContent = Module.new do
|
14
14
|
|
15
15
|
include Potrubi::Mixin::Filesys
|
16
|
+
|
17
|
+
def write_ruby_script_or_croak(rubyArgs)
|
18
|
+
eye = :w_ruby
|
19
|
+
mustbe_hash_or_croak(rubyArgs, eye)
|
20
|
+
|
21
|
+
mustbe_subset_or_croak(rubyArgs.keys, [:ruby, :path, :permissions, :text], eye, "unexpected keys")
|
22
|
+
|
23
|
+
scriptPath = mustbe_string_key_or_croak(rubyArgs, :path, eye)
|
24
|
+
scriptPermissions = mustbe_fixnum_key_or_nil_or_croak(rubyArgs, :permissions, eye)
|
25
|
+
|
26
|
+
rubyTextNom = mustbe_not_nil_or_croak(rubyArgs[:text], eye)
|
27
|
+
|
28
|
+
# may not want the header line
|
29
|
+
|
30
|
+
rubyPath = rubyArgs.has_key?(:ruby) ? resolve_ruby_exe_path_or_croak(rubyArgs) : nil
|
31
|
+
|
32
|
+
rubyTextNrm = [rubyPath && "#!#{rubyPath}\n", rubyTextNom].flatten.compact.join
|
33
|
+
|
34
|
+
File.open(scriptPath, 'w', scriptPermissions) {|f| f.puts(rubyTextNrm) }
|
35
|
+
|
36
|
+
self
|
37
|
+
|
38
|
+
end
|
16
39
|
|
17
|
-
|
40
|
+
|
41
|
+
def write_yaml_file_or_croak(yamlPath, yamlData, yamlOpts=nil)
|
18
42
|
eye = :w_yaml
|
43
|
+
|
44
|
+
yamlPermissions = nil
|
45
|
+
yamlOpts && begin
|
46
|
+
mustbe_hash_or_croak(yamlOpts, eye)
|
47
|
+
mustbe_subset_or_croak(yamlOpts.keys, [:permissions], eye)
|
48
|
+
yamlPermissions = yamlOpts[:permissions]
|
49
|
+
end
|
50
|
+
|
51
|
+
yamlPermissions = yamlOpts[:permissions]
|
19
52
|
File.directory?(yamlPath) || create_path_directory_or_croak(yamlPath)
|
20
|
-
File.open(yamlPath, 'w') {|yamlHndl| YAML.dump(yamlData, yamlHndl) }
|
53
|
+
File.open(yamlPath, 'w', yamlPermissions) {|yamlHndl| YAML.dump(yamlData, yamlHndl) }
|
21
54
|
self
|
22
55
|
end
|
23
56
|
|
@@ -49,8 +82,6 @@ mixinContent = Module.new do
|
|
49
82
|
missing_exception(rubyPath, eye, 'rubyPath not found / not a file')
|
50
83
|
end
|
51
84
|
|
52
|
-
###puts("RUBY TETX >#{rubyText.class}< >#{rubyText}<")
|
53
|
-
|
54
85
|
rubyData = instance_eval(rubyText)
|
55
86
|
|
56
87
|
r = Kernel.block_given? ? rubyBlok.call(rubyData) : rubyData
|
@@ -61,10 +92,49 @@ mixinContent = Module.new do
|
|
61
92
|
end
|
62
93
|
|
63
94
|
# generalises configuration sources
|
95
|
+
# #################################
|
96
|
+
|
97
|
+
# Recirsives resolves the config sources
|
98
|
+
# Takes hash: source name and value pairs
|
99
|
+
# If value is a config source, and returns a hash, recursivesly resolves any config source values in it
|
100
|
+
# If value is a array, maps any configur sources
|
101
|
+
|
102
|
+
def read_recursive_configuration_sources_or_croak(srceArgs, &srceBlok)
|
103
|
+
eye = :r_rcv_cfg_srces
|
104
|
+
|
105
|
+
$DEBUG && logger_me(eye, logger_fmt_kls(srceArgs: srceArgs), logger_fmt_kls(srceBlok: srceBlok))
|
106
|
+
|
107
|
+
srceData = potrubi_util_map_hash_v(srceArgs) do | srceName, srceValue |
|
108
|
+
|
109
|
+
r = read_configuration_source_or_croak(srceValue, &srceBlok)
|
110
|
+
|
111
|
+
case r
|
112
|
+
when Hash then read_recursive_configuration_sources_or_croak(r, &srceBlok)
|
113
|
+
when Array then read_recursive_configuration_sources_list_or_croak(*r, &srceBlok)
|
114
|
+
else
|
115
|
+
r
|
116
|
+
end
|
117
|
+
|
118
|
+
###r.is_a?(Hash) ? read_recursive_configuration_sources_or_croak(r, &srceBlok) : r
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
$DEBUG && logger_mx(eye, logger_fmt_kls(srceData: srceData))
|
123
|
+
|
124
|
+
mustbe_hash_or_croak(srceData, eye, "srceData not hash")
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
# Tolerate non-sources
|
64
129
|
|
130
|
+
def read_recursive_maybe_configuration_sources_or_croak(srceArgs)
|
131
|
+
read_recursive_configuration_sources_or_croak(srceArgs) {|v| v}
|
132
|
+
end
|
133
|
+
|
65
134
|
# Read configuration sources
|
66
|
-
#
|
67
|
-
#
|
135
|
+
# Takes hash: source name and value pairs
|
136
|
+
# Take hard line and raise exception if value not a source
|
137
|
+
# Unless block is given and returns result of block
|
68
138
|
|
69
139
|
def read_configuration_sources_or_croak(srceArgs, &srceBlok)
|
70
140
|
eye = :r_cfg_srces
|
@@ -116,6 +186,8 @@ mixinContent = Module.new do
|
|
116
186
|
srceData
|
117
187
|
end
|
118
188
|
|
189
|
+
# same semantics as for hash sources
|
190
|
+
|
119
191
|
def read_maybe_configuration_sources_list_or_croak(*srceArgs)
|
120
192
|
read_configuration_sources_list_or_croak(*srceArgs) {|v| v}
|
121
193
|
end
|
@@ -134,6 +206,40 @@ mixinContent = Module.new do
|
|
134
206
|
mustbe_array_or_croak(srceData, eye, "srceData not array")
|
135
207
|
|
136
208
|
end
|
209
|
+
|
210
|
+
def read_recursive_configuration_sources_list_or_croak(*srceArgs, &srceBlok)
|
211
|
+
eye = 'r_rcv_cfg_srcs_lst'
|
212
|
+
|
213
|
+
# srceBlok is used on hash merges for duplicate keys
|
214
|
+
|
215
|
+
$DEBUG && logger_me(eye, logger_fmt_kls(srceArgs: srceArgs, srceBlok: srceBlok))
|
216
|
+
|
217
|
+
srceData = srceArgs.map do | srceArg |
|
218
|
+
|
219
|
+
r = read_configuration_source_or_croak(srceArg, &srceBlok)
|
220
|
+
|
221
|
+
case r
|
222
|
+
when Hash then read_recursive_configuration_sources_or_croak(r, &srceBlok)
|
223
|
+
when Array then read_recursive_configuration_sources_list_or_croak(*r, &srceBlok)
|
224
|
+
else
|
225
|
+
r
|
226
|
+
end
|
227
|
+
|
228
|
+
end
|
229
|
+
|
230
|
+
$DEBUG && logger_mx(eye, logger_fmt_kls(srceData: srceData, srceBlok: srceBlok))
|
231
|
+
|
232
|
+
mustbe_array_or_croak(srceData, eye, "srceData not array")
|
233
|
+
|
234
|
+
end
|
235
|
+
|
236
|
+
def read_recursive_maybe_configuration_sources_list_or_croak(*srceArgs)
|
237
|
+
read_recursive_configuration_sources_list_or_croak(*srceArgs) {|v| v}
|
238
|
+
end
|
239
|
+
|
240
|
+
|
241
|
+
# is_value predicates
|
242
|
+
# ##################
|
137
243
|
|
138
244
|
def is_value_configuration_source?(srceArgs)
|
139
245
|
eye = :'is_val_cfg_src?'
|
@@ -178,15 +284,14 @@ mixinContent = Module.new do
|
|
178
284
|
nil
|
179
285
|
end
|
180
286
|
|
181
|
-
|
287
|
+
rubyPathMap = Kernel.block_given? ? rubyBlok.call(rubyPathNrm) : rubyPathNrm
|
182
288
|
|
183
|
-
$DEBUG && logger_ca(eye, logger_fmt_kls(
|
289
|
+
$DEBUG && logger_ca(eye, logger_fmt_kls(rubyPathMap: rubyPathMap, rubyPathNrm: rubyPathNrm, rubyPathNom: rubyPathNom))
|
184
290
|
|
185
|
-
|
291
|
+
rubyPathMap
|
186
292
|
end
|
187
293
|
end
|
188
294
|
|
189
295
|
mixinConstant = Potrubi::Core.assign_mixin_constant_or_croak(mixinContent, :Potrubi, :Mixin, :Persistence)
|
190
296
|
|
191
297
|
__END__
|
192
|
-
|