twb 4.4.2 → 4.4.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8330ec06a3076b01a2e2f6958b630ae2312c74d1fd0fdb6a575d2271ffdb745d
4
- data.tar.gz: 7db555e49b52c9f0bc218aff47ab4a1af2b6a03064d5ce5f8fe04ee7323d3b4f
3
+ metadata.gz: a2c59fcc8781f04283fe5fbbdec7804483082a9bfabf792b29846c60ad7fe5b2
4
+ data.tar.gz: 1567f77448271fde58e8db2e8c49ab6beb6b52c23068ef543d2a3c24ec6aecd0
5
5
  SHA512:
6
- metadata.gz: 801ed0a3f287f170f1d6f477641fa9c8ee761eb879a317ec779be9a9c4886a1f4dd78145b26b9e7dec9534d353ad583a3e4ceaaf8d9cf3f0781be657c364c19c
7
- data.tar.gz: 22e0fc10a913f1fe27a0aac56c2230d35d8483dfeeea7ee8a8d28d1d8b67c05073eb1f925b5abda8e3dd8de98d1c704b0b1b93f242b3ad73b1aafaaf7987a9b9
6
+ metadata.gz: d96aae6accabaffe7abf3986c2e195b630a0fbd236efd51a7c0b1460c67863e84a3b2c6b657ab7d0b1e723fb51db8df533f5c4619353925a7a9207b3f6fac37b
7
+ data.tar.gz: 48e7fefd8c1ac5529a7bcae218c735bfb4eb86201014d88463840f045b842c5952cf151f449f0931014f4da304b12f2c878a94fd19b171c3332378e92fcb411f
data/lib/twb.rb CHANGED
@@ -70,5 +70,5 @@ require_relative 'twb/analysis/Sheets/dashsheetsanalyzer'
70
70
  # Represents Tableau Workbooks, their contents, and classes that analyze and manipulate them.
71
71
  #
72
72
  module Twb
73
- VERSION = '4.4.2'
73
+ VERSION = '4.4.4'
74
74
  end
@@ -26,26 +26,28 @@ module Analysis
26
26
  attr_accessor :localEmit
27
27
 
28
28
  def initialize(**args)
29
- #-- TODO move @csvAdd * #csvMode resolution to TabTool
30
- @args = args
31
- @csvAdd = args[:csvMode] == :add
32
- @csvMode = @csvAdd ? 'a' : 'w'
33
- # emit "@csvAdd : #{@csvAdd}"
34
- # emit "@csvMode: #{@csvMode}"
35
- #--
29
+ @args = args
30
+ @recordDir = !@args.nil? && @args[:recordDir] == true
31
+ @csvAdd = args[:csvMode] == :add
32
+ @csvMode = @csvAdd ? 'a' : 'w'
36
33
  init
37
- @funcdoc = {:class=>self.class, :blurb=>'Analyze Dashboard Worksheets', :description=>'Identifies the Worksheets present in Dashboards.',}
34
+ @funcdoc = {:class=>self.class, :blurb=>'Analyze Dashboard Worksheets', :description=>'Identifies the Worksheets present in Dashboards.',}
38
35
  #--
39
36
  docFileName = docFile('DashboardSheets.csv')
40
37
  @dashSheetsCSV = CSV.open(docFileName,@csvMode)
41
38
  unless @csvAdd
42
- @dashSheetsCSV << ['Workbook','Workbook Dir','Modified','Dashboard','Worksheet','Hidden','Visible']
39
+ if @recordDir
40
+ @dashSheetsCSV << ['Workbook','Modified','Dashboard','Worksheet','Hidden','Visible', 'Workbook Dir']
41
+ else
42
+ @dashSheetsCSV << ['Workbook','Modified','Dashboard','Worksheet','Hidden','Visible' ]
43
+ end
43
44
  end
44
45
  addDocFile @dashSheetsCSV, docFileName, "Workbooks, Dashboards, and their Worksheets"
