class Twb::Analysis::DataSources::DataSourceFieldsAnalyzer

Attributes

csvFileName[R]
csvRecords[R]
dsCount[R]
fieldsCount[R]

Public Class Methods

csvFileNaame() click to toggle source
# File lib/twb/analysis/DataSources/datasourcefieldsanalyzer.rb, line 125
def self.csvFileNaame
  @@csvFileName
end
csvFileType() click to toggle source
# File lib/twb/analysis/DataSources/datasourcefieldsanalyzer.rb, line 121
def self.csvFileType
  @@csvFileType
end
csvHeader() click to toggle source
# File lib/twb/analysis/DataSources/datasourcefieldsanalyzer.rb, line 117
def self.csvHeader
  @@csvHeader
end
new(**args) click to toggle source
# File lib/twb/analysis/DataSources/datasourcefieldsanalyzer.rb, line 83
def initialize(**args)
  emit "DataSourceFieldsAnalyzer initialize(**args) args: #{args}"
  @args      = args
  @recordDir = !@args.nil? && @args[:recordDir] == true
  @ttdocdir  = @args[:ttdocdir]
  @csvAdd    = args[:csvMode] == :add
  @csvMode   = @csvAdd ? 'a' : 'w'
  init
  @funcdoc   = {:class=>self.class, :blurb=>'Analyze Data Source Fields', :description=>'Documents Data Source fields, with (some) technical information.',}
  #--
  detailsFileName = docFile(@@fullFileName)
  @csvFile        = CSV.open( detailsFileName,@csvMode )
  #--
  colsFileName    = docFile(@@colsFileName)
  @colsFile       = CSV.open( colsFileName,   @csvMode )
  
  #--
  unless @csvAdd
    if @recordDir
      @csvFile  << @@fullHeader + ['Workbook Dir']
      @colsFile << @@colsHeader + ['Workbook Dir']
    else
      @csvFile  << @@fullHeader
      @colsFile << @@colsHeader
    end
  end
  addDocFile @csvFile,  detailsFileName, "Workbooks, Data Sources, and Fields' details (technical use)."
  addDocFile @colsFile, colsFileName,    "Workbooks, Data Sources, and Column Fields."
  #--
  @dsCount     = 0
  @recNum      = 0
  @colFldNum   = 0
end

Public Instance Methods

metrics() click to toggle source

@@colsHeader = ['Field #',

 'Workbook',
 'Data Source',
 'Field - tech',
 'caption',
 'uiname',
 'alias',
 'datatype',
 'datatype-customized',
 'default-format',
 'param-domain-type',
 'role',
 'type',
 'value'
]
# File lib/twb/analysis/DataSources/datasourcefieldsanalyzer.rb, line 226
def metrics
  {
    '# of Data Sources'        => @dsCount,
    '# of Records'             => @recNum
  }
end
processColumnFields(ds) click to toggle source
# File lib/twb/analysis/DataSources/datasourcefieldsanalyzer.rb, line 188
def processColumnFields ds
  deepFields     = {}
  recordedFields = {}
  ds.columnFields.each do |field|
    if field.pathbare.eql? '/workbook/datasources/datasource/column'
      recordColField field
      recordedFields[field.name] = field
      # print '.'
    else
      deepFields[field.name] = field
      # print '-'
    end
  end
  deepFields.each do |name,field|
    unless recordedFields.has_key? name
      recordColField(field) 
      recordedFields[field.name] = field
      # print ':'
    end
  end
