lorj 1.0.10 → 1.0.11

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 66366295d6d2bd7fe5249ae3a23204fbf6feb041
4
- data.tar.gz: 5f82817cfe94a3663ff15a0b2084da299fde4a43
3
+ metadata.gz: 4650a17061896bba5bafad8e12d15be96a37a532
4
+ data.tar.gz: 9ed6bb8936335cc1fa1c1236e95ef1c17a56e7e3
5
5
  SHA512:
6
- metadata.gz: d3bc6abf89ad95748426300653103cf351ffcbc49ae1c319e6a77118444ccc819e88c8869cba6dac1a8f43ebd1e1e1720c855477a7ed8808b59d31b356ec2dc4
7
- data.tar.gz: 8b0d0a9af74d981cb61a0f2330b697edffee5a0451071ba4ef4dc62a04184f91ca5c999b77de4993291c46a10b64b40e1b7be3485f11e2d2a86ea81142607078
6
+ metadata.gz: b9842cbc6ccf9d6068a76a0b82948a1c6196e10f5d46d9a40d12166961d2a328e5514a95e761387ef6a634783e851386cfcd0f48de4c4c4eba35c1d6bf9c56f1
7
+ data.tar.gz: f499cab40cd49a2494ff67e59a38704e4a193acff174b1df7dacf547f9ba13bce7c6796e344c63f00f01c043f4d54a70a9da51ec0326cb90c96686187b7a5adc
data/.rubocop.yml CHANGED
@@ -33,14 +33,20 @@ Style/HashSyntax:
33
33
 
34
34
  # lets start with 40, but 10 is way to small..
35
35
  Metrics/MethodLength:
36
- Max: 40
36
+ Max: 50
37
37
  # If Method length is increased, class length need to be extended as well.
38
38
  Metrics/ClassLength:
39
39
  Max: 150
40
40
 
41
41
  # allow arguments to be longer than 15
42
42
  Metrics/AbcSize:
43
- Max: 40
43
+ Max: 50
44
+ # Perceived Complexity
45
+ Metrics/PerceivedComplexity:
46
+ Max: 9
47
+ Metrics/CyclomaticComplexity:
48
+ Max: 8
49
+
44
50
  # forj-docker binary name gets an exception
45
51
  Style/FileName:
46
52
  Exclude: ['bin/forj-docker', 'lib/**/forj-docker.rb']
data/lib/core/core.rb CHANGED
@@ -30,7 +30,7 @@ module Lorj
30
30
  # This is the main lorj class.
31
31
  # It interfaces your main code with the full lorj system as shown in the
32
32
  # concept document.
33
- # It give you access to the lorj model object designed by your process.
33
+ # It gives you access to the lorj model object designed by your process.
34
34
  #
35
35
  # When you start using it, your main must be as simple as you can, as you will
36
36
  # need to move most of your application logic to the process.
@@ -46,19 +46,29 @@ module Lorj
46
46
  # Then, your application contributors can build their own controller and
47
47
  # extend your solution!
48
48
  #
49
- # Here an example of creating a CloudServer, using CloudCore
50
- # (derived from Core).
51
- # CloudCore introduces lorj predefined CloudProcess used by forj cli.
49
+ # Here an example of creating a CloudServer, using Lorj_cloud module
50
+ # See http://github.com/forj-oss/lorj-cloud
52
51
  #
53
- # oCloud = Lorj::CloudCore.new(oConfig, 'myhpcloud')
54
- # oConfig.set(:server_name,'myservername')
55
- # oCloud.create(:server)
52
+ # require 'lorj_cloud'
56
53
  #
57
- # Another basic example (See example directory)
54
+ # process = { :process_module => 'cloud',
55
+ # :controller_name => 'openstack' }
56
+ # cloud = Lorj::Core.new(nil, [process])
57
+ # cloud.setup(:server) # Ask end user about required data
58
+ # cloud.create(:server, :server_name => 'myservername')
58
59
  #
