table_transform 0.4.0 → 0.5.0

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