xport 0.2.0 → 0.3.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/lib/xport/export.rb +13 -11
- data/lib/xport/formatters/axlsx.rb +10 -6
- data/lib/xport/formatters/csv.rb +7 -3
- data/lib/xport/formatters/rubyxl.rb +9 -5
- data/lib/xport/formatters/xlsxtream.rb +47 -0
- data/lib/xport/version.rb +1 -1
- data/lib/xport.rb +1 -0
- 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: 39dc26453cf66a1e44a8e7d892afc8520b047693
|
4
|
+
data.tar.gz: f2bbb24262740b94c5506c2f0f8575baab29bd35
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f228fe115a80a74e06f1fe6b688d5b2d2527db71bcae23f06d96b5acad5990c97e9a4ee28660ba92a1da75072126352587cdf3723b0517687625d01398ea2542
|
7
|
+
data.tar.gz: 6afe887498bb0e73b65206f36136c50c8dfe5d2af3ef17c519d0696bf44b07d64b28702604fbab536c892527dc5e0dfb9cf65cd38becc19e1b6d55ac7f5d479e
|
data/lib/xport/export.rb
CHANGED
@@ -65,12 +65,14 @@ module Xport
|
|
65
65
|
def preload!; end
|
66
66
|
|
67
67
|
def write_contents(formatter, &block)
|
68
|
-
|
69
|
-
|
70
|
-
|
68
|
+
formatter.add_worksheet do |worksheet|
|
69
|
+
write_header(formatter, worksheet)
|
70
|
+
write_body(formatter, worksheet, &block)
|
71
|
+
write_widths(formatter, worksheet)
|
72
|
+
end
|
71
73
|
end
|
72
74
|
|
73
|
-
def write_header(formatter)
|
75
|
+
def write_header(formatter, worksheet)
|
74
76
|
if builder.grouped?
|
75
77
|
group_row = []
|
76
78
|
builder.groups_with_offset_and_colspan.each do |group, offset, colspan|
|
@@ -79,25 +81,25 @@ module Xport
|
|
79
81
|
group_row << nil
|
80
82
|
end
|
81
83
|
end
|
82
|
-
formatter.add_header_row group_row
|
84
|
+
formatter.add_header_row worksheet, group_row
|
83
85
|
|
84
86
|
builder.groups_with_offset_and_colspan.each do |group, offset, colspan|
|
85
87
|
colspan -= 1
|
86
|
-
formatter.merge_header_cells(offset..offset + colspan)
|
88
|
+
formatter.merge_header_cells(worksheet, offset..offset + colspan)
|
87
89
|
end
|
88
90
|
end
|
89
|
-
formatter.add_header_row header_row
|
91
|
+
formatter.add_header_row worksheet, header_row
|
90
92
|
end
|
91
93
|
|
92
|
-
def write_body(formatter)
|
94
|
+
def write_body(formatter, worksheet)
|
93
95
|
each_object do |object, rownum|
|
94
96
|
yield rownum, objects.size if block_given?
|
95
|
-
formatter.add_row object_row(object)
|
97
|
+
formatter.add_row worksheet, object_row(object)
|
96
98
|
end
|
97
99
|
end
|
98
100
|
|
99
|
-
def write_widths(formatter)
|
100
|
-
formatter.column_widths(*builder.widths)
|
101
|
+
def write_widths(formatter, worksheet)
|
102
|
+
formatter.column_widths(worksheet, *builder.widths)
|
101
103
|
end
|
102
104
|
|
103
105
|
def find_in_batches?
|
@@ -14,7 +14,7 @@ module Xport
|
|
14
14
|
end
|
15
15
|
|
16
16
|
class Formatter
|
17
|
-
attr_reader :export, :workbook
|
17
|
+
attr_reader :export, :workbook
|
18
18
|
|
19
19
|
delegate :builder, to: :export
|
20
20
|
|
@@ -22,7 +22,6 @@ module Xport
|
|
22
22
|
@export = export
|
23
23
|
@package = ::Axlsx::Package.new
|
24
24
|
@workbook = @package.workbook
|
25
|
-
@worksheet = @workbook.add_worksheet
|
26
25
|
|
27
26
|
# Support Numbers and multiline strings in Excel Mac 2011
|
28
27
|
# https://github.com/randym/axlsx/issues/252
|
@@ -33,11 +32,16 @@ module Xport
|
|
33
32
|
@package.to_stream
|
34
33
|
end
|
35
34
|
|
36
|
-
def
|
35
|
+
def add_worksheet
|
36
|
+
worksheet = @workbook.add_worksheet
|
37
|
+
yield worksheet
|
38
|
+
end
|
39
|
+
|
40
|
+
def add_header_row(worksheet, row)
|
37
41
|
worksheet.add_row row, style: header_style
|
38
42
|
end
|
39
43
|
|
40
|
-
def add_row(row)
|
44
|
+
def add_row(worksheet, row)
|
41
45
|
values = row.map { |v| v.is_a?(Xport::Cell) ? v.value : v }
|
42
46
|
axlsx_row = worksheet.add_row(values, style: styles, types: builder.types)
|
43
47
|
row.each.with_index do |cell, i|
|
@@ -55,11 +59,11 @@ module Xport
|
|
55
59
|
end
|
56
60
|
end
|
57
61
|
|
58
|
-
def merge_header_cells(range)
|
62
|
+
def merge_header_cells(worksheet, range)
|
59
63
|
worksheet.merge_cells worksheet.rows.first.cells[range]
|
60
64
|
end
|
61
65
|
|
62
|
-
def column_widths(*widths)
|
66
|
+
def column_widths(worksheet, *widths)
|
63
67
|
worksheet.column_widths(*widths)
|
64
68
|
end
|
65
69
|
|
data/lib/xport/formatters/csv.rb
CHANGED
@@ -24,14 +24,18 @@ module Xport
|
|
24
24
|
@io
|
25
25
|
end
|
26
26
|
|
27
|
-
def
|
27
|
+
def add_worksheet
|
28
|
+
yield
|
29
|
+
end
|
30
|
+
|
31
|
+
def add_row(worksheet, row)
|
28
32
|
values = row.map { |v| v.is_a?(Xport::Cell) ? v.value : v }
|
29
33
|
@csv << values
|
30
34
|
end
|
31
35
|
alias_method :add_header_row, :add_row
|
32
36
|
|
33
|
-
def merge_header_cells(range); end
|
34
|
-
def column_widths(*widths); end
|
37
|
+
def merge_header_cells(worksheet, range); end
|
38
|
+
def column_widths(worksheet, *widths); end
|
35
39
|
end
|
36
40
|
end
|
37
41
|
end
|
@@ -14,14 +14,13 @@ module Xport
|
|
14
14
|
end
|
15
15
|
|
16
16
|
class Formatter
|
17
|
-
attr_reader :export, :workbook
|
17
|
+
attr_reader :export, :workbook
|
18
18
|
|
19
19
|
delegate :builder, to: :export
|
20
20
|
|
21
21
|
def initialize(export)
|
22
22
|
@export = export
|
23
23
|
@workbook = ::RubyXL::Workbook.new
|
24
|
-
@worksheet = @workbook.worksheets[0]
|
25
24
|
@i = 0
|
26
25
|
end
|
27
26
|
|
@@ -29,7 +28,12 @@ module Xport
|
|
29
28
|
workbook.stream
|
30
29
|
end
|
31
30
|
|
32
|
-
def
|
31
|
+
def add_worksheet
|
32
|
+
worksheet = workbook.worksheets[0]
|
33
|
+
yield worksheet
|
34
|
+
end
|
35
|
+
|
36
|
+
def add_row(worksheet, row)
|
33
37
|
row.each.with_index do |v, j|
|
34
38
|
value = v.is_a?(Xport::Cell) ? v.value : v
|
35
39
|
worksheet.add_cell(@i, j, value)
|
@@ -38,11 +42,11 @@ module Xport
|
|
38
42
|
end
|
39
43
|
alias_method :add_header_row, :add_row
|
40
44
|
|
41
|
-
def merge_header_cells(range)
|
45
|
+
def merge_header_cells(worksheet, range)
|
42
46
|
worksheet.merge_cells(0, range.first, 0, range.last)
|
43
47
|
end
|
44
48
|
|
45
|
-
def column_widths(*widths)
|
49
|
+
def column_widths(worksheet, *widths)
|
46
50
|
widths.each.with_index do |width, i|
|
47
51
|
next unless width
|
48
52
|
worksheet.change_column_width(i, width)
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Xport
|
4
|
+
module Xlsxtream
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
require 'xlsxtream'
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_xlsx(&block)
|
12
|
+
formatter = Xport::Xlsxtream::Formatter.new(self)
|
13
|
+
to_file(formatter, &block)
|
14
|
+
end
|
15
|
+
|
16
|
+
class Formatter
|
17
|
+
attr_reader :export, :workbook
|
18
|
+
|
19
|
+
delegate :builder, to: :export
|
20
|
+
|
21
|
+
def initialize(export)
|
22
|
+
@io = StringIO.new
|
23
|
+
@workbook = ::Xlsxtream::Workbook.new(@io)
|
24
|
+
@io.rewind
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_file
|
28
|
+
workbook.close
|
29
|
+
@io.rewind
|
30
|
+
@io
|
31
|
+
end
|
32
|
+
|
33
|
+
def add_worksheet(&block)
|
34
|
+
workbook.write_worksheet('Sheet1', use_shared_strings: true, &block)
|
35
|
+
end
|
36
|
+
|
37
|
+
def add_row(worksheet, row)
|
38
|
+
values = row.map { |v| v.is_a?(Xport::Cell) ? v.value : v }
|
39
|
+
worksheet << values
|
40
|
+
end
|
41
|
+
alias_method :add_header_row, :add_row
|
42
|
+
|
43
|
+
def merge_header_cells(worksheet, range); end
|
44
|
+
def column_widths(worksheet, *widths); end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/xport/version.rb
CHANGED
data/lib/xport.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xport
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Janis Vitols
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-12-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -99,6 +99,7 @@ files:
|
|
99
99
|
- lib/xport/formatters/axlsx.rb
|
100
100
|
- lib/xport/formatters/csv.rb
|
101
101
|
- lib/xport/formatters/rubyxl.rb
|
102
|
+
- lib/xport/formatters/xlsxtream.rb
|
102
103
|
- lib/xport/version.rb
|
103
104
|
homepage:
|
104
105
|
licenses: []
|