fast_excel 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +5 -5
  2. data/.dockerignore +2 -0
  3. data/.gitignore +7 -0
  4. data/.travis.yml +44 -0
  5. data/CHANGELOG.md +41 -1
  6. data/Dockerfile.test +16 -0
  7. data/Gemfile +5 -2
  8. data/Gemfile.lock +30 -23
  9. data/LICENSE +21 -0
  10. data/Makefile +13 -0
  11. data/README.md +177 -40
  12. data/Rakefile +16 -0
  13. data/appveyor.yml +25 -0
  14. data/benchmarks/1k_rows.rb +17 -4
  15. data/benchmarks/20k_rows.rb +4 -0
  16. data/benchmarks/auto_width.rb +37 -0
  17. data/benchmarks/init.rb +14 -2
  18. data/benchmarks/memory.rb +8 -0
  19. data/benchmarks/profiler.rb +27 -0
  20. data/benchmarks/write_value.rb +62 -0
  21. data/examples/example.rb +3 -4
  22. data/examples/example_align.rb +23 -0
  23. data/examples/example_auto_width.rb +26 -0
  24. data/examples/example_colors.rb +37 -0
  25. data/examples/example_filters.rb +36 -0
  26. data/examples/example_formula.rb +1 -5
  27. data/examples/example_hyperlink.rb +20 -0
  28. data/examples/example_image.rb +1 -1
  29. data/examples/example_styles.rb +27 -0
  30. data/examples/logo.png +0 -0
  31. data/ext/fast_excel/extconf.rb +3 -0
  32. data/ext/fast_excel/text_width_ext.c +460 -0
  33. data/fast_excel.gemspec +2 -3
  34. data/letters.html +114 -0
  35. data/lib/fast_excel.rb +455 -78
  36. data/lib/fast_excel/binding.rb +31 -21
  37. data/lib/fast_excel/binding/chart.rb +20 -1
  38. data/lib/fast_excel/binding/format.rb +11 -4
  39. data/lib/fast_excel/binding/workbook.rb +10 -2
  40. data/lib/fast_excel/binding/worksheet.rb +44 -27
  41. data/libxlsxwriter/.gitignore +1 -0
  42. data/libxlsxwriter/.indent.pro +8 -0
  43. data/libxlsxwriter/.travis.yml +12 -0
  44. data/libxlsxwriter/CMakeLists.txt +338 -0
  45. data/libxlsxwriter/CONTRIBUTING.md +1 -1
  46. data/libxlsxwriter/Changes.txt +162 -0
  47. data/libxlsxwriter/LICENSE.txt +65 -4
  48. data/libxlsxwriter/Makefile +33 -11
  49. data/libxlsxwriter/Readme.md +3 -1
  50. data/libxlsxwriter/cocoapods/libxlsxwriter-umbrella.h +2 -1
  51. data/libxlsxwriter/cocoapods/libxlsxwriter.modulemap +2 -2
  52. data/libxlsxwriter/include/xlsxwriter.h +2 -2
  53. data/libxlsxwriter/include/xlsxwriter/app.h +2 -2
  54. data/libxlsxwriter/include/xlsxwriter/chart.h +164 -13
  55. data/libxlsxwriter/include/xlsxwriter/chartsheet.h +544 -0
  56. data/libxlsxwriter/include/xlsxwriter/common.h +35 -6
  57. data/libxlsxwriter/include/xlsxwriter/content_types.h +5 -2
  58. data/libxlsxwriter/include/xlsxwriter/core.h +2 -2
  59. data/libxlsxwriter/include/xlsxwriter/custom.h +2 -2
  60. data/libxlsxwriter/include/xlsxwriter/drawing.h +3 -2
  61. data/libxlsxwriter/include/xlsxwriter/format.h +8 -8
  62. data/libxlsxwriter/include/xlsxwriter/hash_table.h +1 -1
  63. data/libxlsxwriter/include/xlsxwriter/packager.h +18 -8
  64. data/libxlsxwriter/include/xlsxwriter/relationships.h +2 -2
  65. data/libxlsxwriter/include/xlsxwriter/shared_strings.h +5 -3
  66. data/libxlsxwriter/include/xlsxwriter/styles.h +10 -5
  67. data/libxlsxwriter/include/xlsxwriter/theme.h +2 -2
  68. data/libxlsxwriter/include/xlsxwriter/utility.h +35 -5
  69. data/libxlsxwriter/include/xlsxwriter/workbook.h +234 -57
  70. data/libxlsxwriter/include/xlsxwriter/worksheet.h +780 -91
  71. data/libxlsxwriter/include/xlsxwriter/xmlwriter.h +4 -2
  72. data/libxlsxwriter/libxlsxwriter.podspec +4 -2
  73. data/libxlsxwriter/src/Makefile +31 -6
  74. data/libxlsxwriter/src/app.c +2 -2
  75. data/libxlsxwriter/src/chart.c +116 -23
  76. data/libxlsxwriter/src/chartsheet.c +508 -0
  77. data/libxlsxwriter/src/content_types.c +12 -4
  78. data/libxlsxwriter/src/core.c +11 -11
  79. data/libxlsxwriter/src/custom.c +3 -3
  80. data/libxlsxwriter/src/drawing.c +114 -17
  81. data/libxlsxwriter/src/format.c +5 -5
  82. data/libxlsxwriter/src/hash_table.c +1 -1
  83. data/libxlsxwriter/src/packager.c +378 -61
  84. data/libxlsxwriter/src/relationships.c +2 -2
  85. data/libxlsxwriter/src/shared_strings.c +18 -4
  86. data/libxlsxwriter/src/styles.c +59 -12
  87. data/libxlsxwriter/src/theme.c +2 -2
  88. data/libxlsxwriter/src/utility.c +93 -6
  89. data/libxlsxwriter/src/workbook.c +379 -61
  90. data/libxlsxwriter/src/worksheet.c +1240 -174
  91. data/libxlsxwriter/src/xmlwriter.c +18 -9
  92. data/libxlsxwriter/third_party/minizip/Makefile +6 -1
  93. data/libxlsxwriter/third_party/minizip/ioapi.c +10 -0
  94. data/libxlsxwriter/third_party/minizip/zip.c +2 -0
  95. data/libxlsxwriter/third_party/tmpfileplus/tmpfileplus.c +2 -2
  96. data/libxlsxwriter/version.txt +1 -1
  97. data/test/auto_width_test.rb +19 -0
  98. data/test/date_test.rb +34 -0
  99. data/test/format_test.rb +179 -0
  100. data/test/reopen_test.rb +22 -0
  101. data/test/test_helper.rb +23 -4
  102. data/test/text_width_test.rb +80 -0
  103. data/test/tmpfile_test.rb +1 -0
  104. data/test/validations_test.rb +47 -0
  105. data/test/worksheet_test.rb +129 -0
  106. metadata +34 -5
