potrubi 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +9 -0
- data/lib/potrubi.rb +9 -0
- data/lib/potrubi/bootstrap.rb +27 -0
- data/lib/potrubi/core.rb +33 -0
- data/lib/potrubi/klass/syntax/braket.rb +197 -0
- data/lib/potrubi/mixin/bootstrap_common.rb +125 -0
- data/lib/potrubi/mixin/configuration.rb +109 -0
- data/lib/potrubi/mixin/contract-recipes.rb +226 -0
- data/lib/potrubi/mixin/contract.rb +105 -0
- data/lib/potrubi/mixin/dynamic-recipes.rb +100 -0
- data/lib/potrubi/mixin/dynamic.rb +315 -0
- data/lib/potrubi/mixin/exception.rb +98 -0
- data/lib/potrubi/mixin/filesys.rb +89 -0
- data/lib/potrubi/mixin/initialize.rb +23 -0
- data/lib/potrubi/mixin/konstant.rb +368 -0
- data/lib/potrubi/mixin/logger.rb +178 -0
- data/lib/potrubi/mixin/pathandnames.rb +226 -0
- data/lib/potrubi/mixin/persistence.rb +192 -0
- data/lib/potrubi/mixin/script.rb +59 -0
- data/lib/potrubi/mixin/text-snippets.rb +182 -0
- data/lib/potrubi/mixin/text-snippets/methods-text-snippets.rb +254 -0
- data/lib/potrubi/mixin/util.rb +53 -0
- data/lib/potrubi/version.rb +1 -1
- metadata +27 -5
data/README.md
ADDED
data/lib/potrubi.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
# Potrubi Bootstrap Mixin
|
3
|
+
|
4
|
+
requireList = %w(logger bootstrap_common)
|
5
|
+
requireList.each {|r| require_relative "mixin/#{r}"}
|
6
|
+
|
7
|
+
mixinContent = Module.new do
|
8
|
+
|
9
|
+
# Include the mixins becuase of class method usage
|
10
|
+
|
11
|
+
includeList = [Potrubi::Mixin::Logger,
|
12
|
+
Potrubi::Mixin::BootstrapCommon,
|
13
|
+
]
|
14
|
+
includeList.each {|n| include n}
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
module Potrubi
|
19
|
+
module Bootstrap
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
Potrubi::Bootstrap.__send__(:include, mixinContent) # Instance Methods
|
24
|
+
Potrubi::Bootstrap.extend(mixinContent) # Class Methods
|
25
|
+
|
26
|
+
__END__
|
27
|
+
|
data/lib/potrubi/core.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
|
2
|
+
# Core Mixin
|
3
|
+
|
4
|
+
require_relative 'bootstrap'
|
5
|
+
|
6
|
+
requireList = %w(dynamic text-snippets exception contract konstant pathandnames)
|
7
|
+
requireList.each {|r| require_relative "mixin/#{r}"}
|
8
|
+
|
9
|
+
mixinContent = Module.new do
|
10
|
+
|
11
|
+
# Include the mixins becuase of class method usage
|
12
|
+
|
13
|
+
includeList = [Potrubi::Bootstrap,
|
14
|
+
Potrubi::Mixin::Dynamic,
|
15
|
+
Potrubi::Mixin::Exception,
|
16
|
+
Potrubi::Mixin::Contract,
|
17
|
+
Potrubi::Mixin::Konstant,
|
18
|
+
Potrubi::Mixin::PathAndNames,
|
19
|
+
]
|
20
|
+
includeList.each {|n| include n}
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
module Potrubi
|
25
|
+
module Core
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
Potrubi::Core.__send__(:include, mixinContent) # Instance Methods
|
30
|
+
Potrubi::Core.extend(mixinContent) # Module Methods
|
31
|
+
|
32
|
+
__END__
|
33
|
+
|
@@ -0,0 +1,197 @@
|
|
1
|
+
|
2
|
+
# potrubi klass
|
3
|
+
|
4
|
+
# syntax braket
|
5
|
+
|
6
|
+
defined?($DEBUG_POTRUBI_KLASS_SYNTAX_BRAKET) ||
|
7
|
+
begin
|
8
|
+
$DEBUG_POTRUBI_KLASS_SYNTAX_BRAKET ||= nil
|
9
|
+
end
|
10
|
+
|
11
|
+
require "potrubi/core"
|
12
|
+
require 'potrubi/mixin/dynamic-recipes'
|
13
|
+
|
14
|
+
klassContent = Class.new do
|
15
|
+
|
16
|
+
include Potrubi::Core
|
17
|
+
###include Potrubi::Mixin::DynamicRecipes
|
18
|
+
|
19
|
+
# Class Methods
|
20
|
+
# #############
|
21
|
+
|
22
|
+
def self.new_method
|
23
|
+
new(:pos_text => "\n")
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.new_stanza
|
27
|
+
new(:pos_text => "\n")
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.new_statement
|
31
|
+
#self.new(nil, nil)
|
32
|
+
new
|
33
|
+
end
|
34
|
+
|
35
|
+
attr_accessor :pre_text, :pos_text
|
36
|
+
|
37
|
+
def initialize(initArgs=nil)
|
38
|
+
initArgs && mustbe_hash_or_croak(initArgs, :'braket i').each {|k,v| self.__send__("#{k}=", v)}
|
39
|
+
end
|
40
|
+
|
41
|
+
def to_s
|
42
|
+
eye = :'bkt to_s'
|
43
|
+
preText = pre_text
|
44
|
+
posText = pos_text
|
45
|
+
|
46
|
+
fullText = [
|
47
|
+
defined?(@head) && head_text(preText, posText),
|
48
|
+
defined?(@midl) && midl_text(preText, posText),
|
49
|
+
defined?(@tail) && tail_text(preText, posText),
|
50
|
+
].flatten.compact.join
|
51
|
+
|
52
|
+
$DEBUG_POTRUBI_KLASS_SYNTAX_BRAKET && logger_ca(eye, "self >#{self.object_id}< fulText >#{fullText.class}< >\n#{fullText}\n< ")
|
53
|
+
|
54
|
+
fullText
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
def to_s_with_edits(editList=nil)
|
60
|
+
eye = :to_s_w_edt
|
61
|
+
fulText = to_s
|
62
|
+
edtText = case editList
|
63
|
+
when NilClass then fulText
|
64
|
+
when Hash, Array then Potrubi::Core.dynamic_apply_edits(editList, fullText)
|
65
|
+
else
|
66
|
+
surprise_exception(editList, eye, "editList >#{editList.whoami_debug}< is what?")
|
67
|
+
end
|
68
|
+
$DEBUG_POTRUBI_KLASS_SYNTAX_BRAKET && logger_ca(eye, "self >#{self.object_id} edtText >\n#{edtText}\n<")
|
69
|
+
edtText
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
textMethodText =
|
75
|
+
'def METHOD_NAME_text(preText=nil, posText=nil)
|
76
|
+
METHOD_NAMEText = defined?(@METHOD_NAME) ? (@METHOD_NAME.map {|i| [preText, i.to_s, posText]}.flatten.compact.join) : nil
|
77
|
+
$DEBUG_POTRUBI_KLASS_SYNTAX_BRAKET && logger_ca(:METHOD_NAME_text, "self >#{self.object_id}< METHOD_NAMEText >#{METHOD_NAMEText.class}< >#{METHOD_NAMEText}<")
|
78
|
+
METHOD_NAMEText
|
79
|
+
end'
|
80
|
+
|
81
|
+
|
82
|
+
baseMethodText =
|
83
|
+
'def push_METHOD_NAME(*args)
|
84
|
+
(@METHOD_NAME ||= []).push(*ARGS_SPEC)
|
85
|
+
self
|
86
|
+
end
|
87
|
+
alias_method :tail_METHOD_NAME, :push_METHOD_NAME
|
88
|
+
def unshift_METHOD_NAME(*args)
|
89
|
+
(@METHOD_NAME ||= []).unshift(*ARGS_SPEC)
|
90
|
+
self
|
91
|
+
end
|
92
|
+
alias_method :cons_METHOD_NAME, :unshift_METHOD_NAME
|
93
|
+
def pop_METHOD_NAME
|
94
|
+
r = defined?(@METHOD_NAME) ? @METHOD_NAME.pop : nil
|
95
|
+
$DEBUG_POTRUBI_KLASS_SYNTAX_BRAKET && logger_ca(:pop_METHOD_NAME, "self >#{self.object_id}< r >#{r}<")
|
96
|
+
r
|
97
|
+
end
|
98
|
+
def shift_METHOD_NAME
|
99
|
+
r = defined?(@METHOD_NAME) ? @METHOD_NAME.shift : nil
|
100
|
+
$DEBUG_POTRUBI_KLASS_SYNTAX_BRAKET && logger_ca(:shift_METHOD_NAME, "self >#{self.object_id}< r >#{r}<")
|
101
|
+
r
|
102
|
+
end'
|
103
|
+
|
104
|
+
defTextList = [textMethodText, baseMethodText]
|
105
|
+
###puts("TEXT TEST TEXT >#{defTextList}<")
|
106
|
+
|
107
|
+
braketMethods = {
|
108
|
+
:tail => defTextList,
|
109
|
+
:head => defTextList,
|
110
|
+
:midl => defTextList,
|
111
|
+
}
|
112
|
+
|
113
|
+
Potrubi::Core.dynamic_define_methods(self, braketMethods) do |k, v|
|
114
|
+
edits = {
|
115
|
+
ARGS_SPEC: 'args.flatten(1)',
|
116
|
+
METHOD_NAME: k,
|
117
|
+
}
|
118
|
+
case v
|
119
|
+
when Hash then v.merge({edit: [edits, v[:edit]]})
|
120
|
+
else
|
121
|
+
{edit: edits, spec: v || defTextList}
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
aliasMethods = {
|
126
|
+
:push => :push_midl,
|
127
|
+
:pop => :pop_midl,
|
128
|
+
:shift => :shift_midl,
|
129
|
+
:unshift => :unshift_midl,
|
130
|
+
:cons => :cons_midl,
|
131
|
+
:tail => :tail_midl,
|
132
|
+
}
|
133
|
+
|
134
|
+
#Potrubi::Core.dynamic_define_methods_aliases(self, aliasMethods)
|
135
|
+
Potrubi::Mixin::DynamicRecipes.recipe_aliases(self, aliasMethods)
|
136
|
+
|
137
|
+
|
138
|
+
# Diagnostics
|
139
|
+
# ###########
|
140
|
+
|
141
|
+
def raw_debug(levelText=nil)
|
142
|
+
eye = :'braket r_dbg'
|
143
|
+
|
144
|
+
$DEBUG_POTRUBI_KLASS_SYNTAX_BRAKET &&
|
145
|
+
begin
|
146
|
+
levelString = case levelText
|
147
|
+
when NilClass then 'BRAKET'
|
148
|
+
when String, Symbol then "#{levelText}"
|
149
|
+
else
|
150
|
+
unsupported_exception(levelText, eye)
|
151
|
+
end
|
152
|
+
|
153
|
+
braketAddress = "%x" % (object_id.abs*2)
|
154
|
+
|
155
|
+
puts "#{levelString} #{braketAddress} ==>"
|
156
|
+
|
157
|
+
defined?(@head) && raw_content_debug(levelString, "head", @head)
|
158
|
+
defined?(@midl) && raw_content_debug(levelString, "midl", @midl)
|
159
|
+
defined?(@tail) && raw_content_debug(levelString, "tail", @tail)
|
160
|
+
|
161
|
+
puts "#{levelString} #{braketAddress} <=="
|
162
|
+
end
|
163
|
+
|
164
|
+
self
|
165
|
+
end
|
166
|
+
|
167
|
+
def raw_content_debug(levelString, contentName, contentData)
|
168
|
+
eye = :'braket r_cnt_dbg'
|
169
|
+
|
170
|
+
braketAddress = "%x" % (object_id.abs*2)
|
171
|
+
|
172
|
+
case contentData
|
173
|
+
when NilClass then puts "#{levelString} #{braketAddress} #{contentName.to_s.upcase} IS EMPTY"
|
174
|
+
when Array then
|
175
|
+
selfClass = self.class
|
176
|
+
contentData.each_with_index do | cV, cN |
|
177
|
+
case
|
178
|
+
when cV.is_a?(selfClass) then cV.raw_debug("#{levelString} #{braketAddress}")
|
179
|
+
else
|
180
|
+
puts "#{levelString} #{braketAddress} #{contentName.to_s.upcase} cN #{"%2d" % cN} cV >#{cV.class}< >#{cV}<"
|
181
|
+
end
|
182
|
+
end
|
183
|
+
else
|
184
|
+
surprise_exception(contentData, eye)
|
185
|
+
end
|
186
|
+
|
187
|
+
self
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
end
|
192
|
+
|
193
|
+
Potrubi::Core.assign_class_constant_or_croak(klassContent, __FILE__)
|
194
|
+
|
195
|
+
__END__
|
196
|
+
|
197
|
+
|
@@ -0,0 +1,125 @@
|
|
1
|
+
|
2
|
+
# bootstrap common methods
|
3
|
+
|
4
|
+
# This turns on or off logging from boostrap / core methods
|
5
|
+
# Normally off (nil/false)
|
6
|
+
|
7
|
+
defined?($DEBUG_POTRUBI_BOOTSTRAP) || ($DEBUG_POTRUBI_BOOTSTRAP = nil)
|
8
|
+
|
9
|
+
#$DEBUG = true # TESTING
|
10
|
+
|
11
|
+
require_relative('logger')
|
12
|
+
|
13
|
+
module Potrubi
|
14
|
+
module Mixin
|
15
|
+
module BootstrapCommon
|
16
|
+
|
17
|
+
#=begin
|
18
|
+
bootstrapLoggerMethods = {
|
19
|
+
logger: :logger_message,
|
20
|
+
logger_me: :logger_me,
|
21
|
+
logger_mx: :logger_mx,
|
22
|
+
logger_ms: :logger_ms,
|
23
|
+
logger_ca: :logger_ca,
|
24
|
+
logger_fmt_class: :logger_fmt0,
|
25
|
+
logger_fmt_who: :logger_fmt0,
|
26
|
+
logger_fmt_who_only: :logger_fmt00,
|
27
|
+
}
|
28
|
+
|
29
|
+
bootstrapLoggerText = bootstrapLoggerMethods.map do | bootMethod, loggerMethod |
|
30
|
+
text = <<-"ENDOFHERE"
|
31
|
+
def potrubi_bootstrap_#{bootMethod}(*a, &b)
|
32
|
+
#puts("BOOTLOGR POTRUBI DEBUG >#{$DEBUG_POTRUBI_BOOTSTRAP.class}< >#{$DEBUG_POTRUBI_BOOTSTRAP}<")
|
33
|
+
#puts("BOOTLOGR DEBUG >#{$DEBUG.class}< >#{$DEBUG}<")
|
34
|
+
$DEBUG_POTRUBI_BOOTSTRAP && #{loggerMethod}(*a, &b)
|
35
|
+
end;
|
36
|
+
ENDOFHERE
|
37
|
+
end.compact.flatten.join("\n")
|
38
|
+
|
39
|
+
###puts("bootstrapLoggerText >\n#{bootstrapLoggerText}")
|
40
|
+
|
41
|
+
self.module_eval(bootstrapLoggerText)
|
42
|
+
#=end
|
43
|
+
|
44
|
+
def potrubi_bootstrap_raise_exception(exception, value, *tellTales)
|
45
|
+
#tellTale = potrubi_bootstrap_logger_format_telltales(*tellTales)
|
46
|
+
tellTale = tellTales.flatten.compact.join(' ')
|
47
|
+
raise(exception,"Potrubi Bootstrap Exception value >#{value.class}< >#{value}< #{tellTale}",caller)
|
48
|
+
end
|
49
|
+
|
50
|
+
def potrubi_bootstrap_surprise_exception(value, *tellTales)
|
51
|
+
potrubi_bootstrap_raise_exception(ArgumentError, value, "value was a surpise", *tellTales)
|
52
|
+
end
|
53
|
+
|
54
|
+
def potrubi_bootstrap_unsupported_exception(value, *tellTales)
|
55
|
+
potrubi_bootstrap_raise_exception(ArgumentError, value, "value not supported", *tellTales)
|
56
|
+
end
|
57
|
+
|
58
|
+
def potrubi_bootstrap_missing_exception(value, *tellTales)
|
59
|
+
potrubi_bootstrap_raise_exception(ArgumentError, value, "value missing", *tellTales)
|
60
|
+
end
|
61
|
+
|
62
|
+
def potrubi_bootstrap_mustbe_hash_or_croak(testValue, *tellTales)
|
63
|
+
testValue.is_a?(Hash) ? testValue : potrubi_bootstrap_raise_exception(ArgumentError, testValue, "value not hash", tellTales)
|
64
|
+
end
|
65
|
+
|
66
|
+
def potrubi_bootstrap_mustbe_array_or_croak(testValue, *tellTales)
|
67
|
+
testValue.is_a?(Array) ? testValue : potrubi_bootstrap_raise_exception(ArgumentError, testValue, "value not array", tellTales)
|
68
|
+
end
|
69
|
+
|
70
|
+
def potrubi_bootstrap_mustbe_module_or_croak(testValue, *tellTales)
|
71
|
+
testValue.is_a?(Module) ? testValue : potrubi_bootstrap_raise_exception(ArgumentError, testValue, "value not module", tellTales)
|
72
|
+
end
|
73
|
+
|
74
|
+
def potrubi_bootstrap_mustbe_class_or_croak(testValue, *tellTales)
|
75
|
+
testValue.is_a?(Class) ? testValue : potrubi_bootstrap_raise_exception(ArgumentError, testValue, "value not class", tellTales)
|
76
|
+
end
|
77
|
+
|
78
|
+
def potrubi_bootstrap_mustbe_proc_or_croak(testValue, *tellTales)
|
79
|
+
testValue.is_a?(Proc) ? testValue : potrubi_bootstrap_raise_exception(ArgumentError, testValue, "value not proc", tellTales)
|
80
|
+
end
|
81
|
+
|
82
|
+
def potrubi_bootstrap_mustbe_string_or_croak(testValue, *tellTales)
|
83
|
+
testValue.is_a?(String) ? testValue : potrubi_bootstrap_raise_exception(ArgumentError, testValue, "value not string", tellTales)
|
84
|
+
end
|
85
|
+
|
86
|
+
def potrubi_bootstrap_mustbe_file_or_croak(testValue, *tellTales)
|
87
|
+
File.file?(testValue) ? testValue : potrubi_bootstrap_raise_exception(ArgumentError, testValue, "value not file", tellTales)
|
88
|
+
end
|
89
|
+
|
90
|
+
def potrubi_bootstrap_mustbe_directory_or_croak(testValue, *tellTales)
|
91
|
+
File.directory?(testValue) ? testValue : potrubi_bootstrap_raise_exception(ArgumentError, testValue, "value not directory", tellTales)
|
92
|
+
end
|
93
|
+
|
94
|
+
def potrubi_bootstrap_mustbe_key_or_croak(testValue, keyName, *tellTales)
|
95
|
+
(testValue.respond_to?(:has_key?) && testValue.has_key?(keyName)) ? testValue[keyName] : potrubi_bootstrap_raise_exception(ArgumentError, keyName, "testValue >#{testValue}< keyName not found", tellTales)
|
96
|
+
end
|
97
|
+
|
98
|
+
def potrubi_bootstrap_mustbe_not_nil_or_croak(testValue, *tellTales)
|
99
|
+
testValue || potrubi_bootstrap_raise_exception(ArgumentError, testValue, "testValue >#{testValue}< failed not nil ", tellTales)
|
100
|
+
end
|
101
|
+
|
102
|
+
def potrubi_bootstrap_mustbe_not_empty_or_croak(testValue, *tellTales)
|
103
|
+
(testValue.respond_to?(:empty?) && (! testValue.empty?)) ? testValue : potrubi_bootstrap_raise_exception(ArgumentError, testValue, "testValue >#{testValue}< failed not empty", tellTales)
|
104
|
+
end
|
105
|
+
|
106
|
+
def bootstrap_find_module_constant(*a)
|
107
|
+
bootstrap_find_module_constant_or_croak(*a) rescue nil
|
108
|
+
end
|
109
|
+
|
110
|
+
def bootstrap_find_module_constant_or_croak(*modNames)
|
111
|
+
#potrubi_bootstrap_mustbe_module_or_croak(modNames.flatten.compact.inject(Object) {|s,m| (s && s.const_defined?(m, false)) ? s.const_get(m) : nil})
|
112
|
+
potrubi_bootstrap_mustbe_module_or_croak(modNames.flatten.compact.join('::').split('::').inject(Object) {|s,m| (s && s.const_defined?(m, false)) ? s.const_get(m) : nil})
|
113
|
+
end
|
114
|
+
|
115
|
+
def bootstrap_find_class_constant(*a)
|
116
|
+
bootstrap_find_class_constant_or_croak(*a) rescue nil
|
117
|
+
end
|
118
|
+
|
119
|
+
def bootstrap_find_class_constant_or_croak(*a)
|
120
|
+
potrubi_bootstrap_mustbe_class_or_croak(bootstrap_find_module_constant_or_croak(*a))
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
|
2
|
+
# potrubi mixin configuration
|
3
|
+
|
4
|
+
# support configuration from YAML and Ruby file
|
5
|
+
|
6
|
+
require_relative '../core'
|
7
|
+
|
8
|
+
requireList = %w(util persistence)
|
9
|
+
requireList.each {|r| require_relative "#{r}"}
|
10
|
+
|
11
|
+
###require 'yaml'
|
12
|
+
|
13
|
+
mixinContent = Module.new do
|
14
|
+
|
15
|
+
include Potrubi::Mixin::Util
|
16
|
+
include Potrubi::Mixin::Persistence
|
17
|
+
|
18
|
+
# so common
|
19
|
+
|
20
|
+
def set_attributes_or_croak(attrArgsNom, &attrBlok)
|
21
|
+
eye = :'s_attrs'
|
22
|
+
mustbe_hash_or_croak(attrArgsNom, eye)
|
23
|
+
attrArgsNrm = Kernel.block_given? ? potrubi_util_apply_proc_to_hash_or_croak(attrArgsNom, &attrBlok) : attrArgsNom
|
24
|
+
attrArgsNrm.each {|k,v| __send__("#{k}=", v) }
|
25
|
+
###puts("SET ATTRS attrArgs >#{attrArgs}<")
|
26
|
+
self
|
27
|
+
end
|
28
|
+
|
29
|
+
def set_attributes_from_configuration_sources_list_or_croak(*srceArgs, &srceBlok)
|
30
|
+
eye = 's_attr_fr_cfg_srcs_lst'
|
31
|
+
|
32
|
+
$DEBUG && logger_me(eye, logger_fmt_kls(srceArgs: srceArgs, srceBlok: srceBlok))
|
33
|
+
|
34
|
+
srceArgs.each { | srceArg | set_attributes_or_croak(read_configuration_source_or_croak(srceArg, &srceBlok)) }
|
35
|
+
|
36
|
+
$DEBUG && logger_mx(eye, logger_fmt_kls(srceArgs: srceArgs, srceBlok: srceBlok))
|
37
|
+
|
38
|
+
self
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
# If has key value is external source e.g. yaml
|
43
|
+
# read it and set_attributes with it
|
44
|
+
# Else raise exception unless blok is given
|
45
|
+
|
46
|
+
def set_attributes_from_configuration_sources_or_croak(srceArgs, &srceBlok)
|
47
|
+
eye = :s_attrs_fr_cfg_srces
|
48
|
+
|
49
|
+
$DEBUG && logger_me(eye, logger_fmt_kls_only(srceArgs: srceArgs), logger_fmt_kls(srceBlok: srceBlok))
|
50
|
+
|
51
|
+
mustbe_hash_or_croak(srceArgs, eye, "srceArgs not hash")
|
52
|
+
|
53
|
+
srceArgs.each do | srceName, srceValue |
|
54
|
+
case
|
55
|
+
when (p = is_value_configuration_source?(srceValue)) then set_attributes_or_croak(read_configuration_source_or_croak(srceValue))
|
56
|
+
else
|
57
|
+
Kernel.block_given? ? srceBlok.call(srceName, srceValue) : potrubi_bootstrap_surprise_exception(srceValue, eye, "srceName >#{srceName}< srceValue not a configuration source")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
$DEBUG && logger_mx(eye, logger_fmt_kls_only(srceArgs: srceArgs), logger_fmt_kls(srceBlok: srceBlok))
|
62
|
+
|
63
|
+
self
|
64
|
+
|
65
|
+
end
|
66
|
+
alias_method :set_attributes_from_configuration_files_or_croak, :set_attributes_from_configuration_sources_or_croak
|
67
|
+
|
68
|
+
|
69
|
+
def set_attributes_using_specification_or_croak(attrSpec, attrData, &attrBlok)
|
70
|
+
eye = :'s_attrs_using_spec'
|
71
|
+
|
72
|
+
$DEBUG && logger_me(eye, logger_fmt_kls(attrSpec: attrSpec, attrBlok: attrBlok), logger_fmt_kls(attrData: attrData))
|
73
|
+
|
74
|
+
mustbe_hash_or_croak(attrSpec, eye, "attrSpec failed contract")
|
75
|
+
mustbe_hash_or_croak(attrData, eye, "attrData failed contract")
|
76
|
+
|
77
|
+
attrData.each do | attrName, attrValue |
|
78
|
+
|
79
|
+
#attrProc = mustbe_key_or_nil_or_croak(attrSpec, attrName, eye, "attrName >#{attrName}< not in attrSpec >#{attrSpec}<")
|
80
|
+
attrProc = attrSpec[attrName]
|
81
|
+
|
82
|
+
$DEBUG && logger_ms(eye, 'WHAT ATTR', logger_fmt_kls(attrName: attrName, attrProc: attrProc), logger_fmt_kls(attrValue: attrValue))
|
83
|
+
|
84
|
+
case attrProc
|
85
|
+
when NilClass then
|
86
|
+
$DEBUG && logger_ms(eye, 'SEND ATTR', logger_fmt_kls(attrName: attrName, attrProc: attrProc), logger_fmt_kls(attrValue: attrValue))
|
87
|
+
self.__send__("#{attrName}=", attrValue)
|
88
|
+
when Proc then
|
89
|
+
$DEBUG && logger_ms(eye, 'PROC ATTR', logger_fmt_kls(attrName: attrName, attrProc: attrProc), logger_fmt_kls(attrValue: attrValue))
|
90
|
+
instance_exec(attrName, attrValue, &attrProc)
|
91
|
+
else
|
92
|
+
surprise_exception(attrProc, eye, "attrProc is what?")
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
$DEBUG && logger_mx(eye, logger_fmt_kls(attrSpec: attrSpec, attrBlok: attrBlok), logger_fmt_kls(attrData: attrData))
|
98
|
+
|
99
|
+
self
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
mixinConstant = Potrubi::Core.assign_mixin_constant_or_croak(mixinContent, :Potrubi, :Mixin, :Configuration)
|
107
|
+
|
108
|
+
__END__
|
109
|
+
|