59
- # oConfig = Lorj::Account.new()
60
- # oPrc = Lorj::Core.new(oConfig, 'mySqlAccount')
61
- # oCloud.create(:student, { :student_name => "Robert Redford"})
60
+ # Another basic example.
61
+ #
62
+ # require 'lorj'
63
+ #
64
+ # process = { :process_name => 'myprocess',
65
+ # :process_path => '<myprocess_path>',
66
+ # :controller_name => :mock }
67
+ #
68
+ # core = Lorj::Core.new(nil, [process])
69
+ # core.create(:myobject, :parameter1 => "value")
70
+ #
71
+ # You can learn on lorj by example, see examples/
62
72
  #
63
73
  # See BaseProcess to check how you can write a process and what kind of
64
74
  # functions are available for your process to be kept controller independant.
@@ -71,8 +81,8 @@ module Lorj
71
81
  # following functions:
72
82
  #
73
83
  # - get(*key, default=nil) and [*key] : function to get a value from a key.
74
- # default is a value to get if not
75
- # found.
84
+ # default is a value to get if not found.
85
+ #
76
86
  # - set(*key, value) or [*key, value]= : function to set a value to a key.
77
87
  # Ex: From processes, you can set a runtime data with:
78
88
  #
@@ -83,9 +93,9 @@ module Lorj
83
93
  # config[key] = value
84
94
  #
85
95
  # - exist?(*key) : function which return false if not
86
- # found, or any other value if found.
96
+ # found, or any other value if found.
87
97
  # Ex: From processes, you can get a data (runtime/account/config.yaml or
88
- # defaults.yaml) with:
98
+ # defaults.yaml) with:
89
99
  #
90
100
  # config.get(key)
91
101
  #
@@ -222,6 +222,8 @@ module Lorj
222
222
  # This path must contains at least 'process' subdir. And if needed
223
223
  # a 'controllers' path
224
224
  # - :process_name : Name of the local process
225
+ # - :defaults : Define the defaults data setting for the process
226
+ # - :data : Define process data definition.
225
227
  #
226
228
  # Optionnally, you can set a controller name to use with the process.
227
229
  # - :controller_name: Name of the controller to use.
@@ -230,13 +232,13 @@ module Lorj
230
232
  # * *Returns* :
231
233
  # - model : Application model loaded.
232
234
  def init_processes(model, processes)
233
- processes.each do |a_process|
235
+ processes.each_index do |index|
234
236
  my_process = {}
235
-
237
+ a_process = processes[index]
236
238
  if a_process.key?(:process_module)
237
- my_process = _process_module_to_load(my_process, a_process)
239
+ my_process = _process_module_to_load(index, my_process, a_process)
238
240
  else
239
- my_process = _process_local_to_load(my_process, a_process)
241
+ my_process = _process_local_to_load(index, my_process, a_process)
240
242
  end
241
243
 
242
244
  next if my_process.nil?
@@ -248,7 +250,10 @@ module Lorj
248
250
 
249
251
  model
250
252
  end
253
+ end
251
254
 
255
+ # Define internal private functions for controllers
256
+ class Core
252
257
  # high level function to load process
253
258
  def _process_load(model, my_process)
254
259
  if load_process(model, my_process[:process_path])
@@ -263,7 +268,7 @@ module Lorj
263
268
  end
264
269
 
265
270
  # function prepare of loading a local process
266
- def _process_local_to_load(my_process, a_process)
271
+ def _process_local_to_load(index, my_process, a_process)
267
272
  my_process[:process_path] = a_process[:process_path]
268
273
 
269
274
  if a_process[:process_name].nil?
@@ -277,11 +282,37 @@ module Lorj
277
282
  else
278
283
  my_process[:controller_name] = a_process[:controller_name]
279
284
  end