@@ -0,0 +1,22 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe "FastExcel::Worksheet" do
4
+
5
+ it "should get_worksheet_by_name" do
6
+ workbook = FastExcel.open(constant_memory: false)
7
+ workbook.add_worksheet("Page1")
8
+
9
+ ws = workbook.get_worksheet_by_name("Page1")
10
+ ws.write_row(0, ['1'])
11
+
12
+ workbook.close
13
+
14
+ error = assert_raises do
15
+ FastExcel.open(workbook.filename, constant_memory: false)
16
+ end
17
+
18
+ assert_equal(error.class, ArgumentError)
19
+ assert_equal(error.message, "File '#{workbook.filename}' already exists. FastExcel can not open existing files, only create new files")
20
+ end
21
+
22
+ end
@@ -1,6 +1,7 @@
1
1
  require 'bundler/setup'
2
2
  require 'minitest/autorun'
3
3
  require "minitest/reporters"
4
+ require 'pp'
4
5
 
5
6
  ##Encoding.default_external = Encoding::UTF_8
6
7
  ##Encoding.default_internal = Encoding::UTF_8
@@ -20,9 +21,13 @@ ensure
20
21
  File.delete(file_path)
21
22
  end
22
23
 
24
+ def get_arrays(workbook)
25
+ workbook.close
26
+ parse_xlsx_as_matrix(workbook.filename)
27
+ end
28
+
23
29
  def parse_xlsx_as_array(file_path)
