class Twb::Analysis::SheetFieldsAnalyzer

Attributes

localEmit[RW]

Public Class Methods

new(**args) click to toggle source
# File lib/twb/analysis/Sheets/sheetfieldsanalyzer.rb, line 44
def initialize(**args)
  @args      = args
  @recordDir = !@args.nil? && @args[:recordDir] == true
  @ttdocdir  = @args[:ttdocdir]
  @csvAdd    = args[:csvMode] == :add
  @csvMode   = @csvAdd ? 'a' : 'w'
  # @localEmit = true
  init
  @funcdoc   = {:class=>self.class, :blurb=>'Analyze Worksheet Fields', :description=>nil,}
  #--
  docFileName      = docFile('WorksheetFields.csv')
  @sheetFieldsCSV  = CSV.open(docFileName,@csvMode)
  unless @csvAdd
    if @recordDir
      @sheetFieldsCSV  << ['Rec #','Workbook','Workbook Modified','Worksheet','Data Source','Data Source (tech)','Field','Field (tech)','Usage','Usage - code','Workbook Dir']
    else
      @sheetFieldsCSV  << ['Rec #','Workbook','Workbook Modified','Worksheet','Data Source','Data Source (tech)','Field','Field (tech)','Usage','Usage - code'               ]
    end
  end
  addDocFile @sheetFieldsCSV, docFileName, "Workbooks, Worksheets, and the Sheets' Data Sources and Fields"
  #--
  @twbCnt     = 0
  @sheetCnt   = 0
  @fieldsCnt  = 0
  @recNum     = 0
end

Public Instance Methods

metrics() click to toggle source
# File lib/twb/analysis/Sheets/sheetfieldsanalyzer.rb, line 71
def metrics
  {
    # '# of Workbooks'         => @twbcount,
    '# of Worksheets'        => @sheetCnt,
    '# of Worksheet Fields'  => @fieldsCnt
  }
end
processTWB(twb) click to toggle source
# File lib/twb/analysis/Sheets/sheetfieldsanalyzer.rb, line 79
def processTWB twb
   @twb = twb
   @modTime = @twb.modtime
   emit "   -- twb:: #{@twb.name}"
   @twbCnt += 1
   @twbDomainsLoaded = false
   parseSheets
   finis
end

Private Instance Methods

ftc(type) click to toggle source
# File lib/twb/analysis/Sheets/sheetfieldsanalyzer.rb, line 218
def ftc type   # ftc : abbr for fieldTypeCode, for brevity
  @@fieldTypeCodes[type].nil? ? type : @@fieldTypeCodes[type]
end
parseSheets() click to toggle source
# File lib/twb/analysis/Sheets/sheetfieldsanalyzer.rb, line 91
def parseSheets
  @worksheets  = @twb.worksheets
  @worksheets.each do |sheet|
    @sheetName  = sheet.name
    @sheetCnt  += 1
    emit "SHEET: #{@sheetName}"
    showFields sheet unless sheet.datasourceFields.nil?
  end
end
recordCSV(record) click to toggle source
# File lib/twb/analysis/Sheets/sheetfieldsanalyzer.rb, line 208
def recordCSV record
  numberedRec = [@recNum+=1] + record
  if @recordDir
    @sheetFieldsCSV  << numberedRec.push(@twb.dir)
  else
    @sheetFieldsCSV  << numberedRec
  end
  @sheetFields[record[2]] << record[4]
end
recordDBFields(sheet) click to toggle source
# File lib/twb/analysis/Sheets/sheetfieldsanalyzer.rb, line 115
def recordDBFields sheet
  fields = sheet.datasourceFields
  emit "def recordDBFields sheet: #{sheet.name} #FIELDS: #{fields.length}"
  fields.each do |dsName, dsfields|
    ds = @twb.datasource dsName
    emit "      ds: #{dsName}"
    emit "        - #{ds.uiname}"
    emit "        : #{ds.class}"
    dsfields.each do |sheetField|
       @fieldsCnt += 1
       emit "       f: #{sheetField}"
       emit "       c: #{sheetField.class}"
       fuiName = ds.fieldUIName sheetField #Fields[sheetField]
       recordCSV [@twb.name, @modTime, @sheetName, ds.uiname, dsName, sheetField.uiname, sheetField.name, 'DB ref', ftc('DB ref')]
    end
  end
