twb 4.3.1 → 4.3.3

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
- SHA1:
3
- metadata.gz: 896e3b1f94079e230c28b1f65553ac5b870c3263
4
- data.tar.gz: 318d27a633debcdf2c3eb1c323017e6d227e569e
2
+ SHA256:
3
+ metadata.gz: 150eff5c8dea70f1bb4a81416ba1097fe200e76ae173976f2cb6991f3b62fd02
4
+ data.tar.gz: 9238b3a04c9fc93d173743fdd15f9274b8b0f4a01dea00dcaa5cee27cf981c68
5
5
  SHA512:
6
- metadata.gz: af1fe8b04a2d323252026d718f64853489e80d0db24e6255e377480d51102e928215b40eda700d474d06b795aece2858759a0aaab4d87cf93b9e47c45fabd585
7
- data.tar.gz: 0d79ef7cc04e9adfd6c075cdf776f6ffa1a1d4b4dfd7d755f3eff2dc879a4783ea580e5499d10b5bee724ebd274529fdfa46c40929d125b75cb998b06c720431
6
+ metadata.gz: 025cc5a832adcf6b550808affe56077a2b8a605080424a57ce0f4f1138887c4ce8d5646f6505e9dcf114364bd8f9e58a40743b450cc1f51188aa10ad35c906b8
7
+ data.tar.gz: 69b0a5f7ba2cb26a88925c86ada6b7aad6ab6df9bb3ee4ffd04845842657df4037273d9df994c8439043ee29528f375549894f7ec68f5dafec33488809841269
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.3.1'
73
+ VERSION = '4.3.3'
74
74
  end
@@ -33,7 +33,7 @@ module Analysis
33
33
  @@gvDotLocation = 'C:\\tech\\graphviz\\Graphviz2.38\\bin\\dot.exe'
34
34
  @@processName = '.CalculatedFields'
35
35
 
36
- @@calcFieldsCSVFileName = 'TwbCalculatedFields.csv'
36
+ @@calcFieldsCSVFileName = 'CalculatedFields.csv'
37
37
  @@calcFieldsCSVFileHeader = ['Record #',
38
38
  'Workbook', 'Workbook Dir',
39
39
  'Data Source', 'Data Source Caption', 'Data Source Name (tech)',
@@ -49,7 +49,7 @@ module Analysis
49
49
  'Formula LOD?'
50
50
  ]
51
51
 
52
- @@calcLinesCSVFileName = 'TwbCalculatedFieldFormulaLines.csv'
52
+ @@calcLinesCSVFileName = 'CalculatedFieldFormulaLines.csv'
53
53
  @@calcLinesCSVFileHeader = ['Calc Field #',
54
54
  'Workbook', 'Workbook Dir',
55
55
  'Data Source', 'Data Source Caption', 'Data Source Name (tech)',
@@ -57,7 +57,7 @@ module Analysis
57
57
  'Formula', 'Formula Line #', 'Formula Line'
58
58
  ]
59
59
 