45
46
  #--
46
47
  @twbCount = 0
47
48
  @dashCount = 0
48
49
  @sheetCount = 0
50
+ @recNum = 0
49
51
  end
50
52
 
51
53
  def metrics
@@ -75,11 +77,22 @@ module Analysis
75
77
  dash.worksheets.each do |sheet|
76
78
  @sheetCount += 1
77
79
  emit "SHEET: #{sheet.name}"
78
- @dashSheetsCSV << [@twbName, @twbDir, @modTime, dash.name, sheet.name, sheet.hidden, sheet.visible ]
80
+ recordCSV [@twbName, @twbDir, @modTime, dash.name, sheet.name, sheet.hidden, sheet.visible ]
79
81
  end
80
82
  end
81
83
  end
82
84
 
85
+ private
86
+
87
+ def recordCSV record
88
+ numberedRec = [@recNum+=1] + record
89
+ if @recordDir
90
+ @dashSheetsCSV << numberedRec.push(@twbDir)
91
+ else
92
+ @dashSheetsCSV << numberedRec
93
+ end
94
+ end
95
+
83
96
  end #class SheetFieldsAnalyzer
84
97
 
85
98
  end # module Analysis
@@ -43,18 +43,14 @@ module Analysis
43
43
 
44
44
  def initialize(**args)
45
45
  @args = args
46
- @csvAdd = args[:csvMode] == :add
47
46
  @recordDir = !@args.nil? && @args[:recordDir] == true
48
- # puts " args: #{@args}"
49
- # puts " @recordDir: #{@recordDir}"
50
- # @csvMode = @csvAdd ? 'a' : 'w'
51
- # emit true, "@csvAdd : #{@csvAdd}"
52
- # emit true, "@csvMode: #{@csvMode}"
47
+ @csvAdd = args[:csvMode] == :add
48
+ @csvMode = @csvAdd ? 'a' : 'w'
53
49
  init
54
- @funcdoc = {:class=>self.class, :blurb=>'Analyze Worksheet Fields', :description=>nil,}
50
+ @funcdoc = {:class=>self.class, :blurb=>'Analyze Worksheet Fields', :description=>nil,}
55
51
  #--
56
- docFileName = docFile('WorksheetFields.csv')
57
- @sheetFieldsCSV = CSV.open(docFileName,'w')
52
+ docFileName = docFile('WorksheetFields.csv')
53
+ @sheetFieldsCSV = CSV.open(docFileName,@csvMode)
58
54
  unless @csvAdd
59
55
  if @recordDir
60
56
  @sheetFieldsCSV << ['Rec #', 'Workbook','Worksheet','Data Source','Data Source (tech)','Field','Field (tech)','Usage','Usage - code','Workbook Dir']
@@ -92,74 +88,30 @@ module Analysis
92
88
  def parseSheets
93
89
  @worksheets = @twb.worksheets
94
90
  @worksheets.each do |sheet|
95
- @sheet = sheet.name
96
- @sheetCnt += 1
97
- emit "SHEET: #{@sheet}"
91
+ @sheetName = sheet.name
92
+ @sheetCnt += 1
93
+ emit "SHEET: #{@sheetName}"
98
94
  showFields sheet unless sheet.datasourceFields.nil?
99
95
  end
100
96
  end
101
97
 
102
98
  def showFields sheet
99
+ @sheetFields = Hash.new { |ds,fields| ds[fields] = Set.new }
100
+ # recordCSV [@twb.name, @sheetName, nil, nil, nil, nil, nil]
101
+ puts "Sheet: #{@sheetName}"
103
102
  recordDBFields sheet
104
103
  recordRCFields sheet.rowFields, :row
105
104
  recordRCFields sheet.colFields, :column
106
105
  recordEncodedFields sheet
107
106
  recordFilterFields sheet
108
107
  recordPageFields sheet
109
- recordSlicesFields sheet
110
108
  recordDSFilterFields sheet