24
- excel = parse_xlsx(file_path)
25
- data = excel.to_matrix.to_a
30
+ data = parse_xlsx_as_matrix(file_path)
26
31
  headers = data.shift
27
32
 
28
33
  data.map do |row|
@@ -32,5 +37,19 @@ end
32
37
 
33
38
  def parse_xlsx_as_matrix(file_path)
34
39
  excel = parse_xlsx(file_path)
35
- excel.to_matrix.to_a
36
- end
40
+
41
+ sheet = excel.sheet(0)
42
+
43
+ rows = []
44
+ if sheet.last_row
45
+ 1.upto(sheet.last_row) do |row_number|
46
+ row = 1.upto(sheet.last_column).map do |col|
47
+ sheet.cell(row_number, col)
48
+ end
49
+
50
+ rows << row
51
+ end
52
+ end
53
+
54
+ return rows
55
+ end
@@ -0,0 +1,80 @@
1
+ require_relative 'test_helper'
2
+
3
+
4
+ describe "FastExcel Arial text_width" do
5
+
6
+ before do
7
+ skip "Use basic width calc for now"
8
+ end
9
+
10
+ it "should calculate width for character" do
11
+ assert_in_delta(FastExcel.arial_text_width('a'), 55.61, 0.1)
12
+ end
13
+
14
+ it "should calculate width with kerning" do
15
+ assert_in_delta(FastExcel.arial_text_width('A'), 66.69, 0.1)
16
+ assert_in_delta(FastExcel.arial_text_width('V'), 66.69, 0.1)
17
+
18
+ assert_in_delta(FastExcel.arial_text_width('AV'), 125.97, 0.1)
19
+
20
+ assert_in_delta(FastExcel.arial_text_width('11'), 103.80, 0.1)
21
+ end
22
+
23
+ it "should skip system characters" do
24
+ assert_in_delta(FastExcel.arial_text_width(10.chr), 0.0)
25
+ end
26
+
27
+ it "should handle multiline text" do
28
+ assert_in_delta(FastExcel.arial_text_width("More\nThen\nOne Line"), 405.85, 0.1)
29
+ end
30
+ end
31
+
32
+ describe "FastExcel Calibri text_width" do
33
+
34
+ before do
35
+ skip "Use basic width calc for now"
36
+ end
37
+
38
+ it "should calculate width for character" do
39
+ assert_in_delta(FastExcel.calibri_text_width('a'), 47.90, 0.1)
40
+ end
41
+
42
+ it "should calculate width with kerning" do
43
+ assert_in_delta(FastExcel.calibri_text_width('A'), 57.86, 0.1)
44
+ assert_in_delta(FastExcel.calibri_text_width('V'), 56.73, 0.1)
45
+
46
+ assert_in_delta(FastExcel.calibri_text_width('AV'), 110.25, 0.1)
47
+
48
+ assert_in_delta(FastExcel.calibri_text_width('11'), 101.36, 0.1)
49
+ end
50
+
51
+ it "should skip system characters" do
52
+ assert_in_delta(FastExcel.calibri_text_width(10.chr), 0.0)
53
+ end
54
+
55
+ end
56
+
57
+ describe "FastExcel Times New Roman text_width" do
58
+
59
+ before do
60
+ skip "Use basic width calc for now"
61
+ end
62
+
63
+ it "should calculate width for character" do
64
+ assert_in_delta(FastExcel.times_new_roman_text_width('a'), 44.38, 0.1)
65
+ end
66
+
67
+ it "should calculate width with kerning" do
68
+ assert_in_delta(FastExcel.times_new_roman_text_width('A'), 72.21, 0.1)
69
+ assert_in_delta(FastExcel.times_new_roman_text_width('V'), 72.21, 0.1)
70
+
71
+ assert_in_delta(FastExcel.times_new_roman_text_width('AV'), 131.54, 0.1)
72
+
73
+ assert_in_delta(FastExcel.times_new_roman_text_width('11'), 96.28, 0.1)
74
+ end
75
+
76
+ it "should skip system characters" do
77
+ assert_in_delta(FastExcel.times_new_roman_text_width(10.chr), 0.0)
78
+ end
79
+
80
+ end
@@ -17,6 +17,7 @@ describe "FastExcel" do
17
17
  workbook.read_string