60
- @@formFieldsCSVFileName = 'TwbCalculatedFieldsReferenced.csv'
60
+ @@formFieldsCSVFileName = 'CalculatedFieldsReferenced.csv'
61
61
  @@formFieldsCSVFileHeader = ['Rec #',
62
62
  'Workbook', 'Workbook Dir',
63
63
  'Data Source',
@@ -29,7 +29,7 @@ module Analysis
29
29
  init
30
30
  @funcdoc = {:class=>self.class, :blurb=>'Analyze Group Fields.', :description=>'Identifies the Groups and their Members for grouped fields.',}
31
31
  #--
32
- docFileName = docFile('TwbGroupFields.csv')
32
+ docFileName = docFile('GroupFields.csv')
33
33
  @csv = CSV.open(docFileName,'w')
34
34
  @csv << ['Workbook','Data Source','Field','Group','Member']
35
35
  addDocFile docFileName, "Workbooks, Data Sources, and their Grouped Fields"
@@ -33,7 +33,7 @@ module Analysis
33
33
  @paramscount = 0
34
34
  #--
35
35
  @funcdoc = {:class=>self.class, :blurb=>'Analyzing Parameters from Tableau Workbooks.', :description=>nil,}
36
- docFileName = docFile('TWBParameters.csv')
36
+ docFileName = docFile('Parameters.csv')
37
37
  @csv = CSV.open(docFileName, 'w')
38
38
  @csv << ["Workbook",'Parameter','Caption','Name (tech)','Type','Format','Type (custom)','Type (domain)','Role', 'Value (current)', 'Value','Value (tech)']
39
39
  # [ @twbname, name, caption, nameTech, type, format, typeCustom, domainType, role]
@@ -29,7 +29,7 @@ module Analysis
29
29
  init
30
30
  @funcdoc = {:class=>self.class, :blurb=>'Analyze Worksheet filters.', :description=>'Documents Quick Filters and the values they employ, if any. Work in progess.',}
31
31
  #--
32
- docFileName = docFile('TWBWorksheetFiltersA.csv')
32
+ docFileName = docFile('WorksheetFiltersA.csv')
33
33
  $sheetFieldsCSV = CSV.open( docFileName ,'w')
34
34
  $sheetFieldsCSV << ['Workbook','Worksheet','Filter Type','Operation','Data Source','Field','Value','Alias', 'Alias?']
35
35
  addDocFile docFileName, "Workbooks, Worksheets and the sheets' Quick Filters"
@@ -40,7 +40,7 @@ require 'csv'
40
40
  end
41
41
 
42
42
  def initCSV opt
43
- @csvFile = CSV.open(@xmllocation + '/TwbFieldDomains.csv', opt )
43
+ @csvFile = CSV.open(@xmllocation + '/FieldDomains.csv', opt )
44
44
  if 'w'.eql? opt
45
45
  @csvFile << ['Workbook', 'Data Source', 'Field', 'Value']
46
46
  end
@@ -71,22 +71,24 @@ require 'csv'
71
71
 
72
72
  def loadxlsx fileName
73
73
  fieldDomains = {}
74
- if File.file?(fileName)
75
- xlsx = Creek::Book.new fileName
76
- sheets = xlsx.sheets
77
- sheets.each do |sheet|
78
- rows = sheet.rows.to_a
79
- if rows.count > 1
80
- fieldValues = parseRows(rows)
81
- unless fieldValues.empty? || fieldValues.values.first.empty?
82
- fieldDomains[fieldValues.keys.first] = fieldValues.values.first
83
- end
84
- end
85
- end
86
- else
87
- alert "#### ALERT #### Twb:'#{@workbook}' DS: '#{@datasource}' DomRef: #{fileName}' file does not exist."
88
- end
89
- return fieldDomains
74
+ # TODO - fix this - when Creek::Book is in place, the twb gem cannot be loaded in Ruby on Rails, as of Jan 26, 2019
75
+ # - commenting out to sidestep problem giving up functionality for expedience in gtting online
76
+ # if File.file?(fileName)
77
+ # xlsx = Creek::Book.new fileName
78
+ # sheets = xlsx.sheets
79
+ # sheets.each do |sheet|
80
+ # rows = sheet.rows.to_a
81
+ # if rows.count > 1
82
+ # fieldValues = parseRows(rows)
83
+ # unless fieldValues.empty? || fieldValues.values.first.empty?
84
+ # fieldDomains[fieldValues.keys.first] = fieldValues.values.first
85
+ # end
86
+ # end
87
+ # end
88
+ # else
89
+ # alert "#### ALERT #### Twb:'#{@workbook}' DS: '#{@datasource}' DomRef: #{fileName}' file does not exist."
90
+ # end
91
+ # return fieldDomains
90
92
  end
91
93
 
92
94
  def parseRows rows
data/lib/twb/workbook.rb CHANGED
@@ -136,10 +136,15 @@ module Twb
136
136
  end
137
137
 
138
138
  def loadWorksheets
139
- @worksheets = {}
139
+ @worksheets = {}
140
+ hiddenSheets = []
141
+ @ndoc.xpath('//workbook/windows/window[@hidden="true"]').each do |hs|
142
+ hiddenSheets << hs['name']
143
+ end
140
144
  sheets = @ndoc.xpath('//workbook/worksheets/worksheet' ).to_a
141
145
  sheets.each do |node|
142
146
  sheet = Twb::Worksheet.new(node, self)
147
+ sheet.hidden = hiddenSheets.include? sheet.name
143
148
  @worksheets[sheet.name] = sheet
144
149
  end
145
150
  end
data/lib/twb/worksheet.rb CHANGED
@@ -26,25 +26,26 @@ module Twb
26
26
 
27
27
  @fieldEncodingsXPath = './table/panes/pane//encodings'
28
28
 
29
- attr_reader :node, :name, :datasourcenames, :datasources
30
- attr_reader :panesCount
31
- attr_reader :fields, :rowFields, :colFields, :paneFields, :datasourceFields, :pageFields, :encodedFields
32
- attr_reader :filters
33
- attr_reader :tooltip
34
- attr_reader :hidden, :visible
29
+ attr_reader :node, :name, :datasourcenames, :datasources
30
+ attr_reader :panesCount
31
+ attr_reader :fields, :rowFields, :colFields, :paneFields, :datasourceFields, :pageFields, :encodedFields
32
+ attr_reader :filters
33
+ attr_reader :tooltip
34
+ attr_accessor :hidden, :visible
35
35
 
36
36
  def initialize sheetNode, twb
37
37
  @twb = twb
38
38
  @node = sheetNode
39
39
  @name = @node['name']
40
40
  emit "########################## Worksheet initialize name: #{@name}"
41
+
41
42
  loadDataSourceNames
42
43
  loadFields
43
44
  return self
44
45
  end
45
46
 
46
47
  def id
47
- @id ||= @id = @name.hash
48
+ @id ||= @name.hash
48
49
  end
49
50
 
50
51
  def loadDataSourceNames
@@ -57,7 +58,7 @@ module Twb
57
58
  end
58
59
 
59
60
  def workbook
60
- @workbook ||= @workbook = @node.at_xpath('/').root
61
+ @workbook ||= @node.at_xpath('/').root
61
62
  end
62
63
 
63
64
  def datasources
@@ -85,9 +86,9 @@ module Twb
85
86
  @tooltip ||= loadTooltip
86
87
  end
87
88
 
88
- def hidden
89
- @hidden ||= resolveHidden
90
- end
89
+ # def hidden
90
+ # @hidden ||= resolveHidden
91
+ # end
91
92
 
92
93
  def visible
93
94
  @visible ||= !hidden
@@ -118,7 +119,7 @@ module Twb
118
119
 
119
120
  def loadFieldEncodings
120
121
  @encodedFields = Hash.new { |h,k| h[k] = [] }
121
- enodes = node.xpath('.//table/panes/pane/encodings')
122
+ enodes = @node.xpath('.//table/panes/pane/encodings')
122
123
  enodes.each do |enode|
123
124
  enode.children.each do |child|
124
125
  unless child['column'].nil?
@@ -152,7 +153,7 @@ module Twb
152
153
  end
153
154
 
154
155
  def panesCount
155
- @panesCount ||= @panesCount = node.xpath('.//panes/pane').length
156
+ @panesCount ||= @node.xpath('.//panes/pane').length
156
157
  end
157
158
 
158
159
  def loadRowColFields(type)
@@ -188,7 +189,7 @@ module Twb
188
189
 
189
190
  def loadpageFields
190
191
  @pageFields = [] # { |h,k| h[k] = [] }
191
- nodes = node.xpath('.//table/pages/column')
192
+ nodes = @node.xpath('.//table/pages/column')
192
193
  nodes.each do |node|
193
194
  @pageFields << CodedField.new(node.text)
194
195
  end
@@ -199,13 +200,15 @@ module Twb
199
200
  @datasources.keys
200
201
  end
201
202
 
202
- def resolveHidden
203
- windowNode = node.at_xpath("//windows/window[@name=\"#{@name}\"]")
204
- @hidden = !windowNode.nil? && 'true' == windowNode['hidden']
205
- end
206
-
207
203
  private
208
204
 
205
+ # def resolveHidden
206
+ # xpath = "//windows/window[@name=\"#{@name}\"]"
207
+ # emit true, "resolveHidden: #{xpath}"
208
+ # windowNode = @node.at_xpath(xpath)
209
+ # @hidden = !windowNode.nil? && 'true' == windowNode['hidden']
210
+ # end
211
+
209
212
  def loadFilters
210
213
  emit ""########################## loadFilters"
211
214
  @filters = []
@@ -24,7 +24,7 @@ twb = Twb::Workbook.new 'Sheet43.twb'
24
24
  puts "\n\nLoading TWB '#{twb.name}'..."
25
25
  domains = loader.loadWorkbook twb
26
26
  # puts domains
27
- $csv = CSV.open('TwbFieldDomainValues.csv', 'w')
27
+ $csv = CSV.open('FieldDomainValues.csv', 'w')
28
28
  $csv << ['Workbook','Data Source','Field Name','Value']
29
29
  domains.each do |ds,fieldVals|
30
30
  puts "== #{ds}"
metadata CHANGED
@@ -1,15 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twb
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.1
4
+ version: 4.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Gerrard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-27 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2019-01-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: creek
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.4'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.4.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.4'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.4.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: kramdown
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.17'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.17.0
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.17'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.17.0
13
53
  description: A sollection of Ruby classes designed for accessing and recording information
14
54
  about, and for manipulating, Tableau Workbooks and their contents.
15
55
  email: Chris@Gerrard.net
@@ -130,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
170
  version: '0'
131
171
  requirements: []
132
172
  rubyforge_project:
133
- rubygems_version: 2.6.13
173
+ rubygems_version: 2.7.6
134
174
  signing_key:
135
175
  specification_version: 4
136
176
  summary: Classes for accessing Tableau Workbooks and their contents.