Class: Twb::FieldCalculation
- Includes:
- TabTool
- Defined in:
- lib/twb/fieldcalculation.rb
Constant Summary collapse
- @@tableCalcs =
attr_accessor :ttlogfile
[ 'FIRST', 'INDEX', 'LAST', 'SIZE', 'LOOKUP', 'PREVIOUS_VALUE', 'RANK', 'RANK_DENSE', 'RANK_MODIFIED', 'RANK_PERCENTILE', 'RANK_UNIQUE', 'RUNNING_AVG', 'RUNNING_COUNT', 'RUNNING_MAX', 'RUNNING_MIN', 'RUNNING_SUM', 'SCRIPT_BOOL', 'SCRIPT_INT', 'SCRIPT_REAL', 'SCRIPT_STR', 'TOTAL', 'WINDOW_SUM', 'WINDOW_AVG', 'WINDOW_COUNT', 'WINDOW_MIN', 'WINDOW_MEDIAN', 'WINDOW_MAX', 'WINDOW_PERCENTILE', 'WINDOW_STDEV', 'WINDOW_STDEVP', 'WINDOW_CORR', 'WINDOW_COVAR', 'WINDOW_COVARP', 'WINDOW_VAR', 'WINDOW_VARP' ]
Instance Attribute Summary collapse
-
#calcFields ⇒ Object
readonly
Returns the value of attribute calcFields.
-
#caption ⇒ Object
readonly
Returns the value of attribute caption.
-
#class ⇒ Object
readonly
Returns the value of attribute class.
-
#comments ⇒ Object
readonly
Returns the value of attribute comments.
-
#dataSource ⇒ Object
readonly
Returns the value of attribute dataSource.
-
#field ⇒ Object
readonly
Returns the value of attribute field.
-
#fieldNode ⇒ Object
readonly
Returns the value of attribute fieldNode.
-
#fields ⇒ Object
readonly
Returns the value of attribute fields.
-
#formula ⇒ Object
readonly
Returns the value of attribute formula.
-
#formulaFlat ⇒ Object
readonly
Returns the value of attribute formulaFlat.
-
#formulaFlatResolved ⇒ Object
readonly
Returns the value of attribute formulaFlatResolved.
-
#formulaLines ⇒ Object
readonly
Returns the value of attribute formulaLines.
-
#formulaLinesCount ⇒ Object
readonly
Returns the value of attribute formulaLinesCount.
-
#formulaResolved ⇒ Object
readonly
Returns the value of attribute formulaResolved.
-
#formulaResolvedLines ⇒ Object
readonly
Returns the value of attribute formulaResolvedLines.
-
#formulaUC ⇒ Object
readonly
Returns the value of attribute formulaUC.
-
#has_formula ⇒ Object
readonly
Returns the value of attribute has_formula.
-
#is_lod ⇒ Object
readonly
Returns the value of attribute is_lod.
-
#is_tableCalc ⇒ Object
readonly
Returns the value of attribute is_tableCalc.
-
#lodCodePos ⇒ Object
readonly
Returns the value of attribute lodCodePos.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#node ⇒ Object
readonly
Returns the value of attribute node.
-
#remoteFields ⇒ Object
readonly
Returns the value of attribute remoteFields.
-
#scopeIsolation ⇒ Object
readonly
Returns the value of attribute scopeIsolation.
-
#uiname ⇒ Object
readonly
Returns the value of attribute uiname.
-
#uuid ⇒ Object
readonly
Returns the value of attribute uuid.
Attributes included from TabTool
#alerts, #docDir, #docfiles, #funcdoc, #licensed, #logfilename, #logger, #loglevel, #metrics, #properties, #ttdocdir, #type
Attributes inherited from TabClass
#properties, #ttlogfile, #ttlogfilename, #type
Instance Method Summary collapse
- #attribText(node, attribute) ⇒ Object
- #enlineResolvedFormula ⇒ Object
- #flattenFormula(lines) ⇒ Object
- #flattenResolvedFormula ⇒ Object
- #getComments(lines) ⇒ Object
- #id ⇒ Object
-
#initialize(calcField, datasource = nil) ⇒ FieldCalculation
constructor
A new instance of FieldCalculation.
- #parseFormFields ⇒ Object
- #resolveFormula ⇒ Object
Methods included from TabTool
#addDocFile, #alert, #closeDocFiles, #config, #docFile, #docFileMaxNameLen, #docfilesdoc, #docfilesdocto_s, #emit, #emitCSV, #finis, #hasConfig, #init, #initCSV, #initDocDir, #initLogger, #license=, #licensed?, #loadConfig
Methods inherited from TabClass
#docFile, #emit, #setDocFileName
Constructor Details
#initialize(calcField, datasource = nil) ⇒ FieldCalculation
Returns a new instance of FieldCalculation.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 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 |
# File 'lib/twb/fieldcalculation.rb', line 56 def initialize(calcField, datasource=nil) raise ArgumentError.new("FieldCalculation must be initialized with a CalculatedField, has been provided with a #{calcField.class}") if calcField.class != Twb::CalculatedField init # initLogger @field = calcField calcNode = calcField.node @istableCalc = false # @localEmit = false emit "FieldCalculation calcNode.nil? :: #{calcNode.nil?} " unless calcNode.nil? @node = calcNode.at_xpath('./calculation') @fieldNode = calcField.node @dataSource = datasource @class = attribText(@node, 'class') @remoteFields = {} if 'categorical-bin'.eql? @class @name = @node.attribute('column').text.gsub(/^\[|\]$/,'') # assumes the column attribute exists @caption = attribText(@fieldNode, 'caption') uiname = if datasource.nil? @name else datasource.fieldUIName(@name) end @uiname = "#{uiname} <<group>>" @has_formula = true @formula = "grouped <<[#{uiname}]>> values" @formulaLines = [ @formula ] @formulaFlat = @formula @comments = [ ] @is_lod = false else @caption = calcField. @name = calcField.name @uiname = calcField.uiname #-- @scopeIsolation = attribText(@node, 'scope-isolation') #-- Formula -- @has_formula = @node.has_attribute?('formula') if @has_formula @formula = @node.attribute('formula').text.gsub(/\r\n/,"\n") emit "\n-- init: #{@formula}" @formulaUC = @formula.upcase @formulaLines = formula.split(/\n|\r\n/) @formulaFlat = flattenFormula(@formulaLines) @comments = getComments(@formulaLines) @lodCodePos = @formula =~ /^[ ]*{[ ]*(fixed|include|exclude)[ ]*/i @is_lod = !lodCodePos.nil? && @lodCodePos >= 0 @is_tableCalc = @@tableCalcs.any? { |tc| @formulaUC.include?(tc) } #assessTableCalc @formula # puts "#{@lodCodePos} \t #{@is_lod} \t #{@is_lod.class} \t => #{@formula}" end end end end |
Instance Attribute Details
#calcFields ⇒ Object (readonly)
Returns the value of attribute calcFields.
38 39 40 |
# File 'lib/twb/fieldcalculation.rb', line 38 def calcFields @calcFields end |
#caption ⇒ Object (readonly)
Returns the value of attribute caption.
27 28 29 |
# File 'lib/twb/fieldcalculation.rb', line 27 def @caption end |
#class ⇒ Object (readonly)
Returns the value of attribute class.
37 38 39 |
# File 'lib/twb/fieldcalculation.rb', line 37 def class @class end |
#comments ⇒ Object (readonly)
Returns the value of attribute comments.
39 40 41 |
# File 'lib/twb/fieldcalculation.rb', line 39 def comments @comments end |
#dataSource ⇒ Object (readonly)
Returns the value of attribute dataSource.
26 27 28 |
# File 'lib/twb/fieldcalculation.rb', line 26 def dataSource @dataSource end |
#field ⇒ Object (readonly)
Returns the value of attribute field.
26 27 28 |
# File 'lib/twb/fieldcalculation.rb', line 26 def field @field end |
#fieldNode ⇒ Object (readonly)
Returns the value of attribute fieldNode.
26 27 28 |
# File 'lib/twb/fieldcalculation.rb', line 26 def fieldNode @fieldNode end |
#fields ⇒ Object (readonly)
Returns the value of attribute fields.
38 39 40 |
# File 'lib/twb/fieldcalculation.rb', line 38 def fields @fields end |
#formula ⇒ Object (readonly)
Returns the value of attribute formula.
29 30 31 |
# File 'lib/twb/fieldcalculation.rb', line 29 def formula @formula end |
#formulaFlat ⇒ Object (readonly)
Returns the value of attribute formulaFlat.
32 33 34 |
# File 'lib/twb/fieldcalculation.rb', line 32 def formulaFlat @formulaFlat end |
#formulaFlatResolved ⇒ Object (readonly)
Returns the value of attribute formulaFlatResolved.
33 34 35 |
# File 'lib/twb/fieldcalculation.rb', line 33 def formulaFlatResolved @formulaFlatResolved end |
#formulaLines ⇒ Object (readonly)
Returns the value of attribute formulaLines.
34 35 36 |
# File 'lib/twb/fieldcalculation.rb', line 34 def formulaLines @formulaLines end |
#formulaLinesCount ⇒ Object (readonly)
Returns the value of attribute formulaLinesCount.
34 35 36 |
# File 'lib/twb/fieldcalculation.rb', line 34 def formulaLinesCount @formulaLinesCount end |
#formulaResolved ⇒ Object (readonly)
Returns the value of attribute formulaResolved.
31 32 33 |
# File 'lib/twb/fieldcalculation.rb', line 31 def formulaResolved @formulaResolved end |
#formulaResolvedLines ⇒ Object (readonly)
Returns the value of attribute formulaResolvedLines.
34 35 36 |
# File 'lib/twb/fieldcalculation.rb', line 34 def formulaResolvedLines @formulaResolvedLines end |
#formulaUC ⇒ Object (readonly)
Returns the value of attribute formulaUC.
30 31 32 |
# File 'lib/twb/fieldcalculation.rb', line 30 def formulaUC @formulaUC end |
#has_formula ⇒ Object (readonly)
Returns the value of attribute has_formula.
28 29 30 |
# File 'lib/twb/fieldcalculation.rb', line 28 def has_formula @has_formula end |
#is_lod ⇒ Object (readonly)
Returns the value of attribute is_lod.
36 37 38 |
# File 'lib/twb/fieldcalculation.rb', line 36 def is_lod @is_lod end |
#is_tableCalc ⇒ Object (readonly)
Returns the value of attribute is_tableCalc.
35 36 37 |
# File 'lib/twb/fieldcalculation.rb', line 35 def is_tableCalc @is_tableCalc end |
#lodCodePos ⇒ Object (readonly)
Returns the value of attribute lodCodePos.
36 37 38 |
# File 'lib/twb/fieldcalculation.rb', line 36 def lodCodePos @lodCodePos end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
27 28 29 |
# File 'lib/twb/fieldcalculation.rb', line 27 def name @name end |
#node ⇒ Object (readonly)
Returns the value of attribute node.
26 27 28 |
# File 'lib/twb/fieldcalculation.rb', line 26 def node @node end |
#remoteFields ⇒ Object (readonly)
Returns the value of attribute remoteFields.
38 39 40 |
# File 'lib/twb/fieldcalculation.rb', line 38 def remoteFields @remoteFields end |
#scopeIsolation ⇒ Object (readonly)
Returns the value of attribute scopeIsolation.
37 38 39 |
# File 'lib/twb/fieldcalculation.rb', line 37 def scopeIsolation @scopeIsolation end |
#uiname ⇒ Object (readonly)
Returns the value of attribute uiname.
27 28 29 |
# File 'lib/twb/fieldcalculation.rb', line 27 def uiname @uiname end |
#uuid ⇒ Object (readonly)
Returns the value of attribute uuid.
39 40 41 |
# File 'lib/twb/fieldcalculation.rb', line 39 def uuid @uuid end |
Instance Method Details
#attribText(node, attribute) ⇒ Object
118 119 120 |
# File 'lib/twb/fieldcalculation.rb', line 118 def attribText(node, attribute) node.attribute(attribute).nil? ? nil : node.attribute(attribute).text end |
#enlineResolvedFormula ⇒ Object
183 184 |
# File 'lib/twb/fieldcalculation.rb', line 183 def enlineResolvedFormula end |
#flattenFormula(lines) ⇒ Object
195 196 197 198 199 200 201 202 |
# File 'lib/twb/fieldcalculation.rb', line 195 def flattenFormula lines formula = '' lines.each do |line| # line.strip formula += ' ' + line.gsub(/\/\/.*/, '') # unless line =~ /^[ ]*\/\// end return formula.strip end |
#flattenResolvedFormula ⇒ Object
190 191 192 193 |
# File 'lib/twb/fieldcalculation.rb', line 190 def flattenResolvedFormula formula = formulaResolved formula.gsub(/\n/, ' ') end |
#getComments(lines) ⇒ Object
205 206 207 208 209 210 211 212 213 |
# File 'lib/twb/fieldcalculation.rb', line 205 def getComments lines comments = '' lines.each do |line| if line =~ /\/\// then comments += ' ' + line.gsub(/^.*\/\//,'// ') end end return comments.strip end |
#id ⇒ Object
110 111 112 |
# File 'lib/twb/fieldcalculation.rb', line 110 def id @id ||= @id = @formulaFlat.hash + calcField.hash end |
#parseFormFields ⇒ Object
144 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 |
# File 'lib/twb/fieldcalculation.rb', line 144 def parseFormFields # puts "--parseFormFields" @fields = Set.new @calcFields = Set.new formula = @formulaFlat if !formula.nil? && formula.include?('[') && formula.include?(']') fields = Set.new # noSqLits = formula.gsub( /'[\[\.\]]+'/, ' ') quotes = formula.gsub('"',"'") noSqLits = quotes.gsub( /'[\[\.\]]+'/, ' ') flatForm = noSqLits.gsub( /\n/, ' ') stripFrt = flatForm.gsub( /^[^\[]*[\[]/ , '[' ) stripBck = stripFrt.gsub( /\][^\]]+$/ , ']' ) stripMid = stripBck.gsub( /\][^\]]{2,}\[/ , ']]..[[' ) stripCom = stripMid.gsub( /\][ ]*,[ ]*\[/ , ']]..[[' ) stripFns = stripMid.gsub( /\][ ]*[\*\/+\-><,=][ ]*\[/ , ']]..[[' ) fields = stripFns.split(']..[') emit "::self::: #{self} :: #{__LINE__} :: fields:'#{fields.inspect}'" fields.each do |field| emit "::self::: #{self} :: #{__LINE__} :: field:'#{field}'" cf = CalculationField.new( field.gsub(/^\[|\]$/, ''), @dataSource ) @calcFields.add cf @fields.add field.gsub(/^\[|\]$/, '') end end return @calcFields end |
#resolveFormula ⇒ Object
126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/twb/fieldcalculation.rb', line 126 def resolveFormula # puts "\ndef resolveFormula:\n--\n#{@formula}" formula = @formula parseFormFields # - extracts the fields from the formula; as persisted they're the internal names @calcFields.each do |calcField| if calcField.techUIdiff # puts ":::: #{calcField.techCode} // #{calcField.uiCode}" formula = formula.gsub(calcField.techCode,calcField.uiCode) # puts ":--: #{formula}" end end return formula end |