merge_excel 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: e7d9194cae8de5e57f5b2c828ed06b84a8bcd64d
4
- data.tar.gz: c23be5c9b741ad107636391285f2b90013040c38
3
+ metadata.gz: 8fd22531f7b258fb03b65e156d56e444b8e8dcab
4
+ data.tar.gz: f8beda50851348cda57c4eebbc33183101e2dab8
5
5
  SHA512:
6
- metadata.gz: 411b29d822d1dea25e569bfa1672f3c788e97562cb67c86a4d08b53635dd13c8a4e8eea954bd136b9a45ea70c26522e0395a5703e5bb89a445bc874c228ee1ac
7
- data.tar.gz: 38d08dc4376f337ebf92276229b280c57803650a82379751bd771ff39e3188c61696fa1250fb81f9e8abe6bd8b7ba468526365ba5c4eea43f392924cc3ea080b
6
+ metadata.gz: 927b150ba12e3f7cb492b1f97f072d4301600fe4a7be8aebd5dc72eb4bc17b56dae6443121071c3f51e527548fb146c94a60053eb525b0c6ead9a23615d5d052
7
+ data.tar.gz: 527e7f72007805c5e35c5df65f33877d50d864b7761d5b192cd35407d7da8f67be990596e3e635531fbc582fa2dbd0dacfa739b12e4d9e92b9281d624b23f390
data/README.md CHANGED
@@ -61,7 +61,66 @@ me.merge merged_file_path
61
61
 
62
62
  In this example will be merged only '.xls' files, of which only the columns from 0 to 5 of the second sheet.
63
63
 
64
+ #### Options explanation
64
65
 
66
+ Note that all indexes (sheets, rows and columns) are 0-based.
67
+
68
+ - `selector_pattern` is used by `Dir.glob` method for filtering files inside the source directory. Default: `"*.{xls|xlsx}"`.
69
+
70
+ - `sheets_idxs` permit to select the sheets to import/merge. Pass an array with indexes (0-based) or `:all`. Default: `:all`.
71
+
72
+ - pass an `{ sheet_index => rules }` hash to `data_rows` in order to specify which rows and column you want to import. You can pass `:any` in place of the `sheet_index` for default rules.
73
+ Rules:
74
+ - `header_row` set the header row index. Put `:missing` to omit the header. Default is `0`
75
+ - `data_starting_row` set the index of the **first row** to import, default is `1`
76
+ - `data_first_column` set the index of the **first column** to import, default is `0`
77
+ - `data_last_column` set the index of the **last column** to import, default is `:last`
78
+
79
+ - pass an `{ sheet_index => rules }` hash to `extra_columns` in order to specify extra columns you want to be added to the final merge (for example you want to insert the filename you get the data). Rules:
80
+ - `position` define the column position of extra data, you can put at `:beginning` or `:end`
81
+ - `data` define an array of desired extra data
82
+ - `type` can be `:filename` if you want to add filename info or `:cell_value` if you want to pick extra info from a cell
83
+ - `label` allow you to set extra data header name
84
+ - when you select `:cell_value` you have to specify `sheet_idx`, `row_idx` and `col_idx`.
85
+
86
+ Another example:
87
+
88
+ ```ruby
89
+ options = {
90
+ sheets_idxs: :all,
91
+ data_rows: {
92
+ 1 => {
93
+ header_row: 0,
94
+ data_starting_row: 1,
95
+ data_first_column: 0 # all columns
96
+ },
97
+ :any => {
98
+ header_row: :missing,
99
+ data_starting_row: 1,
100
+ data_first_column: 0,
101
+ data_last_column: 5
102
+ }
103
+ },
104
+ extra_columns: {
105
+ any: {
106
+ position: :beginning,
107
+ data: [
108
+ {
109
+ type: :filename,
110
+ label: "Filename"
111
+ },
112
+ {
113
+ type: :cell_value,
114
+ label: "Company",
115
+ sheet_idx: 0,
116
+ row_idx: 10,
117
+ col_idx: 3,
118
+ }
119
+ ]
120
+ }
121
+ }
122
+ }
123
+ ```
65
124
 
66
125
 
67
126
  ## Development
@@ -22,5 +22,5 @@ require "merge_excel/extensions/rubyXL/workbook"
22
22
  require "merge_excel/settings/parser"
23
23
  require "merge_excel/settings/data_row"
24
24
  require "merge_excel/settings/data_rows"
25
- require "merge_excel/settings/extra_data_row"
26
- require "merge_excel/settings/extra_data_rows"
25
+ require "merge_excel/settings/extra_column"
26
+ require "merge_excel/settings/extra_columns"
@@ -1,10 +1,10 @@
1
1
  module MergeExcel
2
2
  class DataRow
3
3
  attr_reader :array
