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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9eeed52b5a7aa9db9eea7f0e0f27a40ff2b932be
4
- data.tar.gz: bad8620c79b09929f105d54894b4df931a8b778b
3
+ metadata.gz: 18bd452f05254c417d3deb30c03d61c9595d3494
4
+ data.tar.gz: d998ab542023204734aca739c5caf91538307e91
5
5
  SHA512:
6
- metadata.gz: 7837639dace38af311b85547f997b138812c3bba8d969a356936896f0b1a0be9e12ec22e7b86fbaa705f93a6efd55122d6a739339ad732a619965dfb6d058eaf
7
- data.tar.gz: aa40106dd2c8e0c18129a60e50965a1e4e09eaf3d8305bb367aeab79166d6dc540636e9d0b771e9a4fb6f4e4c1c812593338a4309a2f10251a03f7f9d5b794a2
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.3.0...HEAD
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
- auto_filter = true
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.tr(' ', '_'),
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' if @metadata.keys != t2_header
73
- raise 'Tables cannot be added due to meta data mismatch' if @metadata != table.metadata
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
@@ -1,3 +1,3 @@
1
1
  module TableTransform
2
- VERSION = '0.4.0'
2
+ VERSION = '0.5.0'
3
3
  end
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.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-05 00:00:00.000000000 Z
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