285
+
286
+ defaults_file = a_process[:defaults]
287
+ if defaults_file.nil?
288
+ path = a_process[:process_path]
289
+ path['.rb'] = ''
290
+ defaults_file = File.join(path, 'defaults.yaml')
291
+ end
292
+
293
+ _process_load_data(config, index,
294
+ a_process[:process_name], defaults_file,
295
+ PRC::SectionConfig)
296
+
297
+ data_file = a_process[:data]
298
+ if defaults_file.nil?
299
+ path = a_process[:process_path]
300
+ path['.rb'] = ''
301
+ data_file = File.join(path, 'data.yaml')
302
+ end
303
+
304
+ _process_load_data(Lorj.data, index,
305
+ a_process[:process_name], data_file)
306
+
307
+ # TODO: Implement Object definition as a config layer.
308
+ # _process_load_definition(definition, index, a_process[:process_name],
309
+ # a_process[:definition])
310
+
280
311
  my_process
281
312
  end
282
313
 
283
314
  # Function prepare of loading a module process.
284
- def _process_module_to_load(my_process, a_process)
315
+ def _process_module_to_load(index, my_process, a_process)
285
316
  name = a_process[:process_module]
286
317
 
287
318
  if name.nil?
@@ -309,9 +340,54 @@ module Lorj
309
340
  _process_module_set_ctr(my_process, module_process.controllers,
310
341
  a_process[:controller_name])
311
342
 
343
+ _process_load_data(config, index, name, module_process.defaults_file,
344
+ PRC::SectionConfig)
345
+
346
+ _process_load_data(Lorj.data, index, name, module_process.data_file)
347
+
348
+ # TODO: Implement Object definition as a config layer.
349
+ # _process_load_definition(definition, index, name,
350
+ # module_process.definition)
351
+
312
352
  my_process
313
353
  end
314
354
 
355
+ # Load data definition in process data layers
356
+ def _process_load_data(config, index, name, file,
357
+ config_class = PRC::BaseConfig)
358
+ return unless config.layer_index(name).nil?
359
+
360
+ return if file.nil?
361
+
362
+ layer = PRC::CoreConfig.define_layer(:name => name,
363
+ :config => config_class.new,
364
+ :load => true,
365
+ :set => false)
366
+ unless File.exist?(file)
367
+ PrcLib.warning("Process '%s', data file '%s' doesn't exist."\
368
+ ' Not loaded.', name, file)
369
+ return
370
+ end
371
+
372
+ begin
373
+ unless layer[:config].load(file)
374
+ PrcLib.warning("Process '%s', data file '%s' was not loaded.",
375
+ name, file)
376
+ end
377
+ rescue => e
378
+ PrcLib.error("Process '%s', unable to load data file '%s'. %s",
379
+ name, file, e.message)
380
+ end
381
+
382
+ config.layer_add(layer.merge(:index => (config.layers.length - index)))
383
+ end
384
+
385
+ # Load process definition in process layers
386
+ # Function currently not developped.
387
+ #
388
+ # def _process_load_definition(a_process)
389
+ # end
390
+
315
391
  def _process_module_set_ctr(my_process, controllers, controller_name)
316
392
  return if controller_name.nil?
317
393
 
@@ -205,10 +205,6 @@ module Lorj
205
205
  _get_object_params(object_type, sEventType, fname, true)
206
206
  end
207
207
 
208
- # TODO: Fix the Complexity
209
- # rubocop: disable Metrics/CyclomaticComplexity
210
- # rubocop: disable Metrics/PerceivedComplexity
211
-
212
208
  # internal runtime function for process call
213
209
  # Build a process/controller parameters object (ObjectData)
214
210
  #
@@ -241,12 +237,8 @@ module Lorj
241
237
  new_params = _obj_param_init(object_type, sEventType, as_controller)
242
238
  end
243
239
 
244
- obj_params.each do |param_path, param_options|
245
- if param_options.key?(:for)
246
- next unless param_options[:for].include?(sEventType)
247
- end
248
-
249
- param_obj = KeyPath.new(param_path)
240
+ _object_params_event(object_type, sEventType).each do |param_obj|
241
+ param_options = obj_params[param_obj.fpath]
250
242
 
251
243
  value = _build_param(new_params, param_obj, param_options)
252
244
 
@@ -260,8 +252,47 @@ module Lorj
260
252
  new_params
261
253
  end
262
254
 