4
-
5
- def initialize(array, extra_data_hash, book)
6
- if extra_data_hash
7
- extra_array = extra_data_hash.data.map do |e|
4
+
5
+ def initialize(array, extra_col_hash, book)
6
+ if extra_col_hash
7
+ extra_array = extra_col_hash.data.map do |e|
8
8
  case e.type
9
9
  when :filename
10
10
  book.filename
@@ -14,7 +14,7 @@ module MergeExcel
14
14
  # error?
15
15
  end
16
16
  end
17
- case extra_data_hash.position
17
+ case extra_col_hash.position
18
18
  when :beginning
19
19
  @array = extra_array + array
20
20
  else
@@ -1,10 +1,10 @@
1
1
  module MergeExcel
2
2
  class Header
3
- def initialize(array, extra_data_hash)
3
+ def initialize(array, extra_col_hash)
4
4
 
5
- if extra_data_hash
6
- extra_array = extra_data_hash.data.map{|e| e.label}
7
- case extra_data_hash.position
5
+ if extra_col_hash
6
+ extra_array = extra_col_hash.data.map{|e| e.label}
7
+ case extra_col_hash.position
8
8
  when :beginning
9
9
  @array = extra_array + array
10
10
  else
@@ -1,10 +1,9 @@
1
1
  module MergeExcel
2
2
  module Settings
3
- class ExtraDataRow
4
- # DEFAULT_EXTRA_DATA_ROW_CONFIG = {position: :beginning, data: [{ type: :filename, label: "Filename" }]}
5
- DEFAULT_EXTRA_DATA_ROW_CONFIG = {}
3
+ class ExtraColumn
4
+ DEFAULT_EXTRA_COLUMN_CONFIG = {}
6
5
 
7
- class FilenameExtraDataRow
6
+ class FilenameExtraColumn
8
7
  TYPE = :filename
9
8
  attr_reader :label, :type
10
9
  def initialize(label)
@@ -13,7 +12,7 @@ module MergeExcel
13
12
  end
14
13
  end
15
14
 
16
- class CellValueExtraDataRow
15
+ class CellValueExtraColumn
17
16
  TYPE = :cell_value
18
17
  attr_reader :label, :type, :sheet_idx, :row_idx, :col_idx
19
18
  def initialize(label, coordinates_hash)
@@ -38,21 +37,21 @@ module MergeExcel
38
37
  def read_data_array(array)
39
38
  array.each do |h|
40
39
  if h[:type]==:filename
41
- @data << FilenameExtraDataRow.new(h.fetch(:label){"Filename"})
40
+ @data << FilenameExtraColumn.new(h.fetch(:label){"Filename"})
42
41
  elsif h[:type]==:cell_value
43
- @data << CellValueExtraDataRow.new(h.fetch(:label){"Field"}, h)
42
+ @data << CellValueExtraColumn.new(h.fetch(:label){"Field"}, h)
44
43
  end
45
44
  end
46
45
  end
47
46
 
48
47
 
49
48
  def self.with_defaults
50
- new(DEFAULT_EXTRA_DATA_ROW_CONFIG)
49
+ new(DEFAULT_EXTRA_COLUMN_CONFIG)
51
50
  end
52
51
 
53
52
  private
54
53
  def validate_position
55
- raise "Problem with 'extra_data' settings: 'position' must be :beginning or :end" unless [:beginning, :end].include?(@position)
54
+ raise "Problem with 'extra_column' settings: 'position' must be :beginning or :end" unless [:beginning, :end].include?(@position)
56
55
  end
57
56
  end
58
57
  end
@@ -1,6 +1,6 @@
1
1
  module MergeExcel
2
2
  module Settings
3
- class ExtraDataRows
3
+ class ExtraColumns
4
4
  def initialize
5
5
  @hash = {}
6
6
  end
@@ -8,14 +8,14 @@ module MergeExcel
8
8
  def insert(sheet_idx, h)
9
9
  # h: {:any=>{:position=>:beginning, :data=>{:type=>:filename, :heading_text=>"Filename"}}}
10
10
  validate_sheet_idx sheet_idx
11
- @hash[sheet_idx] = ExtraDataRow.new(h)
11
+ @hash[sheet_idx] = ExtraColumn.new(h)
12
12
  end
13
13
 
14
14
  def get(sheet_idx) # a number>=0 or :any
15
15
  validate_sheet_idx sheet_idx
16
16
  @hash.fetch(sheet_idx) do
17
17
  @hash.fetch(:any) do
18
- @hash[:any] = ExtraDataRow.with_defaults
18
+ @hash[:any] = ExtraColumn.with_defaults
19
19
  end
20
20
  end
21
21
  end
@@ -23,9 +23,9 @@ module MergeExcel
23
23
  private
24
24
  def validate_sheet_idx(sheet_idx)
25
25
  if sheet_idx.is_a?(Integer)
26
- raise "Problem with 'extra_data_rows' settings: sheet indexes must be >=0" if sheet_idx<0
26
+ raise "Problem with 'extra_columns' settings: sheet indexes must be >=0" if sheet_idx<0
27
27
  elsif sheet_idx!=:any