18
18
 
19
19
  refute(File.exist?(workbook.filename))
20
+ refute(File.exist?(File.dirname(workbook.filename)))
20
21
  refute(workbook.is_open)
21
22
  end
22
23
 
@@ -0,0 +1,47 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe "FastExcel validations" do
4
+
5
+ it "should raise error when duplicate sheet name" do
6
+ workbook = FastExcel.open(constant_memory: true)
7
+
8
+ workbook.add_worksheet("Payments Report")
9
+ error = assert_raises do
10
+ workbook.add_worksheet("Payments Report")
11
+ end
12
+
13
+ assert_equal(ArgumentError, error.class)
14
+ assert_equal("Worksheet name 'Payments Report' is already in use", error.message)
15
+ end
16
+
17
+ it "should not raise error when worksheet name is null" do
18
+ workbook = FastExcel.open(constant_memory: true)
19
+
20
+ ws1 = workbook.add_worksheet()
21
+ ws2 = workbook.add_worksheet()
22
+ ws2.write_value(0, 2, "aaa")
23
+
24
+ assert_equal("Sheet1", ws1[:name])
25
+ assert_equal("Sheet2", ws2[:name])
26
+ end
27
+
28
+ it "should raise error when the sheet name exceeds maximum length" do
29
+ workbook = FastExcel.open(constant_memory: true)
30
+
31
+ error = assert_raises do
32
+ workbook.add_worksheet("ABCDEFGHIJKLMNOPQRSTUVWXYZ012345")
33
+ end
34
+
35
+ assert_equal(ArgumentError, error.class)
36
+ assert_equal("Worksheet name 'ABCDEFGHIJKLMNOPQRSTUVWXYZ012345' exceeds Excel's limit of 31 characters", error.message)
37
+ end
38
+
39
+ it "should not raise error when the sheet name is at maximum length" do
40
+ workbook = FastExcel.open(constant_memory: true)
41
+
42
+ worksheet = workbook.add_worksheet("ABCDEFGHIJKLMNOPQRSTUVWXYZ01234")
43
+ worksheet.append_row(["aaa", "bbb", "ccc"])
44
+
45
+ assert_equal("ABCDEFGHIJKLMNOPQRSTUVWXYZ01234", worksheet[:name])
46
+ end
47
+ end
@@ -0,0 +1,129 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe "FastExcel::WorksheetExt append_row" do
4
+
5
+ before do
6
+ @workbook = FastExcel.open(constant_memory: false)
7
+ @worksheet = @workbook.add_worksheet
8
+ end
9
+
10
+ it "should have last_row_number = -1" do
11
+ assert_equal(-1, @worksheet.last_row_number)
12
+ end
13
+
14
+ it "should write_value and update last_row_number" do
15
+ @worksheet.write_value(0, 2, "aaa")
16
+ assert_equal(0, @worksheet.last_row_number)
17
+ assert_equal([[nil, nil, "aaa"]], get_arrays(@workbook))
18
+ end
19
+
20
+ it "should append row and update last_row_number" do
21
+ @worksheet.append_row(["aaa", "bbb", "ccc"])
22
+ @worksheet.append_row(["ddd", "eee", "fff"])
23
+
24
+ assert_equal(1, @worksheet.last_row_number)
25
+ assert_equal([["aaa", "bbb", "ccc"], ["ddd", "eee", "fff"]], get_arrays(@workbook))
26
+ end
27
+
28
+ it "should write_row then append and update last_row_number" do
29
+ @worksheet.write_row(3, ["aaa", "bbb", "ccc"])
30
+ @worksheet.append_row(["ddd", "eee", "fff"])
31
+
32
+ assert_equal(4, @worksheet.last_row_number)
33
+ assert_equal(
34
+ [
35
+ [nil, nil, nil],
36
+ [nil, nil, nil],
37
+ [nil, nil, nil],
38
+ ["aaa", "bbb", "ccc"],
39
+ ["ddd", "eee", "fff"]
40
+ ],
41
+ get_arrays(@workbook)
42
+ )
43
+ end
44
+
45
+ it "should not reduce last_row_number" do
46
+ @worksheet.append_row(["aaa", "bbb", "ccc"])
47
+ @worksheet.append_row(["ddd", "eee", "fff"])
48
+ @worksheet.write_value(0, 4, "foo")
49
+ @worksheet.append_row(["111", "222", "333"])
50
+
51
+ assert_equal(2, @worksheet.last_row_number)
52
+ assert_equal(
53
+ [
54
+ ["aaa", "bbb", "ccc", nil, "foo"],
55
+ ["ddd", "eee", "fff", nil, nil],
56
+ ["111", "222", "333", nil, nil]
57
+ ],
58
+ get_arrays(@workbook)
59
+ )
60
+ end
61
+
62
+ it "should not allow to write rows that already saved" do
63
+ @workbook = FastExcel.open(constant_memory: true)
64
+ @worksheet = @workbook.add_worksheet
65
+
66
+ @worksheet.append_row(["aaa", "bbb", "ccc"])
67
+ @worksheet.append_row(["ddd", "eee", "fff"])
68
+
69
+ error = assert_raises(ArgumentError) do
70
+ @worksheet.write_value(0, 4, "foo")
71
+ end
72
+
73
+ assert_equal("Can not write to saved row in constant_memory mode (attempted row: 0, last saved row: 1)", error.message)
74
+ end
75
+
76
+ it "should write bigdecimal as a number" do
77
+ require 'bigdecimal'
78
+
79
+ @workbook = FastExcel.open(constant_memory: true)
80
+ @worksheet = @workbook.add_worksheet
81
+
82
+ @worksheet.append_row([BigDecimal("0.1234")])
83
+
84
+ assert_equal([[0.1234]], get_arrays(@workbook))
85
+ end
86
+
87
+ it "should set name correctly" do
88
+ workbook = FastExcel.open(constant_memory: true)
89
+ ws1 = workbook.add_worksheet("foo")
90
+ ws2 = workbook.add_worksheet("")
91
+
92
+ assert_equal("foo", ws1[:name])
93
+ assert_equal("", ws2[:name])
94
+ end
95
+
96
+ it "should map fields correctly" do
97
+ workbook = FastExcel.open(constant_memory: true)
98
+
99
+ ws = workbook.add_worksheet
100
+ ws.set_right_to_left
101
+ assert_equal(ws[:right_to_left], 1)
102
+
103
+ ws = workbook.add_worksheet
104
+ ws.center_vertically
105
+ assert_equal(ws[:print_options_changed], 1)
106
+ assert_equal(ws[:vcenter], 1)
107
+
108
+ ws = workbook.add_worksheet
109
+ ws.print_row_col_headers
110
+ assert_equal(ws[:print_headers], 1)
111
+ assert_equal(ws[:print_options_changed], 1)
112
+
113
+ ws = workbook.add_worksheet
114
+ ws.set_margins(1.5, 2.5, 3.5, 4.5)
115
+ assert_equal(ws[:margin_left], 1.5)
116
+ assert_equal(ws[:margin_right], 2.5)
117
+ assert_equal(ws[:margin_top], 3.5)
118
+ assert_equal(ws[:margin_bottom], 4.5)
119
+
120
+
121
+ breaks = [20, 40, 60, 20, 0]
122
+ FFI::MemoryPointer.new(:uint16, breaks.size) do |buffer|
123
+ buffer.write_array_of_uint16(breaks)
124
+ ws.set_v_pagebreaks(buffer)
125
+ end
126
+
127
+ assert_equal(ws[:vbreaks_count], 4)
128
+ end
129
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fast_excel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Evstigneev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-20 00:00:00.000000000 Z
11
+ date: 2020-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -38,23 +38,41 @@ extensions:
38
38
  - extconf.rb