263
- # rubocop: enable Metrics/CyclomaticComplexity
264
- # rubocop: enable Metrics/PerceivedComplexity
255
+ # Function to provide a list of valid attributes for an event given.
256
+ #
257
+ # * *args* :
258
+ # - +object_type+: object_type
259
+ # - +event_type+ : Can be create_e, delete_e, query_e, get_e
260
+ # - +param_type+ : Can be nil (default), :data or :CloudObject
261
+ #
262
+ # * *return*:
263
+ # - params_obj : List of valid attributes (KeyPath type) for
264
+ # the event given.
265
+ def _object_params_event(object_type, sEventType, param_type = nil)
266
+ obj_params = PrcLib.model.meta_obj.rh_get(object_type, :params, :keys)
267
+
268
+ attrs = []
269
+ obj_params.each do |param_path, param_options|
270
+ next unless _param_event?(param_options, sEventType)
271
+
272
+ next if param_type && param_type != param_options[:type]
273
+
274
+ attrs << KeyPath.new(param_path)
275
+ end
276
+ attrs
277
+ end
278
+
279
+ # Internal runtime function checking if the attribute is valid with event
280
+ # query
281
+ #
282
+ # * *args* :
283
+ # - +param_options+: Parameter options to use.
284
+ # - +param_path+ : Parameter path to check event
285
+ # - +event_type+ : Can be create_e, delete_e, query_e, get_e
286
+ #
287
+ # * *return*:
288
+ # - true if the attribute name is valid for this event.
289
+ # - false otherwise.
290
+ def _param_event?(param_options, sEventType)
291
+ if param_options.key?(:for)
292
+ return false unless param_options[:for].include?(sEventType)
293
+ end
294
+ true
295
+ end
265
296
 
266
297
  # Internal runtime function for process call
267
298
  #
@@ -129,12 +129,10 @@ module Lorj
129
129
  PrcLib.runtime_fail "Setup: '%s' not a valid object type."
130
130
  end
131
131
 
132
- setup_steps = _setup_load
133
-
134
132
  Lorj.debug(2, "Setup is identifying account data to ask for '%s'",
135
133
  sObjectType)
136
134
  # Loop in dependencies to get list of data object to setup
137
- _setup_identify(sObjectType, setup_steps)
135
+ setup_steps = _setup_identify(sObjectType, _setup_load)
138
136
 
139
137
  Lorj.debug(2, 'Setup check if needs to add unrelated data in the process')
140
138
  _setup_check_additional(setup_steps)
@@ -152,39 +150,29 @@ module Lorj
152
150
  # Internal function to insert the data after several data to ask.
153
151
  #
154
152
  # * *Args* :
155
- # - data_to_check : setup data structure to update.
153
+ # - step : step structure to update.
156
154
  # - data_to_add : data to add
157
- # - step : current step analyzed.
158
155
  # - order_index : last order index of the current step analyzed.
159
156
  #
160
157
  # * *Returns*:
161
158
  #
162
159
  # * *Raises* :
163
160
  #
164
- def _setup_data_insert(setup_steps, data_to_add, step, order_index)
165
- level_index = 0
166
-
167
- _setup_data_after(data_to_add).each do |sAfterKey|
168
- setup_steps.each_index do |iStepToCheck|
169
- order_array = setup_steps[iStepToCheck][:order]
170
-
171
- order_array.each_index do |iLevelToCheck|
172
- data_to_ask = order_array[iLevelToCheck]
173
- order_to_check = data_to_ask.index(sAfterKey)
174
-
175
- next if order_to_check.nil?
176
-
177
- step = iStepToCheck if iStepToCheck > step
178
- level_index = iLevelToCheck if iLevelToCheck > level_index
179
- order_index = order_to_check + 1 if order_to_check + 1 > order_index
180
- break
181
- end
182
- end
161
+ def _setup_data_insert(step, data_to_add)
162
+ order_index = _setup_data_where?(step[:order], data_to_add)
163
+
164
+ if order_index.nil?
165
+ level_index = step[:order].keys.max
166
+ step[:order][level_index] << data_to_add
167
+ Lorj.debug(3, "%s/L%s/O%s: '%s' added in setup list at position.",
168
+ step[:name], level_index,
169
+ step[:order][level_index].length - 1,
170
+ data_to_add)
171
+ return
183
172
  end