end
recordDSFilterFields(sheet) click to toggle source
# File lib/twb/analysis/Sheets/sheetfieldsanalyzer.rb, line 179
def recordDSFilterFields sheet
  sheet.slicesFields.each do |field|
      dsName   = field.dataSource
      ds       = @twb.datasource dsName
      dsUIName = ds.uiname
      ds.filters.each do |filter|
        recordCSV [@twb.name, @modTime, @sheetName, dsUIName, dsName, filter.uiname, filter.name, 'dsfilter', ftc('dsfilter')]
      end
  end
end
recordEncodedFields(sheet) click to toggle source
# File lib/twb/analysis/Sheets/sheetfieldsanalyzer.rb, line 149
def recordEncodedFields sheet
  unless sheet.encodedFields.nil?
    sheet.encodedFields.each do |type,fields|
      fields.each do |field|
        dsName  = field.dataSource
        ds      = @twb.datasource dsName
        fuiName = ds.fieldUIName field.name
        recordCSV [@twb.name, @modTime, @sheetName, ds.uiname, dsName, fuiName, field.name, type, ftc(type)]
      end
    end
  end
end
recordFilterFields(sheet) click to toggle source
# File lib/twb/analysis/Sheets/sheetfieldsanalyzer.rb, line 162
def recordFilterFields sheet
  filters = sheet.filters
  filters.each do |filter|
    dsName   = filter.dataSource.name
    dsUIName = filter.dataSource.uiname
    recordCSV [@twb.name, @modTime, @sheetName, dsUIName, dsName, filter.uiname, filter.name, 'filter', ftc('filter')]
  end
end
recordPageFields(sheet) click to toggle source
# File lib/twb/analysis/Sheets/sheetfieldsanalyzer.rb, line 171
def recordPageFields sheet
  sheet.pageFields.each do |pfield|
    ds = @twb.datasource pfield.dataSource
    fuiname = ds.fieldUIName pfield.name
    recordCSV [@twb.name, @modTime, @sheetName, ds.uiname, ds.name, fuiname, pfield.name, 'page', ftc('page')]
  end
end
recordRCFields(fields, usage) click to toggle source
# File lib/twb/analysis/Sheets/sheetfieldsanalyzer.rb, line 133
def recordRCFields fields, usage
  emit "def recordRCFields #fields: #{fields.length}  \t #{fields}"
  fields.each do |cf|
    emit "coded field: #{cf}"
    fldName = cf.name
    dsName  = cf.dataSource
    ds      = @twb.datasource dsName
    emit "DATASOURCE : #{ds.class} "  #{ }" #{ds}"
    fuiName = ds.fieldUIName cf.name
    emit "      ds: #{dsName}"
    emit "        - #{ds.uiname}"
    emit "        : #{ds.class}"
    recordCSV [@twb.name, @modTime, @sheetName, ds.uiname, dsName, fuiName, fldName, usage, ftc(usage)]
  end
end
recordSlicesFields(sheet) click to toggle source
# File lib/twb/analysis/Sheets/sheetfieldsanalyzer.rb, line 190
def recordSlicesFields sheet
  sheet.slicesFields.each do |field|
    dsName   = field.dataSource
    ds       = @twb.datasource dsName
    dsuiname = ds.uiname
    fuiName  = ds.fieldUIName field.name
    recorded = @sheetFields.key?(dsuiname) && @sheetFields[dsuiname].include?(fuiName)
    emit "      # #{@sheetFields.inspect}"
    emit "      - %-6s  %-25s  -> %-s" % [recorded, dsuiname, fuiName]
    unless recorded
      recordCSV [@twb.name, @modTime, @sheetName, dsuiname, dsName, fuiName, field.name, 'slice', ftc('slice')]
      emit "      - recorded"
    end
    emit "--"
  end
  emit "\n "
end
showFields(sheet) click to toggle source
# File lib/twb/analysis/Sheets/sheetfieldsanalyzer.rb, line 101
def showFields sheet
  @sheetFields = Hash.new { |ds,fields| ds[fields] = Set.new }
  # recordCSV [@twb.name, @sheetName, nil, nil, nil, nil, nil]
  emit "Sheet: #{@sheetName}"
  recordDBFields       sheet
  recordRCFields       sheet.rowFields, :row
  recordRCFields       sheet.colFields, :column
  recordEncodedFields  sheet
  recordFilterFields   sheet
  recordPageFields     sheet
  recordDSFilterFields sheet
  recordSlicesFields   sheet
end