111
- end
112
-
113
- def recordPageFields sheet
114
- sheet.pageFields.each do |pfield|
115
- ds = @twb.datasource pfield.dataSource
116
- fuiname = ds.fieldUIName pfield.name
117
- # if @recordDir
118
- # @sheetFieldsCSV << [@recNum+=1, @twb.name, @sheet, ds.uiname, ds.name, fuiname, pfield.name, 'page', ftc('filter'), @twb.dir]
119
- # else
120
- # @sheetFieldsCSV << [@recNum+=1, @twb.name, @sheet, ds.uiname, ds.name, fuiname, pfield.name, 'page', ftc('filter') ]
121
- # end
122
- recordCSV [@twb.name, @sheet, ds.uiname, ds.name, fuiname, pfield.name, 'page', ftc('page')]
123
- end
124
- end
125
-
126
- def recordFilterFields sheet
127
- filters = sheet.filters
128
- filters.each do |filter|
129
- dsName = filter.dataSource.name
130
- dsUIName = filter.dataSource.uiname
131
- # puts "Filter field: #{filter.dataSource.name} ui:'#{}'"
132
- # if @recordDir
133
- # @sheetFieldsCSV << [@recNum+=1, @twb.name, @sheet, dsUIName, dsName, filter.uiname, filter.name, 'filter', ftc('filter'), @twb.dir]
134
- # else
135
- # @sheetFieldsCSV << [@recNum+=1, @twb.name, @sheet, dsUIName, dsName, filter.uiname, filter.name, 'filter', ftc('filter') ]
136
- # end
137
- recordCSV [@twb.name, @sheet, dsUIName, dsName, filter.uiname, filter.name, 'filter', ftc('filter')]
138
- end
139
- end
140
-
141
- def recordDSFilterFields sheet
142
- sheet.slicesFields.each do |field|
143
- dsName = field.dataSource
144
- ds = @twb.datasource dsName
145
- dsUIName = ds.uiname
146
- ds.filters.each do |filter|
147
- recordCSV [@twb.name, @sheet, dsUIName, dsName, filter.uiname, filter.name, 'dsfilter', ftc('dsfilter')]
148
- end
149
- end
109
+ recordSlicesFields sheet
150
110
  end
151
111
 
152
112
  def recordDBFields sheet
153
113
  fields = sheet.datasourceFields
154
114
  emit "def recordDBFields sheet: #{sheet.name} #FIELDS: #{fields.length}"
155
- if fields.nil?
156
- # if @recordDir
157
- # @sheetFieldsCSV << [@recNum+=1, @twb.name, @sheet, nil, nil, nil, nil, nil, @twb.dir]
158
- # else
159
- # @sheetFieldsCSV << [@recNum+=1, @twb.name, @sheet, nil, nil, nil, nil, nil]
160
- # end
161
- recordCSV [@twb.name, @sheet, nil, nil, nil, nil, nil]
162
- end
163
115
  fields.each do |dsName, dsfields|
164
116
  ds = @twb.datasource dsName
165
117
  emit " ds: #{dsName}"
@@ -170,32 +122,24 @@ module Analysis
170
122
  emit " f: #{sheetField}"
171
123
  emit " c: #{sheetField.class}"
172
124
  fuiName = ds.fieldUIName sheetField #Fields[sheetField]
173
- # @sheetFieldsCSV << [@recNum+=1, @twb.name, @sheet, ds.uiname, dsName, sheetField.uiname, sheetField.name, 'DB ref', ftc('DB ref')]
174
- recordCSV [@twb.name, @sheet, ds.uiname, dsName, sheetField.uiname, sheetField.name, 'DB ref', ftc('DB ref')]
175
- # emit true, " : #{dsFields[field].class}"
125
+ recordCSV [@twb.name, @sheetName, ds.uiname, dsName, sheetField.uiname, sheetField.name, 'DB ref', ftc('DB ref')]
176
126
  end
177
127
  end