39
39
  extra_rdoc_files: []
40
40
  files:
41
+ - ".dockerignore"
41
42
  - ".gitignore"
43
+ - ".travis.yml"
42
44
  - CHANGELOG.md
45
+ - Dockerfile.test
43
46
  - Gemfile
44
47
  - Gemfile.lock
48
+ - LICENSE
45
49
  - Makefile
46
50
  - README.md
47
51
  - Rakefile
52
+ - appveyor.yml
48
53
  - benchmarks/1k_rows.rb
49
54
  - benchmarks/20k_rows.rb
55
+ - benchmarks/auto_width.rb
50
56
  - benchmarks/init.rb
51
57
  - benchmarks/memory.rb
58
+ - benchmarks/profiler.rb
59
+ - benchmarks/write_value.rb
52
60
  - examples/example.rb
61
+ - examples/example_align.rb
62
+ - examples/example_auto_width.rb
53
63
  - examples/example_chart.rb
64
+ - examples/example_colors.rb
65
+ - examples/example_filters.rb
54
66
  - examples/example_formula.rb
67
+ - examples/example_hyperlink.rb
55
68
  - examples/example_image.rb
69
+ - examples/example_styles.rb
70
+ - examples/logo.png
71
+ - ext/fast_excel/extconf.rb
72
+ - ext/fast_excel/text_width_ext.c
56
73
  - extconf.rb