184
-
185
- setup_steps[step][:order][level_index].insert(order_index, data_to_add)
186
- Lorj.debug(3, "S%s/L%s/O%s: '%s' added in setup list at position.",
187
- step, level_index, order_index, data_to_add)
173
+ step[:order][order_index[0]].insert(order_index[1], data_to_add)
174
+ Lorj.debug(3, "%s/L%s/O%s: '%s' added in setup list at position.",
175
+ step[:name], order_index[0], order_index[1], data_to_add)
188
176
  end
189
177
 
190
178
  # Internal function to get :after list of data to ask.
@@ -198,13 +186,51 @@ module Lorj
198
186
  #
199
187
  # * *Raises* :
200
188
  #
201
- def _setup_data_after(data_to_check)
189
+ def _setup_data_where?(order, data_to_check)
190
+ res = _setup_data_position?(order, data_to_check)
191
+
192
+ return nil if res.nil?
193
+
194
+ after_index, before_index, after, before = res
195
+
196
+ if after_index.nil? || before_index.nil?
197
+ return before_index if after_index.nil?
198
+ return after_index
199
+ end
200
+
201
+ if after_index[0] > before_index[0] ||
202
+ (after_index[0] == before_index[0] && after_index[1] > before_index[1])
203
+ PrcLib.warning("Unable to insert '%s' attribute before '%s' (pos %s)"\
204
+ " and after '%s' (pos %s). "\
205
+ "'%s' will be added at the end.",
206
+ data_to_check, before, before_index, after, after_index,
207
+ data_to_check)
208
+ return nil
209
+ end
210
+
211
+ after_index
212
+ end
213
+
214
+ def _setup_data_position?(order, data_to_check)
202
215
  meta = _get_meta_data(data_to_check)
203
- return [] unless meta.rh_exist?(:after)
216
+ return nil if meta.nil?
217
+ return nil unless meta.rh_exist?(:after) || meta.rh_exist?(:before)
218
+
219
+ after = meta.rh_get(:after)
220
+ before = meta.rh_get(:before)
221
+ after_index = nil
222
+ before_index = nil
223
+
224
+ order.each do |k, attrs|
225
+ attrs.each do |attr_name|
226
+ after_index = [k, attrs.index(attr_name) + 1] if after == attr_name
227
+ before_index = [k, attrs.index(attr_name)] if before == attr_name
228
+ end
229
+ end
204
230
 
205
- datas_after = meta[:after]
206
- datas_after = [datas_after] unless datas_after.is_a?(Array)
207
- datas_after
231
+ return nil if after_index.nil? && before_index.nil?
232
+
233
+ [after_index, before_index, after, before]
208
234
  end
209
235
 
210
236
  # check if a config data is already listed in the setup list at a specific
@@ -217,149 +243,11 @@ module Lorj
217
243
  # * *returns* :
218
244
  # - true if found. false otherwise.
219
245
  def _setup_attr_already_added?(order_array, data_to_check)
220
- order_array.each_index do |order_index|
246
+ order_array.each_key do |order_index|
221
247
  attributes = order_array[order_index]
222
248
  return true unless attributes.index(data_to_check).nil?
223
249
  end
224
250
  false
225
251
  end
