twb 4.3.1 → 4.3.3

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
- 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.