57
74
  - fast_excel.gemspec
75
+ - letters.html
58
76
  - lib/fast_excel.rb
59
77
  - lib/fast_excel/binding.rb
60
78
  - lib/fast_excel/binding/chart.rb
@@ -64,16 +82,21 @@ files:
64
82
  - libxlsxwriter/.gitignore
65
83
  - libxlsxwriter/.indent.pro
66
84
  - libxlsxwriter/.travis.yml
85
+ - libxlsxwriter/CMakeLists.txt
67
86
  - libxlsxwriter/CONTRIBUTING.md
68
87
  - libxlsxwriter/Changes.txt
69
88
  - libxlsxwriter/LICENSE.txt
70
89
  - libxlsxwriter/Makefile
71
90
  - libxlsxwriter/Readme.md
91
+ - libxlsxwriter/cmake/FindMINIZIP.cmake
92
+ - libxlsxwriter/cmake/FindPackage.cmake
93
+ - libxlsxwriter/cmake/i686-toolchain.cmake
72
94
  - libxlsxwriter/cocoapods/libxlsxwriter-umbrella.h
73
95
  - libxlsxwriter/cocoapods/libxlsxwriter.modulemap
74
96
  - libxlsxwriter/include/xlsxwriter.h
75
97
  - libxlsxwriter/include/xlsxwriter/app.h
76
98
  - libxlsxwriter/include/xlsxwriter/chart.h
99
+ - libxlsxwriter/include/xlsxwriter/chartsheet.h
77
100
  - libxlsxwriter/include/xlsxwriter/common.h
78
101
  - libxlsxwriter/include/xlsxwriter/content_types.h
79
102
  - libxlsxwriter/include/xlsxwriter/core.h
@@ -100,6 +123,7 @@ files:
100
123
  - libxlsxwriter/src/Makefile
101
124
  - libxlsxwriter/src/app.c
102
125
  - libxlsxwriter/src/chart.c
126
+ - libxlsxwriter/src/chartsheet.c
103
127
  - libxlsxwriter/src/content_types.c
104
128
  - libxlsxwriter/src/core.c
105
129
  - libxlsxwriter/src/custom.c
@@ -143,10 +167,16 @@ files:
143
167
  - libxlsxwriter/third_party/tmpfileplus/tmpfileplus.c
144
168
  - libxlsxwriter/third_party/tmpfileplus/tmpfileplus.h
145
169
  - libxlsxwriter/version.txt
170
+ - test/auto_width_test.rb
146
171
  - test/date_test.rb
147
172
  - test/default_format_test.rb
173
+ - test/format_test.rb
174
+ - test/reopen_test.rb
148
175
  - test/test_helper.rb
176
+ - test/text_width_test.rb
149
177
  - test/tmpfile_test.rb
178
+ - test/validations_test.rb
179
+ - test/worksheet_test.rb
150
180
  homepage: https://github.com/paxa/fast_excel
151
181
  licenses:
152
182
  - MIT
@@ -166,9 +196,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
196
  - !ruby/object:Gem::Version
167
197
  version: '0'
168
198
  requirements: []
169
- rubyforge_project:
170
- rubygems_version: 2.6.8
199
+ rubygems_version: 3.0.6
171
200
  signing_key:
172
201
  specification_version: 4
173
- summary: Ultra Fast Excel Writter
202
+ summary: Ultra Fast Excel Writer
174
203
  test_files: []