htot_conv 0.3.1 → 0.3.2

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.
@@ -1,84 +1,84 @@
1
- # frozen_string_literal: true
2
- require 'axlsx'
3
-
4
- require 'htot_conv/generator/base'
5
-
6
- module HTOTConv
7
- module Generator
8
- class XlsxType4 < XlsxBase
9
- def self.option_help
10
- {
11
- :integrate_cells => {
12
- :default => nil,
13
- :pat => [:colspan, :rowspan, :both],
14
- :desc => "integrate key cells (specify 'colspan', 'rowspan' or 'both')",
15
- },
16
- }
17
- end
18
-
19
- def output_to_worksheet(ws)
20
- max_level = @data.max_level
21
- max_value_length = @data.max_value_length
22
-
23
- ws.add_row(((1..max_level).map {|l| @data.key_header[l - 1] || nil }).concat(
24
- HTOTConv::Util.pad_array(@data.value_header, max_value_length)),
25
- :style => Axlsx::STYLE_THIN_BORDER)
26
-
27
- rowspan_cells = Array.new(max_level) { [] }
28
- @data.to_tree.descendants.each do |node|
29
- if node.leaf?
30
- item = node.item
31
-
32
- key_cell = Array.new(max_level, nil)
33
- [node].concat(node.ancestors.to_a).each do |c_node|
34
- key_cell[c_node.item.level - 1] = c_node.item.key if c_node.item
35
- break if c_node.prev
36
- end
37
-
38
- value_cell = HTOTConv::Util.pad_array(item.value, max_value_length)
39
-
40
- ws.add_row(key_cell.concat(value_cell),
41
- :style => Axlsx::STYLE_THIN_BORDER)
42
-
43
- node.ancestors.each_with_object([node]) do |c_node, descendants|
44
- if (c_node.item && c_node.item.level)
45
- edges = [:left, :right]
46
- edges << :top unless (descendants.any? { |v| v.prev })
47
- edges << :bottom unless (descendants.any? { |v| v.next })
48
- ws.rows.last.cells[c_node.item.level - 1].style = ws.styles.add_style(
49
- :border => { :style => :thin, :color => "00", :edges => edges })
50
- end
51
- descendants.unshift(c_node)
52
- end
53
- (item.level..max_level).each do |level|
54
- edges = [:top, :bottom]
55
- edges << :left if (level == item.level)
56
- edges << :right if (level == max_level)
57
- ws.rows.last.cells[level - 1].style = ws.styles.add_style(
58
- :border => { :style => :thin, :color => "00", :edges => edges })
59
- end
60
-
61
- if [:colspan, :both].include?(@option[:integrate_cells])
62
- if item.level < max_level
63
- ws.merge_cells(ws.rows.last.cells[((item.level - 1)..(max_level - 1))])
64
- end
65
- end
66
-
67
- node.ancestors.each_with_object([node]) do |c_node, descendants|
68
- rowspan_cells[c_node.item.level - 1] << ws.rows.last.cells[c_node.item.level - 1]
69
- unless (descendants.any? { |v| v.next })
70
- if [:rowspan, :both].include?(@option[:integrate_cells])
71
- if rowspan_cells[c_node.item.level - 1].length > 1
72
- ws.merge_cells(rowspan_cells[c_node.item.level - 1])
73
- end
74
- end
75
- rowspan_cells[c_node.item.level - 1].clear
76
- end
77
- descendants.unshift(c_node)
78
- end
79
- end
80
- end
81
- end
82
- end
83
- end
84
- end
1
+ # frozen_string_literal: true
2
+ require 'axlsx'
3
+
4
+ require 'htot_conv/generator/base'
5
+
6
+ module HTOTConv
7
+ module Generator
8
+ class XlsxType4 < XlsxBase
9
+ def self.option_help
10
+ {
11
+ :integrate_cells => {
12
+ :default => nil,
13
+ :pat => [:colspan, :rowspan, :both],
14
+ :desc => "integrate key cells (specify 'colspan', 'rowspan' or 'both')",
15
+ },
16
+ }
17
+ end
18
+
19
+ def output_to_worksheet(ws)
20
+ max_level = @data.max_level
21
+ max_value_length = @data.max_value_length
22
+
23
+ ws.add_row(((1..max_level).map {|l| @data.key_header[l - 1] || nil }).concat(
24
+ HTOTConv::Util.pad_array(@data.value_header, max_value_length)),
25
+ :style => Axlsx::STYLE_THIN_BORDER)
26
+
27
+ rowspan_cells = Array.new(max_level) { [] }
28
+ @data.to_tree.descendants.each do |node|
29
+ if node.leaf?
30
+ item = node.item
31
+
32
+ key_cell = Array.new(max_level, nil)
33
+ [node].concat(node.ancestors.to_a).each do |c_node|
34
+ key_cell[c_node.item.level - 1] = c_node.item.key if c_node.item
35
+ break if c_node.prev
36
+ end
37
+
38
+ value_cell = HTOTConv::Util.pad_array(item.value, max_value_length)
39
+
40
+ ws.add_row(key_cell.concat(value_cell),
41
+ :style => Axlsx::STYLE_THIN_BORDER)
42
+
43
+ node.ancestors.each_with_object([node]) do |c_node, descendants|
44
+ if (c_node.item && c_node.item.level)
45
+ edges = [:left, :right]
46
+ edges << :top unless (descendants.any? { |v| v.prev })
47
+ edges << :bottom unless (descendants.any? { |v| v.next })
48
+ ws.rows.last.cells[c_node.item.level - 1].style = ws.styles.add_style(
49
+ :border => { :style => :thin, :color => "00", :edges => edges })
50
+ end
51
+ descendants.unshift(c_node)
52
+ end
53
+ (item.level..max_level).each do |level|
54
+ edges = [:top, :bottom]
55
+ edges << :left if (level == item.level)
56
+ edges << :right if (level == max_level)
57
+ ws.rows.last.cells[level - 1].style = ws.styles.add_style(
58
+ :border => { :style => :thin, :color => "00", :edges => edges })
59
+ end
60
+
61
+ if [:colspan, :both].include?(@option[:integrate_cells])
62
+ if item.level < max_level
63
+ ws.merge_cells(ws.rows.last.cells[((item.level - 1)..(max_level - 1))])
64
+ end
65
+ end
66
+
67
+ node.ancestors.each_with_object([node]) do |c_node, descendants|
68
+ rowspan_cells[c_node.item.level - 1] << ws.rows.last.cells[c_node.item.level - 1]
69
+ unless (descendants.any? { |v| v.next })
70
+ if [:rowspan, :both].include?(@option[:integrate_cells])
71
+ if rowspan_cells[c_node.item.level - 1].length > 1
72
+ ws.merge_cells(rowspan_cells[c_node.item.level - 1])
73
+ end
74
+ end
75
+ rowspan_cells[c_node.item.level - 1].clear
76
+ end
77
+ descendants.unshift(c_node)
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -1,62 +1,62 @@
1
- # frozen_string_literal: true
2
- require 'axlsx'
3
-
4
- require 'htot_conv/generator/base'
5
-
6
- module HTOTConv
7
- module Generator
8
- class XlsxType5 < XlsxBase
9
- def self.option_help
10
- {
11
- :integrate_cells => {
12
- :default => nil,
13
- :pat => [:colspan],
14
- :desc => "integrate key cells (specify 'colspan')",
15
- },
16
- }
17
- end
18
-
19
- def output_to_worksheet(ws)
20
- max_level = @data.max_level
21
- max_value_length = @data.max_value_length
22
-
23
- ws.add_row(((1..max_level).map {|l| @data.key_header[l - 1] || nil }).concat(
24
- HTOTConv::Util.pad_array(@data.value_header, max_value_length)),
25
- :style => Axlsx::STYLE_THIN_BORDER)
26
-
27
- @data.to_tree.descendants.each do |node|
28
- if node.leaf?
29
- item = node.item
30
-
31
- key_cell = Array.new(max_level, nil)
32
- key_cell[node.item.level - 1] = item.key
33
- node.ancestors.each do |ancestor|
34
- key_cell[ancestor.item.level - 1] = ancestor.item.key if ancestor.item
35
- end
36
-
37
- value_cell = HTOTConv::Util.pad_array(item.value, max_value_length)
38
-
39
- ws.add_row(key_cell.concat(value_cell),
40
- :style => Axlsx::STYLE_THIN_BORDER)
41
-
42
- (item.level..max_level).each do |level|
43
- edges = [:top, :bottom]
44
- edges << :left if (level == item.level)
45
- edges << :right if (level == max_level)
46
- ws.rows.last.cells[level - 1].style = ws.styles.add_style(
47
- :border => { :style => :thin, :color => "00", :edges => edges })
48
- end
49
-
50
- if [:colspan].include?(@option[:integrate_cells])
51
- if item.level < max_level
52
- ws.merge_cells(ws.rows.last.cells[((item.level - 1)..(max_level - 1))])
53
- end
54
- end
55
- end
56
- end
57
-
58
- ws.auto_filter = "A1:#{ws.rows.last.cells[max_level + max_value_length - 1].r}"
59
- end
60
- end
61
- end
62
- end
1
+ # frozen_string_literal: true
2
+ require 'axlsx'
3
+
4
+ require 'htot_conv/generator/base'
5
+
6
+ module HTOTConv
7
+ module Generator
8
+ class XlsxType5 < XlsxBase
9
+ def self.option_help
10
+ {
11
+ :integrate_cells => {
12
+ :default => nil,
13
+ :pat => [:colspan],
14
+ :desc => "integrate key cells (specify 'colspan')",
15
+ },
16
+ }
17
+ end
18
+
19
+ def output_to_worksheet(ws)
20
+ max_level = @data.max_level
21
+ max_value_length = @data.max_value_length
22
+
23
+ ws.add_row(((1..max_level).map {|l| @data.key_header[l - 1] || nil }).concat(
24
+ HTOTConv::Util.pad_array(@data.value_header, max_value_length)),
25
+ :style => Axlsx::STYLE_THIN_BORDER)
26
+
27
+ @data.to_tree.descendants.each do |node|
28
+ if node.leaf?
29
+ item = node.item
30
+
31
+ key_cell = Array.new(max_level, nil)
32
+ key_cell[node.item.level - 1] = item.key
33
+ node.ancestors.each do |ancestor|
34
+ key_cell[ancestor.item.level - 1] = ancestor.item.key if ancestor.item
35
+ end
36
+
37
+ value_cell = HTOTConv::Util.pad_array(item.value, max_value_length)
38
+
39
+ ws.add_row(key_cell.concat(value_cell),
40
+ :style => Axlsx::STYLE_THIN_BORDER)
41
+
42
+ (item.level..max_level).each do |level|
43
+ edges = [:top, :bottom]
44
+ edges << :left if (level == item.level)
45
+ edges << :right if (level == max_level)
46
+ ws.rows.last.cells[level - 1].style = ws.styles.add_style(
47
+ :border => { :style => :thin, :color => "00", :edges => edges })
48
+ end
49
+
50
+ if [:colspan].include?(@option[:integrate_cells])
51
+ if item.level < max_level
52
+ ws.merge_cells(ws.rows.last.cells[((item.level - 1)..(max_level - 1))])
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ ws.auto_filter = "A1:#{ws.rows.last.cells[max_level + max_value_length - 1].r}"
59
+ end
60
+ end
61
+ end
62
+ end
@@ -1,30 +1,30 @@
1
- # frozen_string_literal: true
2
- require 'htot_conv/generator/xlsx_type0.rb'
3
- require 'htot_conv/generator/xlsx_type1.rb'
4
- require 'htot_conv/generator/xlsx_type2.rb'
5
- require 'htot_conv/generator/xlsx_type3.rb'
6
- require 'htot_conv/generator/xlsx_type4.rb'
7
- require 'htot_conv/generator/xlsx_type5.rb'
8
-
9
- require 'rinne'
10
-
11
- module HTOTConv
12
- module Generator
13
- def create(type, *args)
14
- klass = HTOTConv::Generator.const_get(Rinne.camelize(type.to_s))
15
- klass.new(*args)
16
- end
17
- module_function :create
18
-
19
- def types
20
- HTOTConv::Generator.constants.reject { |klass|
21
- klass =~ /Base$/
22
- }.select { |klass|
23
- HTOTConv::Generator.const_get(klass).kind_of?(Class)
24
- }.map { |klass|
25
- Rinne.to_snake(klass.to_s).to_sym
26
- }
27
- end
28
- module_function :types
29
- end
30
- end
1
+ # frozen_string_literal: true
2
+ require 'htot_conv/generator/xlsx_type0.rb'
3
+ require 'htot_conv/generator/xlsx_type1.rb'
4
+ require 'htot_conv/generator/xlsx_type2.rb'
5
+ require 'htot_conv/generator/xlsx_type3.rb'
6
+ require 'htot_conv/generator/xlsx_type4.rb'
7
+ require 'htot_conv/generator/xlsx_type5.rb'
8
+
9
+ require 'rinne'
10
+
11
+ module HTOTConv
12
+ module Generator
13
+ def create(type, *args)
14
+ klass = HTOTConv::Generator.const_get(Rinne.camelize(type.to_s))
15
+ klass.new(*args)
16
+ end
17
+ module_function :create
18
+
19
+ def types
20
+ HTOTConv::Generator.constants.reject { |klass|
21
+ klass =~ /Base$/
22
+ }.select { |klass|
23
+ HTOTConv::Generator.const_get(klass).kind_of?(Class)
24
+ }.map { |klass|
25
+ Rinne.to_snake(klass.to_s).to_sym
26
+ }
27
+ end
28
+ module_function :types
29
+ end
30
+ end