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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9a5b5e83d54d4375f6da647ca7d3e616f596a7c4
4
- data.tar.gz: 9fea9bddb2e50d3df0f4fc715de80a9cf3f21f88
3
+ metadata.gz: 39dc26453cf66a1e44a8e7d892afc8520b047693
4
+ data.tar.gz: f2bbb24262740b94c5506c2f0f8575baab29bd35
5
5
  SHA512:
6
- metadata.gz: b110ecaf9c4b1e7d80693814573203c0f6dbe0f09e23fc680810297059bf38b4343f34eca0e357ec9e2ed83709bf00d90c242aa6e509978446cdf73132af549a
7
- data.tar.gz: 2fc859c208332803bbf7e14345414984b91a198a5402c11ff47297e999132dbd6514ecbff42eed735bbbc6ae8345ff29858a9b71baac409754a11df6eabcaae9
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
- write_header(formatter)
69
- write_body(formatter, &block)
70
- write_widths(formatter)
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, :worksheet
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 add_header_row(row)
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
 
@@ -24,14 +24,18 @@ module Xport
24
24
  @io
25
25
  end
26
26
 
27
- def add_row(row)
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, :worksheet
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 add_row(row)
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
@@ -1,3 +1,3 @@
1
1
  module Xport
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/xport.rb CHANGED
@@ -16,6 +16,7 @@ require 'xport/download_presenter'
16
16
  require 'xport/formatters/csv'
17
17
  require 'xport/formatters/axlsx'
18
18
  require 'xport/formatters/rubyxl'
19
+ require 'xport/formatters/xlsxtream'
19
20
 
20
21
  module Xport
21
22
  end
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.2.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-08-22 00:00:00.000000000 Z
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: []