Class: Sbuilder::SetupLoaderEnv
- Inherits:
-
SetupLoader
- Object
- SetupLoader
- Sbuilder::SetupLoaderEnv
- Includes:
- Utils::MyLogger
- Defined in:
- lib/sbuilder/setup_loader_env.rb
Overview
Abstaract base class
Constant Summary collapse
- PROGNAME =
mix logger
nil- @@validEnvExtension_required =
Validation
%w( interface )- @@validEnvExtension_allowed =
%w( validators input inputs bindExact )- @@extensionDomainProperties =
['domain', 'cardinality']
Constants included from Utils::MyLogger
Instance Attribute Summary
Attributes inherited from SetupLoader
Construct & configure collapse
-
#initialize(options = {}) ⇒ SetupLoaderEnv
constructor
A new instance of SetupLoaderEnv.
Abstract methods from parent class collapse
Implement load collapse
-
#doLoadGenerator(stepExtensionDef, interface) ⇒ Hash:Array
Generate input values.
-
#doLoadInputs(stepExtensionDef, interface) ⇒ Hash:Array
Expand & maps ‘input’/‘inputs’ in ‘stepExtensionDef’ to array of hashes.
- #doLoadStep(stepExtensionDef) ⇒ Object
Map inputs to domaina collapse
- #expandHash(input, paramSet, defaultValues = [], memo = {}) ⇒ Object
-
#expandInputs(inputs, paramSet) ⇒ Object
Expand domain reference in ‘input’ domain values in ‘paramSet’.
Generator collapse
-
#generateInputs(interfaceParamset, validators) ⇒ Array
Values respecting ‘validators’ as input to ‘interfaceParamset’.
Convert ruby containers to template data collapse
-
#toTemplateData(datas) ⇒ Array, 'hashes'|'singletons'
param [Array] datas elements (Hashes or single values) to map to template data.
- #toTemplateEntry(hash) ⇒ Hash, Array
Methods included from Utils::MyLogger
Methods inherited from SetupLoader
#doDoload, #getStepGenerator, #load
Constructor Details
#initialize(options = {}) ⇒ SetupLoaderEnv
Returns a new instance of SetupLoaderEnv.
26 27 28 29 30 31 |
# File 'lib/sbuilder/setup_loader_env.rb', line 26 def initialize( = {} ) @logger = getLogger( nil, ) @logger.info( "#{__method__} initialized options=#{options}" ) super( ) end |
Instance Method Details
#doLoad(extensionDefs) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/sbuilder/setup_loader_env.rb', line 40 def doLoad( extensionDefs ) @logger.info "#{__method__}, extensionDefs=#{extensionDefs}" extensionDefs && extensionDefs.each do |stepExtensionDef| Sbuilder::Utils::Validate.validateProperties( stepExtensionDef, @@validEnvExtension_required, @@validEnvExtension_allowed ) begin doLoadStep( stepExtensionDef ) rescue SbuilderException => e msg = "\n \#{e} \n\n Error occurred, when applying step extension:\n \#{stepExtensionDef.to_yaml}\n EOS\n @logger.error \"\#{__method__} \#{msg}\" \n raise Sbuilder::ExtensionException.new, msg, e.backtrace\n end\n end\n\nend\n".unindent |
#doLoadGenerator(stepExtensionDef, interface) ⇒ Hash:Array
Generate input values
generatio takes place
127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/sbuilder/setup_loader_env.rb', line 127 def doLoadGenerator( stepExtensionDef, interface ) # access rules used to generate step input stepValidators = stepExtensionDef['validators'] @logger.info "#{__method__}, inputs=#{stepValidators.join(',')}" # use generator to create inputs for the step inputsValues = generateInputs( interface, stepValidators ) @logger.info "#{__method__}, inputsValues=#{inputsValues.join(',')}" inputsValues end |
#doLoadInputs(stepExtensionDef, interface) ⇒ Hash:Array
Expand & maps ‘input’/‘inputs’ in ‘stepExtensionDef’ to array of hashes
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/sbuilder/setup_loader_env.rb', line 145 def doLoadInputs( stepExtensionDef, interface ) raise ExtensionException.new " Property 'input' cannot be defined together with 'inputs' in \#{stepExtensionDef.to_yaml}\n\n Use \n\n inputs:\n - input: \n ...\n - input: \n ...\n\n or for a single input\n\n input:\n ....\n EOS\n\n # use either 'input' or 'inputs/input'\n inputs = stepExtensionDef['input'] ? [ stepExtensionDef['input'] ] : stepExtensionDef['inputs'].map { |i| i['input'] }\n @logger.info \"\#{__method__}, inputs=\#{inputs.join(',')}\"\n \n # use generator to create inputs for the step\n inputsValues = expandInputs( inputs, interface )\n @logger.info \"\#{__method__}, inputsValues=\#{inputsValues.join(',')}\" \n\n inputsValues\n \nend\n" if stepExtensionDef['input'] && stepExtensionDef['inputs'] |
#doLoadStep(stepExtensionDef) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/sbuilder/setup_loader_env.rb', line 73 def doLoadStep ( stepExtensionDef ) # access interface (paramSet) to invoke in step interface = controller.getInterface( stepExtensionDef['interface'] ) # create new param-set && configure it stepParamSet = controller.createParamSet( Sbuilder::Constants::PARAM_SET_STEPS ) stepParamSet.setInterfaceReference( interface ) stepParamSet.setBindExact( stepExtensionDef["bindExact"] ) # set if 'stepExtensionDef' configuration defines inputsValues = nil if stepExtensionDef['validators'] inputsValues = doLoadGenerator( stepExtensionDef, interface ) elsif stepExtensionDef['input'] || stepExtensionDef['inputs'] inputsValues = doLoadInputs( stepExtensionDef, interface ) else # msg =<<-EOS.unindent # Extension must define 'validators' or 'input'/'inputs' properties. # Erroneous extension definition #{stepExtensionDef} # EOS # @logger.error( "#{__method__} #{msg}" ) # raise ExtensionException.new, msg end if !inputsValues.nil? # convert step inputs to mustache template data mustacheTemplateDatas, mustacheTemplateDatasTypes = toTemplateData( inputsValues ) # add mustache data to param set to pass to model mustacheTemplateDatas.each do |mustacheTemplateData| stepParamSet.addInput( mustacheTemplateData ) end end # pass step extension to controller controller.extendStep( stepParamSet ) end |
#expandHash(input, paramSet, defaultValues = [], memo = {}) ⇒ Object
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 |
# File 'lib/sbuilder/setup_loader_env.rb', line 206 def ( input, paramSet, defaultValues=[], memo={} ) @logger.debug "#{__method__}: paramSet=#{paramSet}, isArray=#{paramSet.respond_to?(:isArray) ? paramSet.isArray : 'non-array' }, parameters=#{paramSet.parameters.join(',')}" # Expect Hash as input if !input.kind_of?( Hash ) msg = " Expect 'Hash' as an input, value '\#{input}' is of type '\#{input.class}'\n\n Hash should define values for parameters: \#{paramSet.parameters.map {|p| p.name}.join('n') }\n EOS\n @logger.error \"\#{__method__}: \#{msg}\"\n raise ExtensionException.new, msg\n end\n\n # default is last non nil value on 'defaultValues' stack\n defaultValues << input['_default']\n defaultValue = defaultValues.reverse.find { |v| !v.nil? }\n \n\n # iterate each hash key\n input.each do |k,v|\n next if k == '_default'\n @logger.debug \"\#{__method__}: k=\#{k}, v=\#{v}\"\n parameter = paramSet.lookupParameter( k )\n if parameter.nil?\n msg = <<-EOS.unindent\n Unknown parameter name '\#{k}'\n\n Valid names: \#{paramSet.parameters.map {|p| p.name}.join(',')}\n EOS\n @logger.error \"\#{__method__} \#{msg}\"\n raise ExtensionException.new, msg\n end\n\n # Error in array type\n if parameterIsArray( parameter ) != v.kind_of?( Array )\n msg = <<-EOS.unindent\n Expect parameter '\#{parameter.name}' \#{ parameterIsArray(parameter) ? 'to be an array' : 'not to be an array' }.\n\n However, input value '\#{v}' is '\#{ v.kind_of?( Array ) ? 'an array' : 'not an array' }'\n\n EOS\n @logger.error \"\#{__method__} \#{msg}\"\n raise ExtensionException.new, msg\n end\n \n\n # Create value for key 'k'\n case [parameter.class]\n when [Sbuilder::Parameter_Dom]\n # validateDomain( parameter, v )\n memo[k] = v.kind_of?(Array) ?\n v.map { |ve| parameterValue( parameter, ve ) } :\n parameterValue( parameter, v )\n when [Sbuilder::Parameter_Ref]\n memo[k] = v.kind_of?(Array) ?\n v.map { |ve| expandHash( ve, parameter.getResolvedReference, defaultValues ) } :\n expandHash( v, parameter.getResolvedReference, defaultValues )\n \n else\n msg = \"Unknown class \#{parameter.class}\"\n raise msg\n end # case\n\n end # each k,v\n\n # add defaults to memo - only if defult defined && key not set\n \n if !defaultValue.nil?\n paramSet.parameters.each do |parameter|\n # add only if value not given\n if !memo.key?( parameter.name )\n # add default - unless given\n case [parameter.class]\n when [Sbuilder::Parameter_Dom]\n # use domain value for domain parameters\n memo[parameter.name] = parameterValue( parameter, defaultValue )\n when [Sbuilder::Parameter_Ref]\n # use empty hash as input \n subHash = expandHash( {}, parameter.getResolvedReference, defaultValues )\n memo[parameter.name] = subHash\n else\n msg = \"Unknown class \#{parameter.class}\"\n raise msg\n end # case\n \n end\n end # parameters\n end\n \n memo\n \nend\n".unindent |
#expandInputs(inputs, paramSet) ⇒ Object
Expand domain reference in ‘input’ domain values in ‘paramSet’. If ‘_default’ parameter given in ‘input’, add missing all fields in ‘input’ with parameters in ‘paramSet’
188 189 190 191 192 193 194 195 196 197 |
# File 'lib/sbuilder/setup_loader_env.rb', line 188 def ( inputs, paramSet ) @logger.info "#{__method__} paramSet=#{paramSet}, isArray=#{paramSet.respond_to?(:isArray) ? paramSet.isArray : 'non-array' }" inputs = inputs.kind_of?( Array ) ? inputs : [inputs] ret = inputs.map { |input| ( input, paramSet ) } ret end |
#generateInputs(interfaceParamset, validators) ⇒ Array
Returns values respecting ‘validators’ as input to ‘interfaceParamset’.
328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 |
# File 'lib/sbuilder/setup_loader_env.rb', line 328 def generateInputs( interfaceParamset, validators ) @logger.info "#{__method__}, interfaceParamset=#{interfaceParamset}, validators=#{validators}" begin step_generator = getStepGenerator step_generator.initParamSet( interfaceParamset, validators ) step_values = step_generator.values rescue StepGeneratorException => ee msg =" \#{ee} \n\n Error occurred, when evaluating interface \n\n \#{interfaceParamset}\n EOS\n \n @logger.error( \"\#{__method__} \#{msg}\" ) \n raise ExtensionException.new, msg, ee.backtrace\n end\n\n @logger.debug \"\#{__method__}, step_values=\#{step_values}\" if @logger.debug?\n\n return step_values \nend\n".unindent |
#toTemplateData(datas) ⇒ Array, 'hashes'|'singletons'
param [Array] datas elements (Hashes or single values) to map to template data
for templateData elements, template data type ‘hashes’ or ‘singletons’
367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 |
# File 'lib/sbuilder/setup_loader_env.rb', line 367 def toTemplateData( datas ) @logger.info "#{__method__}, datas=#{datas} #{datas == [] }" templateData = [] if datas if datas.any? && datas.first.is_a?( Hash ) templateDataType = 'hashes' templateData = datas.map { |data| { 'rows'=>false, 'columns' => toTemplateEntry( data ), "_comma" =>','} } elsif datas == [] templateDataType = 'singletons' templateData = [ singleValue( false ) ] @logger.debug "#{__method__}, templateData empty array ret =#{templateData.to_yaml}" else templateDataType = 'singletons' templateData = datas.map { |data| singleValue( data ) } end end templateData.last['_comma'] = '' if templateData && templateData.any? @logger.debug "#{__method__}, templateData ret =#{templateData.to_yaml}" return templateData, templateDataType end |
#toTemplateEntry(hash) ⇒ Hash, Array
403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 |
# File 'lib/sbuilder/setup_loader_env.rb', line 403 def toTemplateEntry( hash ) # should not occurr! raise ExtensionException.new, "Error not a hash #{hash}" unless hash.is_a?( Hash ) recurseHash( hash ) do |memo, t,h,key,val,indx| # common values, _comma will be overridden for the last entry entry = { "parameter_name" => key, '_index'=> indx, "_comma" => ',' } case t when 'v' entry["columns"] = false entry["domain_element"] = false entry["domain_value"] = val entry["rows"] = false when 'h' # hash valuees entry["columns"] = val entry["domain_element"] = false entry["domain_value"] = false entry["rows"] = false when 'hashes', 'singletons' # array types entry["columns"] = false entry["domain_element"] = false entry["domain_value"] = false entry["row_types"] = t entry["rows"] = val end # case memo << entry end # recurse end |