226
-
227
- # Add the attribute parameter to setup list
228
- # at the right position, determined by it dependencies.
229
- #
230
- # The attribute can be added only if :account is true. Data set in
231
- # the application defaults.yaml:
232
- # :sections/<Section>/<Attribute>/:account: true
233
- #
234
- # Attributes dependency is first loaded by the lorj object model
235
- # Each attributes can add more dependency thanks to the application
236
- # defaults.yaml:
237
- # :sections/<Section>/<Attribute>/:depends_on (Array of attributes)
238
- #
239
- # The attribute step can be set from defaults.yaml as well:
240
- # :sections/<Section>/<Attribute>/:ask_step (FixNum)
241
- #
242
- # The attribute can be asked at a determined index, set in
243
- # the application defaults.yaml:
244
- # :sections/<Section>/<Attribute>/:ask_sort: (FixNum)
245
- #
246
- # parameters :
247
- # - +setup_steps+ : setup steps
248
- # - +attr_name+ : Attribute to add
249
- def _setup_obj_param_is_data(setup_steps, inspected_objects, attr_name)
250
- if inspected_objects.include?(attr_name)
251
- Lorj.debug(2, "#{attr_name} is already asked. Ignored.")
252
- return false
253
- end
254
-
255
- meta = _get_meta_data(attr_name)
256
- return false unless meta.is_a?(Hash)
257
-
258
- ask_step = 0
259
- ask_step = meta[:ask_step] if meta[:ask_step].is_a?(Fixnum)
260
-
261
- Lorj.debug(3, "#{attr_name} is part of setup step #{ask_step}")
262
- order_array = setup_steps[ask_step][:order]
263
-
264
- unless meta[:account].is_a?(TrueClass)
265
- Lorj.debug(2, "'%s' won't be asked during setup."\
266
- ' :account = true not set.', attr_name)
267
- return false
268
- end
269
-
270
- level_index = _setup_level_index(order_array, attr_name,
271
- meta[:depends_on])
272
-
273
- return true if order_array[level_index].include?(attr_name)
274
-
275
- level = _setup_attr_add(order_array[level_index], attr_name, meta,
276
- level_index)
277
- Lorj.debug(3, "S%s/L%s/%s: '%s' added in setup list. ",
278
- ask_step, level, level_index, attr_name)
279
-
280
- true
281
- end
282
-
283
- # Function to identify level index for an attribute.
284
- #
285
- # parameters:
286
- # - +order_array+ : array of levels of attributes ordered.
287
- # - +attr_name+ : attribute name
288
- # - +depends_on+ : Dependency Array.
289
- #
290
- # return:
291
- # - level_index to use.
292
- def _setup_level_index(order_array, attr_name, depends_on)
293
- if !depends_on.is_a?(Array)
294
- PrcLib.warning("'%s' depends_on definition have to be"\
295
- ' an array.',
296
- attr_name) unless depends_on.nil?
297
- 0
298
- else
299
- _setup_find_dep_level(order_array, depends_on)
300
- end
301
- end
302
-
303
- # Function to add an attribute to the level layer of the setup array .
304
- #
305
- # parameters:
306
- # - +level_array+ : array of attributes ordered.
307
- # - +attr_name+ : attribute name
308
- # - +order_index+ : order index where to insert the attribute.
309
- #
310
- def _setup_attr_add(level_array, attr_name, meta, level_index)
311
- if meta[:ask_sort].is_a?(Fixnum)
312
- order_index = meta[:ask_sort]
313
- _setup_attr_add_at(level_array, attr_name, order_index)
314
- Lorj.debug(3, "S%s/L%s/O%s: '%s' added in setup list. ",
315
- meta[:ask_step], level_index, order_index, attr_name)
316
- "O#{level_index}"
317
- else
318
- level_array << attr_name
319
- Lorj.debug(3, "S%s/L%s/Last: '%s' added in setup list.",
320
- meta[:ask_step], level_index, attr_name)
321
- 'Last'
322
- end
323
- end
324
-
325
- # Function to insert an attribute at a specific order.
326
- # It will shift other attributes if needed.
327
- #
328
- # parameters:
329
- # - +level_array+ : array of attributes ordered.
330
- # - +attr_name+ : attribute name
331
- # - +order_index+ : order index where to insert the attribute.
332
- #
333
- def _setup_attr_add_at(level_array, attr_name, order_index)
334
- if level_array[order_index].nil?
335
- level_array[order_index] = attr_name
336
- else
337
- level_array.insert(order_index, attr_name)
338
- end
339
- end
340
-
341
- # Search for the lowest step to ask an attribute, thanks to dependencies.
342
- #
343
- # parameters:
344
- # - +order_array+ : Array of attributes, at 2 dimensions [step then order]
345
- # - +attr_dep+ : Array of attributes/objects needed before this
346
- # attribute.
347
- #
348
- # returns:
349
- # - the lowest step index where the attribute can be added.
350
- def _setup_find_dep_level(order_array, attr_dep)
351
- level_index = 0
352
-
353
- attr_dep.each do |depend_key|
354
- order_array.each_index do |iCurLevel|
355
- if order_array[iCurLevel].include?(depend_key)
356
- level_index = [level_index, iCurLevel + 1].max
357
- end
358
- end
359
- order_array[level_index] = [] if order_array[level_index].nil?
360
- end
361
-
362
- level_index
363
- end
364
252
  end