end
processTWB(twb) click to toggle source
# File lib/twb/analysis/DataSources/datasourcefieldsanalyzer.rb, line 129
def processTWB twb
  @twb = nil
  @twb         = twb                    if twb.instance_of? Twb::Workbook
  @twb         = Twb::Workbook.new(twb) if twb.instance_of? String
  @twbName     = @twb.name
  @twbDir      = @twb.dir
  raise ArgumentError.new("ERROR in Workbok processing: '#{twb}' must be a Workbook (class) or the name of a Workbook (String), is a #{twb.class} \n ") unless @twb.is_a? Twb::Workbook
  # --
  dss = @twb.datasources
  @fieldCnt = 0
  dss.each do |ds|
    @dsname = ds.uiname
    processColumnFields ds
    # puts "\n    -- #{ds.uiname} "
    # tables = Set.new
    # fields = {}
    @dsCount += 1
    fclasses = Set.new
    ds.localFields.each do |field|
      recordFieldFull field, :local
      # recordField( fields, field, {:type=>:local,:columnField=>true,:hidden=>field.hidden} )
      # emitTech( ds,     field.uiname, 'Local', field.properties)
      # recordTech( field, 'LocalA')
    end
    ds.columnFields.each do |field|
      recordFieldFull field, :column
      # recordField( fields, field, {:type=>'column',:columnField=>true,:hidden=>field.hidden} )
      # emitTech( ds,     field.uiname, 'Column', field.properties)
      # recordTech( field, 'ColumnA')
    end
    ds.calculatedFields.each do |field|
      recordFieldFull field, :calc
      # puts "WWW #{field.class}  :: #{field} ::prop:: #{field.properties.class} :: #{field.properties}"
      # recordField( fields, field, {:type=>'calc',:calculatedField=>true,:hidden=>field.hidden} )
      # emitTech( ds,     field.uiname, 'Calculated', field.properties)
      # recordTech( field, 'CalcA')
    end
    ds.metadataFields.each do |field|
      recordFieldFull field, :metadata
      # recordField( fields, field,   {:type=>'metadata',:metadataField=>true} )
      # emitTech( ds,     field.uiname, 'MetaData', field.properties)
      # recordTech( field, 'MetadataA')
    end
    ds.dbFields.each do |field|
      recordFieldFull field, :db
      # recordField( fields, field,    {:type=>'database',:dbField=>true} )
      # emitTech( ds,     field.uiname, 'Db', field.properties)
      # recordTech( field, 'DbA')
    end
    ds.mappedFields.each do |field|
      recordFieldFull field, :mapped
      # recordField( fields, field,    {:type=>'mapped',:mappedField=>true} )
      # emitTech( ds,     field.uiname, 'Mapped', field.properties)
      # recordTech( field, 'MappedA')
    end
    # emitFields(fields)
  end
end

Private Instance Methods

recordColField(field) click to toggle source

def recordCSV record

numberedRec = [@recNum+=1] + record
if @recordDir
  @csvFile  << numberedRec.push(@twb.dir)
else
  @csvFile  << numberedRec
end

end

# File lib/twb/analysis/DataSources/datasourcefieldsanalyzer.rb, line 246
def recordColField field
  numberedRec = [
                   @colFldNum +=1, 
                   @twbName,         
                   @dsname,      
                   field.name,    
                   field.caption, 
                   field.uiname,  
                   field.alias,   
                   field.dataType,   
                   field.datatypeCustomized, 
                   field.defaultFormat,   
                   field.paramDomainType,  
                   field.role,              
                   field.semanticRole,              
                   field.type,
                  !field.calcField.nil?,
                   field.value,
                   field.hidden,
                   field.pathbare
                ]
  #--
  if @recordDir
    @colsFile  << numberedRec.push(@twb.dir)
  else
    @colsFile  << numberedRec
  end
end
recordFieldFull(field, source) click to toggle source
# File lib/twb/analysis/DataSources/datasourcefieldsanalyzer.rb, line 275
def recordFieldFull field, source
  # print field.properties.nil? ? '-' : ":#{field.properties.length}"
  # puts field.properties
  @fieldCnt+=1
  field.properties.each do |name,value|
    # print name
    csvRec = [ @recNum+=1,
               @twb.name,
               # @twb.dir,
               @dsname,
               field.uiname,
               field.name,
               source,
               field.class,
               field.node.path.to_s.gsub(/[0-9]/,'').gsub('[]',''),
               name,
               value
             ]
    csvRec   << @twb.dir if @recordDir
    @csvFile << csvRec
  end
end