twb 4.4.2 → 4.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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