365
253
  end
@@ -57,6 +57,8 @@ module Lorj
57
57
  section = _get_account_section(data)
58
58
  # We set the value only if there is a value entered by the user.
59
59
  unless section.nil? || value.nil?
60
+ Lorj.debug(3, "'%s'/'%s': Setting value to '%s'",
61
+ section, data, value)
60
62
  @config.set(data, value, :name => 'account', :section => section)
61
63
  end
62
64
 
@@ -130,7 +132,7 @@ module Lorj
130
132
  # - +desc+ : Data description
131
133
  # - +options+ : Used when user have to enter a string instead of
132
134
  # selecting from a list.
133
- # - +:default_value+ : predfined default value.
135
+ # - +:default_value+ : predefined default value.
134
136
  #
135
137
  # if data model defines :default_value. => choose it
136
138
  # In this last case, the :default_value is interpreted by ERB.
@@ -159,12 +161,14 @@ module Lorj
159
161
  default = result[:default_value] unless result[:default_value].nil?
160
162
 
161
163
  begin
164
+ Lorj.debug(3, "'%s': ERB on default value '%s'", data, default)
162
165
  default = erb(default) unless default.nil?
163
166
  rescue => e
164
167
  PrcLib.warning("ERB error with :%s/:default_value '%s'.\n%s",
165
168
  data, result[:default_value], e.message)
166
169
  else
167
170
  default = nil if default == ''
171
+ Lorj.debug(3, "'%s': default value '%s'", data, default)
168
172
  options[:default_value] = default
169
173
  end
170
174
 
@@ -207,6 +211,11 @@ module Lorj
207
211
  #
208
212
  def _setup_choose_data_from_list(data, desc, list, options)
209
213
  default = @config.get(data, options[:default_value])
214
+ Lorj.debug(3, "'%s': Getting value from config - '%s'(from '%s' - "\
215
+ "sections '%s')"\
216
+ " (default is '%s')",
217
+ data, default, @config.where?(data), Lorj.data.sections(data),
218
+ options[:default_value])
210
219
 
211
220
  say_msg = format("Select '%s' from the list:", desc)
212
221
  say_msg += format(' |%s|', default) unless default.nil?
@@ -259,18 +268,24 @@ module Lorj
259
268
  if default.nil? && !options[:default_value].nil?
260
269
  begin
261
270
  default = erb(options[:default_value])
271
+ Lorj.debug(3, "'%s': Running ERB for default_value '%s' = '%s'",
272
+ data, options[:default_value], default)
262
273
  rescue => e
263
274
  PrcLib.warning("ERB error with :%s/:default_value '%s'.\n%s",
264
275
  data, options[:default_value], e.message)
265
276
  end
266
277
  end
267
- default = @config.get(data, default)
278
+ ask_default = @config.get(data, default)
279
+ Lorj.debug(3, "'%s': Getting value from config - '%s'(from '%s' - "\
280
+ "sections '%s') (default is '%s')",
281
+ data, ask_default, @config.where?(data),
282
+ Lorj.data.sections(data), default)
268
283
 
269
284
  # validate_proc = options[:validate_function]
270
285
  proc_ask = options[:ask_function]
271
286
 
272
287
  if proc_ask.nil?
273
- value = _ask(desc, default, valid_regex, is_encrypted, is_required)
288
+ value = _ask(desc, ask_default, valid_regex, is_encrypted, is_required)
274
289
  else
275
290
  value = @process.method(proc_ask)
276
291
  end