twb 5.2.0 → 5.2.6
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 +4 -4
- data/bin/twb.rb +1 -0
- data/lib/twb.rb +1 -1
- data/lib/twb/{twbtest.rb → TwbTest.rb} +0 -0
- data/lib/twb/analysis/{annotatedfieldscsvemitter.rb → AnnotatedFieldsCSVEmitter.rb} +0 -0
- data/lib/twb/analysis/{calculatedfields/csvemitter.rb → CalculatedFields/CSVEmitter.rb} +0 -0
- data/lib/twb/analysis/{calculatedfields/calculatedfieldsanalyzer.rb → CalculatedFields/CalculatedFieldsAnalyzer.rb} +0 -0
- data/lib/twb/analysis/{calculatedfields/markdownemitter.rb → CalculatedFields/MarkdownEmitter.rb} +0 -0
- data/lib/twb/analysis/{calculatedfields → CalculatedFields}/dotanalyzer.rb +8 -3
- data/lib/twb/analysis/{calculatedfields → CalculatedFields}/fieldsaliasesanalyzer.rb +0 -0
- data/lib/twb/analysis/{calculatedfields → CalculatedFields}/groupfieldsanalyzer.rb +0 -0
- data/lib/twb/analysis/{calculatedfields → CalculatedFields}/t.rb +0 -0
- data/lib/twb/analysis/{datasources/datasourcefieldscsvemitter.rb → DataSources/DataSourceFieldsCSVEmitter.rb} +0 -0
- data/lib/twb/analysis/{datasources/datasourcetablefieldscsvemitter.rb → DataSources/DataSourceTableFieldsCSVEmitter.rb} +0 -0
- data/lib/twb/analysis/{datasources → DataSources}/categoricalcolorcodinganalyzer.rb +0 -0
- data/lib/twb/analysis/{datasources → DataSources}/datasourcefieldsanalyzer.rb +0 -0
- data/lib/twb/analysis/{datasources → DataSources}/datasourcefilesanalyzer.rb +0 -0
- data/lib/twb/analysis/{datasources → DataSources}/datasourceoriginsanalyzer.rb +0 -0
- data/lib/twb/analysis/{datasources → DataSources}/datasourcesenumerator.rb +0 -0
- data/lib/twb/analysis/{datasources → DataSources}/datasourceslocationsanalyzer.rb +0 -0
- data/lib/twb/analysis/{datasources → DataSources}/datasourcetablefieldsanalyzer.rb +0 -0
- data/lib/twb/analysis/{datasources → DataSources}/extractsanalyzer.rb +0 -0
- data/lib/twb/analysis/{datasources → DataSources}/fieldsaliasesanalyzer.rb +0 -0
- data/lib/twb/analysis/{datasources → DataSources}/googlesheetdatasourcesanalyzer.rb +0 -0
- data/lib/twb/analysis/{datasources → DataSources}/parametersanalyzer.rb +0 -0
- data/lib/twb/analysis/{documentedfieldscsvemitter.rb → DocumentedFieldsCSVEmitter.rb} +0 -0
- data/lib/twb/analysis/{documentedfieldsmarkdownemitter.rb → DocumentedFieldsMarkdownEmitter.rb} +0 -0
- data/lib/twb/analysis/{sheets/worksheetdatastructurecsvemitter.rb → Sheets/WorksheetDataStructureCSVEmitter.rb} +0 -0
- data/lib/twb/analysis/{sheets → Sheets}/analyzedashboardsheets.rb +0 -0
- data/lib/twb/analysis/{sheets → Sheets}/dashboardsummarizer.rb +0 -0
- data/lib/twb/analysis/{sheets → Sheets}/dashsheetsanalyzer.rb +0 -0
- data/lib/twb/analysis/{sheets → Sheets}/sheetfieldsanalyzer.rb +0 -0
- data/lib/twb/analysis/{sheets → Sheets}/sheetfiltersanalyzer.rb +0 -0
- data/lib/twb/analysis/{sheets → Sheets}/sheetfiltersanalyzera.rb +0 -0
- data/lib/twb/analysis/{sheets → Sheets}/sheetsintooltipanalyzer.rb +0 -0
- data/lib/twb/analysis/{sheets → Sheets}/sheetsourcesanalyzer.rb +0 -0
- data/lib/twb/analysis/{sheets → Sheets}/worksheetsummarizer.rb +0 -0
- data/lib/twb/columnfield.rb +73 -24
- data/lib/twb/countNodes.rb +98 -0
- data/lib/twb/datasource.rb +16 -4
- data/lib/twb/fieldcalculation.rb +13 -9
- data/lib/twb/{finddsfields.rb → findDSFields.rb} +0 -0
- data/lib/twb/{identifyfields.rb → identifyFields.rb} +0 -0
- data/lib/twb/quickfilter.rb +1 -1
- data/lib/twb/util/{dotfilerenderer.rb → dotFileRenderer.rb} +0 -0
- data/lib/twb/util/{ftppublisher.rb → ftpPublisher.rb} +0 -0
- data/lib/twb/util/{joinutilities.rb → joinUtilities.rb} +0 -0
- data/lib/twb/util/{twbdashsheetdatadotbuilder.rb → twbDashSheetDataDotBuilder.rb} +0 -0
- data/lib/twb/util/{twbdashsheetdatadotrenderer.rb → twbDashSheetDataDotRenderer.rb} +0 -0
- data/lib/twb/util/{twbdashessheetdatadotbuilder.rb → twbDashesSheetDataDotBuilder.rb} +0 -0
- metadata +53 -52
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ccd5e3f60908b3588d6e16b24932760d10c7f529cee28c5b8c57cc6b536536e1
|
|
4
|
+
data.tar.gz: f11f10dacb407baa8ccad990d6ed1095970603f6863ceab276a85afd69b555ee
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 690986db75b5487436bc403e941cf9a5ba76e1cd30a067ed7ac9e19bfeef5abd2824373748263a4129af423039e2d0bb1e30fd505c2b98c23830b6ef0fa830a9
|
|
7
|
+
data.tar.gz: 797b79b25e06eddf021e66c81ad0393bee4c8adf417867b720884a9cde512affe0f0319dd145b534e591b8fec9f4dd4b82453dd377ce65268d36fc8a8ce70f10
|
data/bin/twb.rb
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
puts "\n TWB gem here. \n"
|
data/lib/twb.rb
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/lib/twb/analysis/{calculatedfields/markdownemitter.rb → CalculatedFields/MarkdownEmitter.rb}
RENAMED
|
File without changes
|
|
@@ -34,6 +34,10 @@ module CalculatedFields
|
|
|
34
34
|
@imageFiles = Array.new
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
+
def encode str
|
|
38
|
+
str.gsub('"', '\"')
|
|
39
|
+
end
|
|
40
|
+
|
|
37
41
|
def processTWB twb
|
|
38
42
|
# twb = File.basename(twb)
|
|
39
43
|
@twb = twb #Twb::Workbook.new twb
|
|
@@ -50,10 +54,11 @@ module CalculatedFields
|
|
|
50
54
|
ds.calculatedFields.each do |cf|
|
|
51
55
|
@cfCnt += 1
|
|
52
56
|
calcFields << cf.uiname
|
|
53
|
-
edges << " \"#{ds.uiname}\" -> \"#{cf.uiname}\" [tailport=e, headport=w] "
|
|
57
|
+
edges << " \"#{encode(ds.uiname)}\" -> \"#{encode(cf.uiname)}\" [tailport=e, headport=w] "
|
|
58
|
+
puts " \"#{encode(ds.uiname)}\" -> \"#{encode(cf.uiname)}\" [tailport=e, headport=w] "
|
|
54
59
|
cf.referencedFields.each do |rf|
|
|
55
60
|
refFields << rf.uiname
|
|
56
|
-
edges << " \"#{cf.uiname}\" -> \"#{rf.uiname}\" [tailport=e, headport=w] "
|
|
61
|
+
edges << " \"#{encode(cf.uiname)}\" -> \"#{encode(rf.uiname)}\" [tailport=e, headport=w] "
|
|
57
62
|
end
|
|
58
63
|
end # ds.calculatedFields.each
|
|
59
64
|
# "federated.17h7owt0rsacke17cql8o0w2ittk" -> "New AO Actuals Query in PP+ (AO Variance Data)::vs Prior Year [YTD]"
|
|
@@ -64,7 +69,7 @@ module CalculatedFields
|
|
|
64
69
|
@dotFile.puts " "
|
|
65
70
|
allFields = calcFields + refFields
|
|
66
71
|
allFields.each do |f|
|
|
67
|
-
@dotFile.puts "\t \"#{f}\" [label=\"#{f}\"]"
|
|
72
|
+
@dotFile.puts "\t \"#{encode(f)}\" [label=\"#{encode(f)}\"]"
|
|
68
73
|
end
|
|
69
74
|
endPointFields = allFields - calcFields
|
|
70
75
|
rankSame(endPointFields) unless endPointFields.nil? || endPointFields.empty?
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/lib/twb/analysis/{documentedfieldsmarkdownemitter.rb → DocumentedFieldsMarkdownEmitter.rb}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/lib/twb/columnfield.rb
CHANGED
|
@@ -72,25 +72,27 @@ module Twb
|
|
|
72
72
|
def initialize(fieldNode, datasource=nil)
|
|
73
73
|
@datasource = datasource
|
|
74
74
|
@node = fieldNode
|
|
75
|
-
@name = load
|
|
75
|
+
@name = load('name').sub(/^\[/,'').sub(/\]$/,'')
|
|
76
76
|
@caption = load 'caption'
|
|
77
77
|
@uiname = @caption.nil? ? @name : @caption
|
|
78
|
-
|
|
79
|
-
@
|
|
80
|
-
@
|
|
81
|
-
@
|
|
82
|
-
@
|
|
83
|
-
@
|
|
84
|
-
@
|
|
85
|
-
@
|
|
86
|
-
@
|
|
87
|
-
@
|
|
88
|
-
@
|
|
78
|
+
#--
|
|
79
|
+
loadAttributes @node
|
|
80
|
+
# @dataType = load 'datatype'
|
|
81
|
+
# @userDataType = load 'user-datatype'
|
|
82
|
+
# @defaultFormat = load 'default-format'
|
|
83
|
+
# @paramDomainType = load 'param-domain-type'
|
|
84
|
+
# @type = load 'type'
|
|
85
|
+
# @value = load 'value'
|
|
86
|
+
# @alias = load 'alias'
|
|
87
|
+
# @semanticRole = load 'semantic-role'
|
|
88
|
+
# @aggregation = load 'aggregation'
|
|
89
|
+
# @autoColumn = load 'auto-column'
|
|
90
|
+
# @datatypeCustomized = load 'datatype-customized'
|
|
89
91
|
end
|
|
90
92
|
|
|
91
93
|
def id
|
|
92
94
|
@id ||= @id = @name.hash
|
|
93
|
-
end
|
|
95
|
+
end
|
|
94
96
|
|
|
95
97
|
def load nodeName
|
|
96
98
|
attr = @node.attribute(nodeName)
|
|
@@ -98,17 +100,56 @@ module Twb
|
|
|
98
100
|
return val
|
|
99
101
|
end
|
|
100
102
|
|
|
101
|
-
def
|
|
102
|
-
|
|
103
|
+
def loadAttributes node
|
|
104
|
+
# puts "augmenting with node:#{node}"
|
|
105
|
+
@node = node
|
|
106
|
+
if node.has_attribute?('aggregation') then @aggregation = node['aggregation'] end
|
|
107
|
+
if node.has_attribute?('alias') then @alias = node['alias'] end
|
|
108
|
+
if node.has_attribute?('auto-column') then @autoColumn = node['auto-column'] end
|
|
109
|
+
if node.has_attribute?('datatype') then @dataType = node['datatype'] end
|
|
110
|
+
if node.has_attribute?('datatype-customized') then @datatypeCustomized = node['datatype-customized'] end
|
|
111
|
+
if node.has_attribute?('default-format') then @defaultFormat = node['default-format'] end
|
|
112
|
+
if node.has_attribute?('param-domain-type') then @paramDomainType = node['param-domain-type'] end
|
|
113
|
+
if node.has_attribute?('role') then @role = node['role'] end
|
|
114
|
+
if node.has_attribute?('semantic-role') then @semanticRole = node['semantic-role'] end
|
|
115
|
+
if node.has_attribute?('type') then @type = node['type'] end
|
|
116
|
+
if node.has_attribute?('user-datatype') then @userDataType = node['user-datatype'] end
|
|
117
|
+
if node.has_attribute?('value') then @value = node['value'] end
|
|
118
|
+
# loadAttr @aggregation, 'aggregation'
|
|
119
|
+
# loadAttr @alias, 'alias'
|
|
120
|
+
# loadAttr @autoColumn, 'auto-column'
|
|
121
|
+
# loadAttr @dataType, 'datatype'
|
|
122
|
+
# loadAttr @datatypeCustomized, 'datatype-customized'
|
|
123
|
+
# loadAttr @defaultFormat, 'default-format'
|
|
124
|
+
# loadAttr @paramDomainType, 'param-domain-type'
|
|
125
|
+
# loadAttr @role, 'role'
|
|
126
|
+
# loadAttr @semanticRole, 'semantic-role'
|
|
127
|
+
# loadAttr @type, 'type'
|
|
128
|
+
# loadAttr @userDataType, 'user-datatype'
|
|
129
|
+
# loadAttr @value, 'value'
|
|
103
130
|
end
|
|
104
131
|
|
|
105
|
-
def
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
132
|
+
# def loadAttr property, attribute
|
|
133
|
+
# # puts " - def loadAttr attr:#{attribute}: prop:#{property}:"
|
|
134
|
+
# if @node.has_attribute? attribute
|
|
135
|
+
# # puts " - has"
|
|
136
|
+
# property = @node[attribute]
|
|
137
|
+
# # else
|
|
138
|
+
# # puts " - has not"
|
|
139
|
+
# # end
|
|
140
|
+
# end
|
|
141
|
+
|
|
142
|
+
# def role
|
|
143
|
+
# @role ||= loadRole
|
|
144
|
+
# end
|
|
145
|
+
|
|
146
|
+
# def loadRole
|
|
147
|
+
# role = @node['role']
|
|
148
|
+
# if role.nil?
|
|
149
|
+
# role = @@dataTypeRoleMap[@dataType].nil? ? @dataType : @@dataTypeRoleMap[@dataType]
|
|
150
|
+
# end
|
|
151
|
+
# return role
|
|
152
|
+
# end
|
|
112
153
|
|
|
113
154
|
def calcField
|
|
114
155
|
@calcField ||= loadCalcField
|
|
@@ -211,7 +252,7 @@ module Twb
|
|
|
211
252
|
end
|
|
212
253
|
|
|
213
254
|
def loadProperties
|
|
214
|
-
@properties= {}
|
|
255
|
+
@properties = {} if @properties.nil?
|
|
215
256
|
@node.attributes.each do |name,attr|
|
|
216
257
|
@properties[name] = attr.value
|
|
217
258
|
end
|
|
@@ -220,13 +261,21 @@ module Twb
|
|
|
220
261
|
end
|
|
221
262
|
|
|
222
263
|
def to_s
|
|
223
|
-
@name
|
|
264
|
+
"n:#{@name}: uin:#{uiname}: "
|
|
224
265
|
end
|
|
225
266
|
|
|
226
267
|
def <=>(other)
|
|
227
268
|
@name <=> other.name
|
|
228
269
|
end
|
|
229
270
|
|
|
271
|
+
def eql?(other)
|
|
272
|
+
@name == other.name
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
def hash
|
|
276
|
+
@name.hash
|
|
277
|
+
end
|
|
278
|
+
|
|
230
279
|
end # class ColumnField
|
|
231
280
|
|
|
232
281
|
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
require 'nokogiri'
|
|
2
|
+
require 'csv'
|
|
3
|
+
require 'twb'
|
|
4
|
+
|
|
5
|
+
def init
|
|
6
|
+
system 'cls'
|
|
7
|
+
$pFile = File.open('sqlFromTwbDc.txt','w')
|
|
8
|
+
|
|
9
|
+
sqiCSV = 'TWBFieldsByType.csv'
|
|
10
|
+
$fieldsCSV = CSV.open(sqiCSV, 'w')
|
|
11
|
+
$fieldsCSV << [
|
|
12
|
+
'TWB',
|
|
13
|
+
'Data Connection - UI',
|
|
14
|
+
'Field Name',
|
|
15
|
+
'Field Type',
|
|
16
|
+
]
|
|
17
|
+
$path = if ARGV.empty? then '**/*.twb' else ARGV[0] end
|
|
18
|
+
emit " "
|
|
19
|
+
emit " Generating SQL Create Table code for Tableau Workbook Data Connections (TWDCs)."
|
|
20
|
+
emit " Each TWDC will have it's own *.sql file containing the SQL code.\n "
|
|
21
|
+
emit " Looking for Workbooks matching: '#{$path}' - from: #{ARGV[0]}\n\n "
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def method_name
|
|
25
|
+
datasources = {}
|
|
26
|
+
dataSourcesNode = doc.at_xpath('//workbook/datasources')
|
|
27
|
+
dataSourcesNodes = doc.xpath('//workbook/datasources/datasource').to_a
|
|
28
|
+
puts " dsn: #{dataSourcesNodes}"
|
|
29
|
+
datasourceNodes.each do |node|
|
|
30
|
+
datasource = Twb::DataSource.new(node)
|
|
31
|
+
datasources[datasource.name] = datasource
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
$localEmit = true
|
|
36
|
+
def emit stuff
|
|
37
|
+
$pFile.puts stuff
|
|
38
|
+
puts stuff if $localEmit
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
$paths = {
|
|
42
|
+
'Relation Columns' => './connection/relation/columns/column',
|
|
43
|
+
'Metadata Records' => './connection/metadata-records/metadata-record',
|
|
44
|
+
'Columns' => './column',
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
def proc file
|
|
48
|
+
emit "\n == #{file}"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def process file
|
|
52
|
+
emit "\n == #{file}"
|
|
53
|
+
doc = Nokogiri::XML(open(file))
|
|
54
|
+
dataSourcesNodes = doc.xpath('//workbook/datasources/datasource')
|
|
55
|
+
dataSourcesNodes.each do |ds|
|
|
56
|
+
emit "\n dc: #{ds.attribute('caption')}"
|
|
57
|
+
emit " dn: #{ds.attribute('name')}\n ---"
|
|
58
|
+
typeCounts = {}
|
|
59
|
+
$paths.each do |type, path|
|
|
60
|
+
nodes = ds.xpath(path).to_a
|
|
61
|
+
# emit " : %3i %-17s %-s" % [nodes.size, type, path]
|
|
62
|
+
typeCnt = nodes.size
|
|
63
|
+
nodes.each do |n|
|
|
64
|
+
$fieldsCSV << [file,ds.attribute('name'),n.attribute('name'),type]
|
|
65
|
+
end
|
|
66
|
+
if type == 'Columns' then
|
|
67
|
+
calcCnt = 0
|
|
68
|
+
nodes.each do |n|
|
|
69
|
+
calc = n.xpath('./calculation')
|
|
70
|
+
# emit " c: #{calc.size} "
|
|
71
|
+
calcCnt += calc.size
|
|
72
|
+
end
|
|
73
|
+
# emit ' ---'
|
|
74
|
+
# emit " c#: %3i " % [calcCnt]
|
|
75
|
+
# emit " !c#: %3i " % [nodes.size - calcCnt]
|
|
76
|
+
typeCounts['Columns'] = nodes.size
|
|
77
|
+
typeCounts['Columns - calc'] = calcCnt
|
|
78
|
+
typeCounts['Columns - not calc'] = nodes.size - calcCnt
|
|
79
|
+
else
|
|
80
|
+
typeCounts[type] = typeCnt
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
# emit ' ---'
|
|
84
|
+
typeCounts.each do |t,c|
|
|
85
|
+
emit " tc: %3i %-s" % [c, t]
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
init
|
|
91
|
+
|
|
92
|
+
$paths.each do |path|
|
|
93
|
+
emit " p: #{path}"
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
Dir.glob($path) {|twb| process twb }
|
|
97
|
+
|
|
98
|
+
emit "\n\n== Done ==\n "
|
data/lib/twb/datasource.rb
CHANGED
|
@@ -255,11 +255,23 @@ module Twb
|
|
|
255
255
|
@columnFieldsMap = {}
|
|
256
256
|
nodes = @node.xpath('.//column')
|
|
257
257
|
nodes.each do |n|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
@columnFieldsMap
|
|
258
|
+
# puts " "
|
|
259
|
+
# puts @columnFieldsMap.keys.inspect
|
|
260
|
+
name = n.attribute('name').text.sub(/^\[/,'').sub(/\]$/,'')
|
|
261
|
+
loaded = @columnFieldsMap.has_key? name
|
|
262
|
+
if loaded
|
|
263
|
+
# puts "LOADED"
|
|
264
|
+
field = @columnFieldsMap[name]
|
|
265
|
+
# puts "#{field.class}"
|
|
266
|
+
field.loadAttributes(n)
|
|
267
|
+
else
|
|
268
|
+
field = Twb::ColumnField.new n, self
|
|
269
|
+
@columnFieldsMap[field.uiname] = field
|
|
270
|
+
@columnFieldsMap[field.name] = field
|
|
271
|
+
end
|
|
272
|
+
# puts "name:#{name}: \t nn:#{field.name}:\t loaded?:#{loaded} node:#{n}:"
|
|
262
273
|
end
|
|
274
|
+
@columnFields = @columnFieldsMap.values
|
|
263
275
|
return @columnFields
|
|
264
276
|
end
|
|
265
277
|
|
data/lib/twb/fieldcalculation.rb
CHANGED
|
@@ -125,17 +125,21 @@ module Twb
|
|
|
125
125
|
end
|
|
126
126
|
|
|
127
127
|
def resolveFormula
|
|
128
|
-
#
|
|
129
|
-
|
|
128
|
+
# emit "\ndef resolveFormula:\n--\n#{@formula}"
|
|
129
|
+
resolved = @formula
|
|
130
|
+
# emit "\t formula:#{resolved}:"
|
|
130
131
|
# parseFormFields # - extracts the fields from the formula; as persisted they're the internal names
|
|
131
|
-
referencedFields.each do |
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
132
|
+
referencedFields.each do |refField|
|
|
133
|
+
# emit "\t refField: "
|
|
134
|
+
resolved.gsub!(refField.techCode,refField.uiCode)
|
|
135
|
+
# if calcField.techUIdiff
|
|
136
|
+
# # puts ":::: #{calcField.techCode} // #{calcField.uiCode}"
|
|
137
|
+
# formula = formula.gsub(calcField.techCode,calcField.uiCode)
|
|
138
|
+
# # puts ":--: #{formula}"
|
|
139
|
+
# end
|
|
137
140
|
end
|
|
138
|
-
|
|
141
|
+
# emit "\t formula:#{resolved}:"
|
|
142
|
+
return resolved
|
|
139
143
|
end
|
|
140
144
|
|
|
141
145
|
def referencedFields
|
|
File without changes
|
|
File without changes
|
data/lib/twb/quickfilter.rb
CHANGED
|
@@ -120,7 +120,7 @@ module Twb
|
|
|
120
120
|
# filter class='relative-date' column='[Sample - Superstore].[none:Order Date:qk]' first-period='1' include-future='true' include-null='false' last-period='1' period-type='year' />
|
|
121
121
|
def resolveRelativeDate
|
|
122
122
|
emit "resolveRelativeDate"
|
|
123
|
-
periodType = @node['period-type']
|
|
123
|
+
periodType = @node['period-type'].nil? ? '' : @node['period-type']
|
|
124
124
|
inclFuture = @node['include-future'] == 'true'
|
|
125
125
|
firstPeriod = @node['first-period'].to_i
|
|
126
126
|
lastPeriod = @node['last-period'].to_i
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
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: 5.2.
|
|
4
|
+
version: 5.2.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chris Gerrard
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-04-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: creek
|
|
@@ -34,22 +34,22 @@ dependencies:
|
|
|
34
34
|
name: kramdown
|
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
|
-
- - "~>"
|
|
38
|
-
- !ruby/object:Gem::Version
|
|
39
|
-
version: '1.17'
|
|
40
37
|
- - ">="
|
|
41
38
|
- !ruby/object:Gem::Version
|
|
42
39
|
version: 1.17.0
|
|
40
|
+
- - "~>"
|
|
41
|
+
- !ruby/object:Gem::Version
|
|
42
|
+
version: '1.17'
|
|
43
43
|
type: :runtime
|
|
44
44
|
prerelease: false
|
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
|
46
46
|
requirements:
|
|
47
|
-
- - "~>"
|
|
48
|
-
- !ruby/object:Gem::Version
|
|
49
|
-
version: '1.17'
|
|
50
47
|
- - ">="
|
|
51
48
|
- !ruby/object:Gem::Version
|
|
52
49
|
version: 1.17.0
|
|
50
|
+
- - "~>"
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: '1.17'
|
|
53
53
|
description: A sollection of Ruby classes designed for accessing and recording information
|
|
54
54
|
about, and for manipulating, Tableau Workbooks and their contents.
|
|
55
55
|
email: Chris@Gerrard.net
|
|
@@ -57,48 +57,51 @@ executables: []
|
|
|
57
57
|
extensions: []
|
|
58
58
|
extra_rdoc_files: []
|
|
59
59
|
files:
|
|
60
|
+
- bin/twb.rb
|
|
60
61
|
- lib/t.rb
|
|
61
62
|
- lib/tfl/Flow.rb
|
|
62
63
|
- lib/twb.rb
|
|
64
|
+
- lib/twb/TwbTest.rb
|
|
63
65
|
- lib/twb/action.rb
|
|
64
|
-
- lib/twb/analysis/
|
|
65
|
-
- lib/twb/analysis/
|
|
66
|
-
- lib/twb/analysis/
|
|
67
|
-
- lib/twb/analysis/
|
|
68
|
-
- lib/twb/analysis/
|
|
69
|
-
- lib/twb/analysis/
|
|
70
|
-
- lib/twb/analysis/
|
|
71
|
-
- lib/twb/analysis/
|
|
72
|
-
- lib/twb/analysis/
|
|
73
|
-
- lib/twb/analysis/
|
|
74
|
-
- lib/twb/analysis/
|
|
75
|
-
- lib/twb/analysis/
|
|
76
|
-
- lib/twb/analysis/
|
|
77
|
-
- lib/twb/analysis/
|
|
78
|
-
- lib/twb/analysis/
|
|
79
|
-
- lib/twb/analysis/
|
|
80
|
-
- lib/twb/analysis/
|
|
81
|
-
- lib/twb/analysis/
|
|
82
|
-
- lib/twb/analysis/
|
|
83
|
-
- lib/twb/analysis/
|
|
84
|
-
- lib/twb/analysis/
|
|
85
|
-
- lib/twb/analysis/
|
|
86
|
-
- lib/twb/analysis/
|
|
87
|
-
- lib/twb/analysis/
|
|
88
|
-
- lib/twb/analysis/
|
|
89
|
-
- lib/twb/analysis/
|
|
90
|
-
- lib/twb/analysis/
|
|
91
|
-
- lib/twb/analysis/
|
|
92
|
-
- lib/twb/analysis/
|
|
93
|
-
- lib/twb/analysis/
|
|
94
|
-
- lib/twb/analysis/
|
|
95
|
-
- lib/twb/analysis/
|
|
96
|
-
- lib/twb/analysis/
|
|
66
|
+
- lib/twb/analysis/AnnotatedFieldsCSVEmitter.rb
|
|
67
|
+
- lib/twb/analysis/CalculatedFields/CSVEmitter.rb
|
|
68
|
+
- lib/twb/analysis/CalculatedFields/CalculatedFieldsAnalyzer.rb
|
|
69
|
+
- lib/twb/analysis/CalculatedFields/MarkdownEmitter.rb
|
|
70
|
+
- lib/twb/analysis/CalculatedFields/dotanalyzer.rb
|
|
71
|
+
- lib/twb/analysis/CalculatedFields/fieldsaliasesanalyzer.rb
|
|
72
|
+
- lib/twb/analysis/CalculatedFields/groupfieldsanalyzer.rb
|
|
73
|
+
- lib/twb/analysis/CalculatedFields/t.rb
|
|
74
|
+
- lib/twb/analysis/DataSources/DataSourceFieldsCSVEmitter.rb
|
|
75
|
+
- lib/twb/analysis/DataSources/DataSourceTableFieldsCSVEmitter.rb
|
|
76
|
+
- lib/twb/analysis/DataSources/categoricalcolorcodinganalyzer.rb
|
|
77
|
+
- lib/twb/analysis/DataSources/datasourcefieldsanalyzer.rb
|
|
78
|
+
- lib/twb/analysis/DataSources/datasourcefilesanalyzer.rb
|
|
79
|
+
- lib/twb/analysis/DataSources/datasourceoriginsanalyzer.rb
|
|
80
|
+
- lib/twb/analysis/DataSources/datasourcesenumerator.rb
|
|
81
|
+
- lib/twb/analysis/DataSources/datasourceslocationsanalyzer.rb
|
|
82
|
+
- lib/twb/analysis/DataSources/datasourcetablefieldsanalyzer.rb
|
|
83
|
+
- lib/twb/analysis/DataSources/extractsanalyzer.rb
|
|
84
|
+
- lib/twb/analysis/DataSources/fieldsaliasesanalyzer.rb
|
|
85
|
+
- lib/twb/analysis/DataSources/googlesheetdatasourcesanalyzer.rb
|
|
86
|
+
- lib/twb/analysis/DataSources/parametersanalyzer.rb
|
|
87
|
+
- lib/twb/analysis/DocumentedFieldsCSVEmitter.rb
|
|
88
|
+
- lib/twb/analysis/DocumentedFieldsMarkdownEmitter.rb
|
|
89
|
+
- lib/twb/analysis/Sheets/WorksheetDataStructureCSVEmitter.rb
|
|
90
|
+
- lib/twb/analysis/Sheets/analyzedashboardsheets.rb
|
|
91
|
+
- lib/twb/analysis/Sheets/dashboardsummarizer.rb
|
|
92
|
+
- lib/twb/analysis/Sheets/dashsheetsanalyzer.rb
|
|
93
|
+
- lib/twb/analysis/Sheets/sheetfieldsanalyzer.rb
|
|
94
|
+
- lib/twb/analysis/Sheets/sheetfiltersanalyzer.rb
|
|
95
|
+
- lib/twb/analysis/Sheets/sheetfiltersanalyzera.rb
|
|
96
|
+
- lib/twb/analysis/Sheets/sheetsintooltipanalyzer.rb
|
|
97
|
+
- lib/twb/analysis/Sheets/sheetsourcesanalyzer.rb
|
|
98
|
+
- lib/twb/analysis/Sheets/worksheetsummarizer.rb
|
|
97
99
|
- lib/twb/analysis/workbooksummaryanalyzer.rb
|
|
98
100
|
- lib/twb/calculatedfield.rb
|
|
99
101
|
- lib/twb/codedfield.rb
|
|
100
102
|
- lib/twb/columnfield.rb
|
|
101
103
|
- lib/twb/connection.rb
|
|
104
|
+
- lib/twb/countNodes.rb
|
|
102
105
|
- lib/twb/dashboard.rb
|
|
103
106
|
- lib/twb/datasource.rb
|
|
104
107
|
- lib/twb/dbfield.rb
|
|
@@ -107,14 +110,14 @@ files:
|
|
|
107
110
|
- lib/twb/docdashboardwebvert.rb
|
|
108
111
|
- lib/twb/field.rb
|
|
109
112
|
- lib/twb/fieldcalculation.rb
|
|
110
|
-
- lib/twb/
|
|
113
|
+
- lib/twb/findDSFields.rb
|
|
111
114
|
- lib/twb/graph.rb
|
|
112
115
|
- lib/twb/graphedges.rb
|
|
113
116
|
- lib/twb/graphnode.rb
|
|
114
117
|
- lib/twb/groupfield.rb
|
|
115
118
|
- lib/twb/hashtohtml.rb
|
|
116
119
|
- lib/twb/htmllistcollapsible.rb
|
|
117
|
-
- lib/twb/
|
|
120
|
+
- lib/twb/identifyFields.rb
|
|
118
121
|
- lib/twb/listXMLNodePathsAndAttributes.rb
|
|
119
122
|
- lib/twb/localfield.rb
|
|
120
123
|
- lib/twb/mappedfield.rb
|
|
@@ -127,15 +130,14 @@ files:
|
|
|
127
130
|
- lib/twb/tabtool.rb
|
|
128
131
|
- lib/twb/there.rb
|
|
129
132
|
- lib/twb/twbcodedfield.rb
|
|
130
|
-
- lib/twb/twbtest.rb
|
|
131
133
|
- lib/twb/util/atomizecsvrecords.rb
|
|
132
134
|
- lib/twb/util/csvrecordsatomizer.rb
|
|
133
135
|
- lib/twb/util/cypher.rb
|
|
134
136
|
- lib/twb/util/cypherpython.rb
|
|
135
137
|
- lib/twb/util/docprep.rb
|
|
136
|
-
- lib/twb/util/
|
|
138
|
+
- lib/twb/util/dotFileRenderer.rb
|
|
137
139
|
- lib/twb/util/fielddomainloader.rb
|
|
138
|
-
- lib/twb/util/
|
|
140
|
+
- lib/twb/util/ftpPublisher.rb
|
|
139
141
|
- lib/twb/util/gml.rb
|
|
140
142
|
- lib/twb/util/gmledge.rb
|
|
141
143
|
- lib/twb/util/graph.rb
|
|
@@ -144,11 +146,11 @@ files:
|
|
|
144
146
|
- lib/twb/util/graphnode.rb
|
|
145
147
|
- lib/twb/util/hashtohtml.rb
|
|
146
148
|
- lib/twb/util/htmllistcollapsible.rb
|
|
147
|
-
- lib/twb/util/
|
|
149
|
+
- lib/twb/util/joinUtilities.rb
|
|
148
150
|
- lib/twb/util/tabgraph.rb
|
|
149
|
-
- lib/twb/util/
|
|
150
|
-
- lib/twb/util/
|
|
151
|
-
- lib/twb/util/
|
|
151
|
+
- lib/twb/util/twbDashSheetDataDotBuilder.rb
|
|
152
|
+
- lib/twb/util/twbDashSheetDataDotRenderer.rb
|
|
153
|
+
- lib/twb/util/twbDashesSheetDataDotBuilder.rb
|
|
152
154
|
- lib/twb/util/xraydashboards.rb
|
|
153
155
|
- lib/twb/window.rb
|
|
154
156
|
- lib/twb/workbook.rb
|
|
@@ -188,8 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
188
190
|
- !ruby/object:Gem::Version
|
|
189
191
|
version: '0'
|
|
190
192
|
requirements: []
|
|
191
|
-
|
|
192
|
-
rubygems_version: 2.7.6
|
|
193
|
+
rubygems_version: 3.0.3
|
|
193
194
|
signing_key:
|
|
194
195
|
specification_version: 4
|
|
195
196
|
summary: Classes for accessing Tableau Workbooks and their contents.
|