table_transform 0.4.0 → 0.5.0
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/CHANGELOG.md +5 -1
- data/README.md +7 -0
- data/lib/table_transform/excel_creator.rb +13 -4
- data/lib/table_transform/properties.rb +37 -0
- data/lib/table_transform/table.rb +29 -7
- data/lib/table_transform/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 18bd452f05254c417d3deb30c03d61c9595d3494
|
|
4
|
+
data.tar.gz: d998ab542023204734aca739c5caf91538307e91
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fb3c761f20419bccf2a954c05ee50b0baf01886bc87df0808071cf44147e6c8050bee7b8d0613b058a7f152dbe8ce6e02b4cd74ac08164e0dff3590028060bad
|
|
7
|
+
data.tar.gz: 55bf3224205284a9b32904fa7f5d507be845878bd4eaf0f983a17e26456d6cccb24f1420a7df697866223b2df2964150404285e1db6497efe7904464172bcc1c
|
data/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,9 @@ TableTransform is still in pre-release state. This means that its APIs and behav
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.5.0][] (2016-03-13)
|
|
10
|
+
* Table properties added
|
|
11
|
+
|
|
9
12
|
## [0.4.0][] (2016-03-05)
|
|
10
13
|
* Supports formulas in columns
|
|
11
14
|
* Helper functions to create formulas
|
|
@@ -25,7 +28,8 @@ TableTransform is still in pre-release state. This means that its APIs and behav
|
|
|
25
28
|
* Initial release including Table
|
|
26
29
|
|
|
27
30
|
[Semver]: http://semver.org
|
|
28
|
-
[Unreleased]: https://github.com/jonas-lantto/table_transform/compare/v0.
|
|
31
|
+
[Unreleased]: https://github.com/jonas-lantto/table_transform/compare/v0.5.0...HEAD
|
|
32
|
+
[0.4.0]: https://github.com/jonas-lantto/table_transform/compare/v0.4.0...v0.5.0
|
|
29
33
|
[0.4.0]: https://github.com/jonas-lantto/table_transform/compare/v0.3.0...v0.4.0
|
|
30
34
|
[0.3.0]: https://github.com/jonas-lantto/table_transform/compare/v0.2.0...v0.3.0
|
|
31
35
|
[0.2.0]: https://github.com/jonas-lantto/table_transform/compare/v0.1.0...v0.2.0
|
data/README.md
CHANGED
|
@@ -73,6 +73,13 @@ A row can access its values by column name e.g. `row['Name']`
|
|
|
73
73
|
c = row['Col1'] # c = 'CHECK'
|
|
74
74
|
c.include_any?(%w(AA EC DD))) # true
|
|
75
75
|
|
|
76
|
+
### Table properties
|
|
77
|
+
# Set table name - override default name
|
|
78
|
+
t.table_properties.update({name: 'Table1'})
|
|
79
|
+
|
|
80
|
+
# Set turn on/off auto filter button
|
|
81
|
+
t.table_properties.update({auto_filter: false})
|
|
82
|
+
|
|
76
83
|
### Meta data
|
|
77
84
|
# Set format for one column
|
|
78
85
|
t.set_metadata('Tax', {format: '0.0%'})
|
|
@@ -23,6 +23,15 @@ module TableTransform
|
|
|
23
23
|
#################################
|
|
24
24
|
private
|
|
25
25
|
|
|
26
|
+
def self.default_properties(table_name)
|
|
27
|
+
TableTransform::Table::TableProperties.new(
|
|
28
|
+
{
|
|
29
|
+
name: table_name.tr(' ', '_'),
|
|
30
|
+
auto_filter: true
|
|
31
|
+
}
|
|
32
|
+
)
|
|
33
|
+
end
|
|
34
|
+
|
|
26
35
|
# estimated column width of format
|
|
27
36
|
def self.format_column_size(format)
|
|
28
37
|
return 0 if format.nil?
|
|
@@ -71,8 +80,8 @@ module TableTransform
|
|
|
71
80
|
data = table.to_a
|
|
72
81
|
return if data.nil? or data.empty? # Create empty worksheet if no data
|
|
73
82
|
|
|
74
|
-
|
|
75
|
-
col_width = ExcelCreator::column_width(table, auto_filter)
|
|
83
|
+
properties = ExcelCreator::default_properties(name).update(table.table_properties.to_h)
|
|
84
|
+
col_width = ExcelCreator::column_width(table, properties[:auto_filter])
|
|
76
85
|
|
|
77
86
|
header = data.shift
|
|
78
87
|
data << [nil] * header.count if data.empty? # Add extra row if empty
|
|
@@ -80,9 +89,9 @@ module TableTransform
|
|
|
80
89
|
worksheet.add_table(
|
|
81
90
|
0, 0, data.count, header.count - 1,
|
|
82
91
|
{
|
|
83
|
-
:name => name
|
|
92
|
+
:name => properties[:name],
|
|
84
93
|
:data => data,
|
|
85
|
-
:autofilter => auto_filter ? 1 : 0,
|
|
94
|
+
:autofilter => properties[:auto_filter] ? 1 : 0,
|
|
86
95
|
:columns => create_column_metadata(table.metadata, @formats, table.formulas)
|
|
87
96
|
}
|
|
88
97
|
)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
|
|
2
|
+
module TableTransform
|
|
3
|
+
|
|
4
|
+
class Properties
|
|
5
|
+
def initialize(init_properties = {})
|
|
6
|
+
validate(init_properties)
|
|
7
|
+
@props = init_properties
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def validate(properties)
|
|
11
|
+
raise 'Default properties must be a hash' unless properties.is_a? Hash
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def to_h
|
|
15
|
+
@props.clone
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def update(properties)
|
|
19
|
+
validate(properties)
|
|
20
|
+
@props.merge! properties
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def delete(prop_key)
|
|
24
|
+
@props.delete(prop_key)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def reset(properties)
|
|
28
|
+
validate(properties)
|
|
29
|
+
@props = properties
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def [](prop_key)
|
|
33
|
+
raise "Property '#{prop_key}' does not exist" unless @props.include? prop_key
|
|
34
|
+
@props[prop_key]
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'csv'
|
|
2
|
+
require_relative 'properties'
|
|
2
3
|
|
|
3
4
|
module TableTransform
|
|
4
5
|
module Util
|
|
@@ -9,6 +10,7 @@ module TableTransform
|
|
|
9
10
|
|
|
10
11
|
class Table
|
|
11
12
|
attr_reader :formulas
|
|
13
|
+
attr_reader :table_properties
|
|
12
14
|
|
|
13
15
|
def self.create_from_file(file_name, sep = ',')
|
|
14
16
|
rows = CSV.read(file_name, { :col_sep => sep })
|
|
@@ -17,15 +19,15 @@ module TableTransform
|
|
|
17
19
|
Table.new(rows)
|
|
18
20
|
end
|
|
19
21
|
|
|
20
|
-
def self.create_empty(header)
|
|
22
|
+
def self.create_empty(header, table_properties = {})
|
|
21
23
|
raise 'Table header need to be array' unless header.is_a? Array
|
|
22
24
|
raise 'Table, No header defined' if header.empty?
|
|
23
|
-
Table.new([header])
|
|
25
|
+
Table.new([header], table_properties)
|
|
24
26
|
end
|
|
25
27
|
|
|
26
28
|
# @throws if column names not unique
|
|
27
29
|
# @throws if column size for each row match
|
|
28
|
-
def initialize(rows)
|
|
30
|
+
def initialize(rows, table_properties = {})
|
|
29
31
|
raise 'Table required to have at least a header row' if (rows.nil? or rows.empty?)
|
|
30
32
|
|
|
31
33
|
@data_rows = rows.clone
|
|
@@ -33,6 +35,7 @@ module TableTransform
|
|
|
33
35
|
@column_indexes = create_column_name_binding(header)
|
|
34
36
|
@metadata = header.zip( Array.new(header.size){{}} ).to_h
|
|
35
37
|
@formulas = {}
|
|
38
|
+
@table_properties = TableProperties.new(table_properties)
|
|
36
39
|
|
|
37
40
|
validate_header_uniqueness(header)
|
|
38
41
|
validate_column_size
|
|
@@ -69,8 +72,9 @@ module TableTransform
|
|
|
69
72
|
def +(table)
|
|
70
73
|
t2 = table.to_a
|
|
71
74
|
t2_header = t2.shift
|
|
72
|
-
raise 'Tables cannot be added due to header mismatch'
|
|
73
|
-
raise 'Tables cannot be added due to meta data mismatch'
|
|
75
|
+
raise 'Tables cannot be added due to header mismatch' unless @metadata.keys == t2_header
|
|
76
|
+
raise 'Tables cannot be added due to meta data mismatch' unless @metadata == table.metadata
|
|
77
|
+
raise 'Tables cannot be added due to table properties mismatch' unless @table_properties.to_h == table.table_properties.to_h
|
|
74
78
|
TableTransform::Table.new(self.to_a + t2)
|
|
75
79
|
end
|
|
76
80
|
|
|
@@ -90,7 +94,7 @@ module TableTransform
|
|
|
90
94
|
def extract(header)
|
|
91
95
|
validate_column_names(*header)
|
|
92
96
|
selected_cols = @column_indexes.values_at(*header)
|
|
93
|
-
t = Table.new( @data_rows.inject([header]) {|res, row| (res << row.values_at(*selected_cols))} )
|
|
97
|
+
t = Table.new( @data_rows.inject([header]) {|res, row| (res << row.values_at(*selected_cols))}, @table_properties.to_h )
|
|
94
98
|
t.metadata = t.metadata.keys.zip(@metadata.values_at(*header)).to_h
|
|
95
99
|
t.formulas = header.zip(@formulas.values_at(*header)).to_h
|
|
96
100
|
t
|
|
@@ -98,7 +102,7 @@ module TableTransform
|
|
|
98
102
|
|
|
99
103
|
# @returns new table with rows that match given block
|
|
100
104
|
def filter
|
|
101
|
-
Table.new( @data_rows.select {|row| yield Row.new(@column_indexes, row)}.unshift @metadata.keys.clone )
|
|
105
|
+
Table.new( (@data_rows.select {|row| yield Row.new(@column_indexes, row)}.unshift @metadata.keys.clone), @table_properties.to_h )
|
|
102
106
|
end
|
|
103
107
|
|
|
104
108
|
#adds a column with given name to the far right of the table
|
|
@@ -164,6 +168,24 @@ module TableTransform
|
|
|
164
168
|
end
|
|
165
169
|
end
|
|
166
170
|
|
|
171
|
+
# Table properties
|
|
172
|
+
class TableProperties < TableTransform::Properties
|
|
173
|
+
def validate(properties)
|
|
174
|
+
super
|
|
175
|
+
properties.each { |k, v|
|
|
176
|
+
case k
|
|
177
|
+
when :name
|
|
178
|
+
raise "Table property '#{k}' expected to be a non-empty string" unless v.is_a?(String) && !v.empty?
|
|
179
|
+
when :auto_filter
|
|
180
|
+
raise "Table property '#{k}' expected to be a boolean" unless !!v == v
|
|
181
|
+
else
|
|
182
|
+
raise "Table property unknown '#{k}'"
|
|
183
|
+
end
|
|
184
|
+
}
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
|
|
167
189
|
protected
|
|
168
190
|
attr_writer :metadata
|
|
169
191
|
attr_writer :formulas
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: table_transform
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jonas Lantto
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-03-
|
|
11
|
+
date: 2016-03-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -102,6 +102,7 @@ files:
|
|
|
102
102
|
- lib/table_transform.rb
|
|
103
103
|
- lib/table_transform/excel_creator.rb
|
|
104
104
|
- lib/table_transform/formula_helper.rb
|
|
105
|
+
- lib/table_transform/properties.rb
|
|
105
106
|
- lib/table_transform/table.rb
|
|
106
107
|
- lib/table_transform/version.rb
|
|
107
108
|
- table_transform.gemspec
|