178
128
  end
179
129
 
180
130
  def recordRCFields fields, usage
181
131
  emit "def recordRCFields #fields: #{fields.length} \t #{fields}"
182
- if fields.nil?
183
- # @sheetFieldsCSV << [@recNum+=1, @twb.name, @sheet, nil, nil, nil, nil, nil]
184
- recordCSV [@twb.name, @sheet, nil, nil, nil, nil, nil]
185
- else
186
- fields.each do |cf|
187
- emit "coded field: #{cf}"
188
- fldName = cf.name
189
- dsName = cf.dataSource
190
- ds = @twb.datasource dsName
191
- emit "DATASOURCE : #{ds.class} " #{ }" #{ds}"
192
- fuiName = ds.fieldUIName cf.name
193
- emit " ds: #{dsName}"
194
- emit " - #{ds.uiname}"
195
- emit " : #{ds.class}"
196
- # @sheetFieldsCSV << [@recNum+=1, @twb.name, @sheet, ds.uiname, dsName, fuiName, fldName, usage, ftc(usage)]
197
- recordCSV [@twb.name, @sheet, ds.uiname, dsName, fuiName, fldName, usage, ftc(usage)]
198
- end
132
+ fields.each do |cf|
133
+ emit "coded field: #{cf}"
134
+ fldName = cf.name
135
+ dsName = cf.dataSource
136
+ ds = @twb.datasource dsName
137
+ emit "DATASOURCE : #{ds.class} " #{ }" #{ds}"
138
+ fuiName = ds.fieldUIName cf.name
139
+ emit " ds: #{dsName}"
140
+ emit " - #{ds.uiname}"
141
+ emit " : #{ds.class}"
142
+ recordCSV [@twb.name, @sheetName, ds.uiname, dsName, fuiName, fldName, usage, ftc(usage)]
199
143
  end
200
144
  end
201
145
 
@@ -206,23 +150,56 @@ module Analysis
206
150
  dsName = field.dataSource
207
151
  ds = @twb.datasource dsName
208
152
  fuiName = ds.fieldUIName field.name
209
- # @sheetFieldsCSV << [@recNum+=1, @twb.name, @sheet, ds.uiname, dsName, fuiName, field.name, type, ftc(type)]
210
- recordCSV [@twb.name, @sheet, ds.uiname, dsName, fuiName, field.name, type, ftc(type)]
153
+ recordCSV [@twb.name, @sheetName, ds.uiname, dsName, fuiName, field.name, type, ftc(type)]
211
154
  end
212
155
  end
213
156
  end
214
157
  end #def recordEncodedFields
215
158
 
159
+ def recordFilterFields sheet
160
+ filters = sheet.filters
161
+ filters.each do |filter|
162
+ dsName = filter.dataSource.name
163
+ dsUIName = filter.dataSource.uiname
164
+ recordCSV [@twb.name, @sheetName, dsUIName, dsName, filter.uiname, filter.name, 'filter', ftc('filter')]
165
+ end
166
+ end
167
+
168
+ def recordPageFields sheet
169
+ sheet.pageFields.each do |pfield|
170
+ ds = @twb.datasource pfield.dataSource
171
+ fuiname = ds.fieldUIName pfield.name
172
+ recordCSV [@twb.name, @sheetName, ds.uiname, ds.name, fuiname, pfield.name, 'page', ftc('page')]
173
+ end
174
+ end
175
+
176
+ def recordDSFilterFields sheet
177
+ sheet.slicesFields.each do |field|
178
+ dsName = field.dataSource
179
+ ds = @twb.datasource dsName
180
+ dsUIName = ds.uiname
181
+ ds.filters.each do |filter|
182
+ recordCSV [@twb.name, @sheetName, dsUIName, dsName, filter.uiname, filter.name, 'dsfilter', ftc('dsfilter')]
183
+ end
184
+ end
185
+ end
186
+
216
187
  def recordSlicesFields sheet
