Module: CSVifier
Defined Under Namespace
Modules: CSVifierClassMethods
Constant Summary
BaseDatafier::BASE_HARVEST_DATA_FIELDS, BaseDatafier::DETAILS_PROPERTY_FIELDS
Instance Attribute Summary
Attributes included from FileProvider
#file_name
Class Method Summary
collapse
Instance Method Summary
collapse
backupFile, #backupFile, dataDir, dataDir=, #dataTextFile, getBackupFileName, getDataDir, getDataFileName, getDir, getLogDir, localDir, localDir=, logDir, logDir=, #openLogFile, #removeFile
#flattenTextLines, #now, #numify
Class Method Details
.included(base) ⇒ Object
11
12
13
|
# File 'lib/datafy/CSVifier.rb', line 11
def included(base)
base.extend CSVifierClassMethods
end
|
Instance Method Details
#csvRecord ⇒ Object
350
351
352
353
354
355
356
357
358
359
|
# File 'lib/datafy/CSVifier.rb', line 350
def csvRecord
logger.debug "#{self.class}::#{__method__}"
rec = CSV::Row.new( self.data_fields.keys, [] )
self.data_fields.each do |fieldName,parts|
value = send(parts[:property])
logger.debug "fieldName: '#{fieldName}' => :#{parts[:property]} ==> #{value} nil?#{value.nil?}"
rec[fieldName] = value
end
return rec
end
|
#data_fields ⇒ Object
257
258
259
|
# File 'lib/datafy/CSVifier.rb', line 257
def data_fields
self.class.data_fields
end
|
#details ⇒ Object
376
377
378
|
# File 'lib/datafy/CSVifier.rb', line 376
def details
@details ||= Hash.new { |k,v| k[v] = Set.new }
end
|
#details_fields ⇒ Object
261
262
263
|
# File 'lib/datafy/CSVifier.rb', line 261
def details_fields
self.class.details_fields
end
|
#detailsCSVRecords ⇒ Object
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
|
# File 'lib/datafy/CSVifier.rb', line 411
def detailsCSVRecords
logger.debug "#{self.class}::#{__method__}"
@detailsCSVRecords = Set.new
begin
details.each do |detail,lines|
@detail = detail
field = properties[detail]
lines.each_with_index do |line,index|
rec = CSV::Row.new( details_fields.keys, [] )
details_fields.each do |fieldName,parts|
prop = parts[:property]
resp = respond_to?(prop)
if resp
value = send(prop)
rec[fieldName] = value
end
end
rec['Class'] = self.class rec['Detail'] = field
rec['Index'] = index + 1
rec['Line'] = line
rec['Harvest When'] = @harvestWhen.nil? ? now : detail.eql?(:harvestWhen) ? now : harvestWhen
rec['Persist When'] = @persistWhen.nil? ? now : persistWhen
@detailsCSVRecords << rec
end
end
rescue => e
registerError e
end
return @detailsCSVRecords
end
|
#harvest ⇒ Object
265
266
267
|
# File 'lib/datafy/CSVifier.rb', line 265
def harvest
harvestNow
end
|
#harvestNow ⇒ Object
269
270
271
272
|
# File 'lib/datafy/CSVifier.rb', line 269
def harvestNow
record( property: :harvestWhen, value: now, append: false )
return now
end
|
#logFileName ⇒ Object
253
254
255
|
# File 'lib/datafy/CSVifier.rb', line 253
def logFileName
self.class.logFileName
end
|
#logger ⇒ Object
module CSVifierClassMethods
248
249
250
251
|
# File 'lib/datafy/CSVifier.rb', line 248
def logger
self.class.logger
end
|
#persist(*args, persist_when: nil, append: true, close_on_exit: true) ⇒ Object
502
503
504
505
506
507
508
|
# File 'lib/datafy/CSVifier.rb', line 502
def persist(*args, persist_when: nil, append: true, close_on_exit: true)
logger.debug "#{self.class}::#{__method__} args:#{args}"
record( property: :persistWhen, value: persist_when.nil? ? now : persist_when, append: append )
persist_data
persist_details
self.class.closeCSVFiles if close_on_exit
end
|
#persist_data ⇒ Object
473
474
475
476
477
478
479
480
481
482
483
484
485
486
|
# File 'lib/datafy/CSVifier.rb', line 473
def persist_data
logger.debug "#{self.class}::#{__method__}"
begin
persistWhen
file = self.class.csv_files[:data]
$fields_file = file
unless file.nil?
file << csvRecord
end
rescue => e
logger.error "ERROR persisting CSV fields aka csvRecord:'#{e.message}'"
end
end
|
#persist_details ⇒ Object
488
489
490
491
492
493
494
495
496
497
498
499
500
|
# File 'lib/datafy/CSVifier.rb', line 488
def persist_details
logger.debug "#{self.class}::#{__method__}"
begin
file = self.class.csv_files[:details]
$details_file = file
detailsCSVRecords.each do |rec|
file << rec
end
return
rescue => e
logger.error "ERROR persisting CSV data in details form:'#{e.message}'"
end
end
|
#persistWhen ⇒ Object
274
275
276
277
278
|
# File 'lib/datafy/CSVifier.rb', line 274
def persistWhen
record( property: :persistWhen, value: now, append: false )
return now
end
|
#printCSVRecord ⇒ Object
361
362
363
364
365
366
367
368
369
370
371
372
373
374
|
# File 'lib/datafy/CSVifier.rb', line 361
def printCSVRecord
logger.debug "#{self.class}::#{__method__}"
rec = csvRecord
maxLen = rec..max_by(&:length).length
puts "CSV Record"
puts '=' * (maxLen)
unless rec.nil? || rec.empty?
rec.each do |f,v|
puts "%-#{maxLen}s : %s " % [f,v]
end
puts '-' * maxLen
end
end
|
#printDataFields ⇒ Object
280
281
282
|
# File 'lib/datafy/CSVifier.rb', line 280
def printDataFields
self.class.printFields :data
end
|
#printDataFiles(show_fields = true) ⇒ Object
445
446
447
448
|
# File 'lib/datafy/CSVifier.rb', line 445
def printDataFiles show_fields=true
logger.debug "#{self.class}::#{__method__} show_fields:#{show_fields}"
self.class.printDataFiles show_fields
end
|
#printDetails ⇒ Object
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
|
# File 'lib/datafy/CSVifier.rb', line 392
def printDetails
logger.debug "#{self.class}::#{__method__}"
if details.empty?
msg = " - no details to print i.e. @details is nil or empty"
puts msg
logger.info msg
else
details.each do |type,lines|
puts "%s [%s]" % [properties[type],type]
lines.each do |line|
puts " - '#{line}'"
end
end
end
end
|
#printDetailsCSVRecords ⇒ Object
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
|
# File 'lib/datafy/CSVifier.rb', line 450
def printDetailsCSVRecords
logger.debug "#{self.class}::#{__method__}"
begin
puts "Details Records"
recs = detailsCSVRecords
if recs.nil? || recs.empty?
puts " - no details records exist to print"
else
maxLen = recs.first..max_by(&:length).length
puts '=' * maxLen
recs.each do |r|
r.entries.each do |e,v|
puts "%-#{maxLen}s : %s" % [e,v]
end
puts '-' * maxLen
end
end
rescue => e
registerError e
end
end
|
#printDetailsFields ⇒ Object
299
300
301
|
# File 'lib/datafy/CSVifier.rb', line 299
def printDetailsFields
self.class.printFields :details
end
|
#printFields(*args) ⇒ Object
284
285
286
287
|
# File 'lib/datafy/CSVifier.rb', line 284
def printFields *args
self.class.printFields *args
end
|
#printProperties ⇒ Object
294
295
296
297
|
# File 'lib/datafy/CSVifier.rb', line 294
def printProperties
logger.debug "#{self.class}::#{__method__} [i]"
self.class.printProperties
end
|
#properties ⇒ Object
289
290
291
292
|
# File 'lib/datafy/CSVifier.rb', line 289
def properties
logger.debug "#{self.class}::#{__method__} [i]"
self.class.properties
end
|
#record(property:, value:, append: true) ⇒ Object
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
|
# File 'lib/datafy/CSVifier.rb', line 303
def record(property:, value:, append: true)
logger.debug "#{self.class}::#{__method__}"
begin
if ''.eql?(value) || value.nil?
logger.debug " !!! NOT setting nil or empty property"
return
end
prop_name = property.is_a?(String) ? property : property.to_s
prop_name.sub!(/[=]+$/,'')
curr_val = send(prop_name)
assign_prop = prop_name.concat('=')
assign_val = if append && !curr_val.nil? && !value.eql?(curr_val)
"#{curr_val} | #{value}"
else
value
end
send(assign_prop, assign_val)
register_detail(property: property, value: value)
rescue => e
puts "#{self.class}::#{__method__} ERROR:#{e}"
end
end
|
#register_detail(property:, value:) ⇒ Object
Use this method to only add a Details line, it does not set the property
381
382
383
384
385
386
387
388
389
390
|
# File 'lib/datafy/CSVifier.rb', line 381
def register_detail(property:, value:)
logger.debug "#{self.class}::#{__method__} prop:'#{property.inspect}' value:'#{value}'"
return if value.nil? || ''.eql?(value)
detail = properties.has_key?([property]) ? properties[property] : property
deets = details
logger.debug " - details has new? #{deets[detail].include?(value)}"
unless (deets.has_key?(detail) && deets[detail].include?(value))
deets[detail] << value.to_s.strip end
end
|
#registerError(error) ⇒ Object
343
344
345
346
347
348
|
# File 'lib/datafy/CSVifier.rb', line 343
def registerError error
logger.debug "#{self.class}::#{__method__}"
record( property: :harvestSuccessful, value: false )
record( property: :harvestMessage, value: error.message[0..150].gsub("\n", ' | ') )
@errorMessage = error.full_message.to_s end
|
#resetDataFields ⇒ Object
326
327
328
329
330
331
332
333
|
# File 'lib/datafy/CSVifier.rb', line 326
def resetDataFields
data_fields.each do |fieldName,parts|
methodName = "#{parts[:property].to_s}="
methodName.gsub!(/[=]+$/,'=')
send(methodName,nil)
end
@errorMessage = nil
end
|
#resetDetails ⇒ Object
335
336
337
338
339
340
341
|
# File 'lib/datafy/CSVifier.rb', line 335
def resetDetails
logger.debug "#{self.class}::#{__method__}"
@details = Hash.new { |k,v| k[v] = Set.new }
@detailsCSVRecords = nil
logger.debug "Details : #{@details.inspect}"
logger.debug "CSV recs: #{@detailsCSVRecords.inspect}"
end
|
#to_s ⇒ Object
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
|
# File 'lib/datafy/CSVifier.rb', line 510
def to_s
str = "#{self.class}:: "
consts = self.class.constants.grep(/KEY/)
consts.each do |c|
fields = self.class.const_get(c)
fields.each do |name,prop|
str+= " -#{name}-|#{send(prop[:property])}|"
end
end
return str
end
|