xport 0.2.0 → 0.3.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: 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: []