28
- raise "Problem with 'extra_data_rows' settings: sheet indexes must be an integer or :any symbol"
28
+ raise "Problem with 'extra_columns' settings: sheet indexes must be an integer or :any symbol"
29
29
  end
30
30
  end
31
31
  end
@@ -1,12 +1,17 @@
1
1
  module MergeExcel
2
2
  module Settings
3
3
  class Parser
4
- attr_reader :selector_pattern, :sheets_idxs, :data_rows, :extra_data_rows
4
+ attr_reader :selector_pattern, :sheets_idxs, :data_rows, :extra_columns
5
5
  def initialize(hash)
6
6
  @selector_pattern = hash.fetch(:selector_pattern){ "*.{xls,xlsx}" }
7
7
  read_sheets_index hash.fetch(:sheets_idxs){ :all }
8
8
  read_data_rows hash.fetch(:data_rows){ {any: DataRow::DEFAULT_DATA_ROW_CONFIG } }
9
- read_extra_data_rows hash.fetch(:extra_data_rows){ {any: ExtraDataRow::DEFAULT_EXTRA_DATA_ROW_CONFIG } }
9
+
10
+ if hash.has_key?(:extra_data_rows) # legacy setting
11
+ read_extra_columns hash.fetch(:extra_data_rows){ {any: ExtraColumn::DEFAULT_EXTRA_COLUMN_CONFIG } }
12
+ else
13
+ read_extra_columns hash.fetch(:extra_columns){ {any: ExtraColumn::DEFAULT_EXTRA_COLUMN_CONFIG } }
14
+ end
10
15
  end
11
16
 
12
17
  def all_sheets?
@@ -35,11 +40,11 @@ module MergeExcel
35
40
  end
36
41
  end
37
42
 
38
- def read_extra_data_rows(h)
43
+ def read_extra_columns(h)
39
44
  # {:any=>{:position=>:beginning, :data=>[{:type=>:filename, :heading_text=>"Filename"}}]}
40
- @extra_data_rows = ExtraDataRows.new
45
+ @extra_columns = ExtraColumns.new
41
46
  h.each_pair do |k,v|
42
- @extra_data_rows.insert(k, v)
47
+ @extra_columns.insert(k, v)
43
48
  end
44
49
  end
45
50
  end
@@ -11,12 +11,12 @@ module MergeExcel
11
11
  @data_rows = []
12
12
  end
13
13
 
14
- def add_header(array, extra_data)
15
- @header = Header.new(array, extra_data)
14
+ def add_header(array, extra_columns)
15
+ @header = Header.new(array, extra_columns)
16
16
  end
17
17
 
18
- def add_data_row(array, extra_data, book)
19
- @data_rows << DataRow.new(array || [], extra_data, book).array
18
+ def add_data_row(array, extra_columns, book)
19
+ @data_rows << DataRow.new(array || [], extra_columns, book).array
20
20
  end
21
21
  end
22
22
  end
@@ -1,3 +1,3 @@
1
1
  module MergeExcel
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -18,7 +18,7 @@ module MergeExcel
18
18
  row_idx = sh_stt.data_starting_row
19
19
  loop do
20
20
  break unless cells = sheet.row_values(row_idx, sh_stt.data_first_column, sh_stt.data_last_column)
21
- sh.add_data_row(cells, @settings.extra_data_rows.get(idx), book)
21
+ sh.add_data_row(cells, @settings.extra_columns.get(idx), book)
22
22
  row_idx+=1
23
23
  end
24
24
  end
@@ -55,7 +55,7 @@ module MergeExcel
55
55
  sh = Sheet.new(sheet, idx)
56
56
  if sh_stt.import_header?
57
57
  arr = sheet.row_values(sh_stt.header_row, sh_stt.data_first_column, sh_stt.data_last_column)
58
- sh.add_header(arr, @settings.extra_data_rows.get(idx))
58
+ sh.add_header(arr, @settings.extra_columns.get(idx))
59
59
  end
60
60
  @sheets << sh
61
61
  sh
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: merge_excel
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
  - Iwan Buetti
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-03-07 00:00:00.000000000 Z
11
+ date: 2018-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -123,8 +123,8 @@ files:
123
123
  - lib/merge_excel/header.rb
124
124
  - lib/merge_excel/settings/data_row.rb
125
125
  - lib/merge_excel/settings/data_rows.rb
126
- - lib/merge_excel/settings/extra_data_row.rb
127
- - lib/merge_excel/settings/extra_data_rows.rb
126
+ - lib/merge_excel/settings/extra_column.rb
127
+ - lib/merge_excel/settings/extra_columns.rb
128
128
  - lib/merge_excel/settings/parser.rb
129
129
  - lib/merge_excel/sheet.rb
130
130
  - lib/merge_excel/sheets.rb