217
- # puts "recordSlicesFields"
218
- unless sheet.slicesFields.nil?
219
- sheet.slicesFields.each do |field|
220
- dsName = field.dataSource
221
- ds = @twb.datasource dsName
222
- fuiName = ds.fieldUIName field.name
223
- recordCSV [@twb.name, @sheet, ds.uiname, dsName, fuiName, field.name, 'slice', ftc('slice')]
188
+ sheet.slicesFields.each do |field|
189
+ dsName = field.dataSource
190
+ ds = @twb.datasource dsName
191
+ dsuiname = ds.uiname
192
+ fuiName = ds.fieldUIName field.name
193
+ recorded = @sheetFields.key?(dsuiname) && @sheetFields[dsuiname].include?(fuiName)
194
+ puts " # #{@sheetFields.inspect}"
195
+ puts " - %-6s %-25s -> %-s" % [recorded, dsuiname, fuiName]
196
+ unless recorded
197
+ recordCSV [@twb.name, @sheetName, dsuiname, dsName, fuiName, field.name, 'slice', ftc('slice')]
198
+ puts " - recorded"
224
199
  end
200
+ puts "--"
225
201
  end
202
+ puts "\n "
226
203
  end
227
204
 
228
205
  def recordCSV record
@@ -232,6 +209,7 @@ module Analysis
232
209
  else
233
210
  @sheetFieldsCSV << numberedRec
234
211
  end
212
+ @sheetFields[record[2]] << record[4]
235
213
  end
236
214
 
237
215
  def ftc type # ftc : abbr for fieldTypeCode, for brevity
@@ -29,14 +29,12 @@ module Analysis
29
29
  @args = args
30
30
  @recordDir = !@args.nil? && @args[:recordDir] == true
31
31
  @csvAdd = args[:csvMode] == :add
32
- # @csvMode = @csvAdd ? 'a' : 'w'
33
- # emit "@csvAdd : #{@csvAdd}"
34
- # emit "@csvMode: #{@csvMode}"
32
+ @csvMode = @csvAdd ? 'a' : 'w'
35
33
  init
36
- @funcdoc = {:class=>self.class, :blurb=>'Analyze Worksheet Filters', :description=>'Documents Quick Filters and the values they employ, if any. Work in progess.',}
34
+ @funcdoc = {:class=>self.class, :blurb=>'Analyze Worksheet Filters', :description=>'Documents Quick Filters and the values they employ, if any. Work in progess.',}
37
35
  #--
38
- docFileName = docFile('WorksheetFilters.csv')
39
- @sheetFieldsCSV = CSV.open( docFileName ,'w')
36
+ docFileName = docFile('WorksheetFilters.csv')
37
+ @sheetFieldsCSV = CSV.open( docFileName,@csvMode)
40
38
  unless @csvAdd
41
39
  if @recordDir
42
40
  @sheetFieldsCSV << ['Rec #','Workbook','Worksheet','Filter Type','Operation','Data Source','Field','Value','Alias', 'Alias?','Operation Mode','Include Null?','Kind','Workbook Dir']
@@ -91,14 +89,14 @@ module Analysis
91
89
 
92
90
  private
93
91
 
94
- def recordCSV record
95
- numberedRec = [@recNum+=1] + record
96
- if @recordDir
97
- @sheetFieldsCSV << numberedRec.push(@twbDir)
98
- else
99
- @sheetFieldsCSV << numberedRec
92
+ def recordCSV record
93
+ numberedRec = [@recNum+=1] + record
94
+ if @recordDir
95
+ @sheetFieldsCSV << numberedRec.push(@twbDir)
96
+ else
97
+ @sheetFieldsCSV << numberedRec
98
+ end
100
99
  end
101
- end
102
100
 
103
101
  end # class SheetFiltersAnalyzerA
104
102
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twb
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.4.2
4
+ version: 4.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Gerrard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-06 00:00:00.000000000 Z
11
+ date: 2019-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: creek