workbook 0.4.9 → 0.4.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/README.md +4 -5
- data/lib/workbook.rb +2 -0
- data/lib/workbook/cell.rb +2 -211
- data/lib/workbook/column.rb +31 -1
- data/lib/workbook/modules/cell.rb +279 -0
- data/lib/workbook/modules/raw_objects_storage.rb +3 -2
- data/lib/workbook/readers/xlsx_reader.rb +12 -45
- data/lib/workbook/row.rb +13 -5
- data/lib/workbook/sheet.rb +3 -0
- data/lib/workbook/table.rb +14 -0
- data/lib/workbook/template.rb +5 -0
- data/lib/workbook/types/Date.rb +14 -2
- data/lib/workbook/types/FalseClass.rb +1 -3
- data/lib/workbook/version.rb +1 -1
- data/lib/workbook/writers/xlsx_writer.rb +60 -30
- data/test/test_column.rb +30 -0
- data/test/{test_cell.rb → test_modules_cell.rb} +8 -1
- data/test/test_readers_xlsx_reader.rb +1 -7
- data/test/test_row.rb +1 -1
- data/test/test_sheet.rb +1 -0
- data/test/test_table.rb +14 -3
- data/test/test_template.rb +5 -0
- data/test/test_types_date.rb +11 -0
- data/test/test_writers_xlsx_writer.rb +40 -85
- data/workbook.gemspec +5 -2
- metadata +24 -7
data/test/test_row.rb
CHANGED
data/test/test_sheet.rb
CHANGED
data/test/test_table.rb
CHANGED
@@ -169,8 +169,8 @@ class TestTable< Minitest::Test
|
|
169
169
|
end
|
170
170
|
def test_performance
|
171
171
|
table = Workbook::Table.new
|
172
|
-
headers =
|
173
|
-
first_row =
|
172
|
+
headers = 100.times.collect{|a| "header#{a}"}
|
173
|
+
first_row = 100.times.collect{|a| Time.now}
|
174
174
|
table << headers.shuffle
|
175
175
|
table << first_row
|
176
176
|
100.times do |times|
|
@@ -186,6 +186,17 @@ class TestTable< Minitest::Test
|
|
186
186
|
# puts [first_few_lines,last_few_lines].join(" vs ")
|
187
187
|
assert_equal(true, first_few_lines*1.20 > last_few_lines) # 10% slower is acceptable
|
188
188
|
end
|
189
|
+
def test_columns
|
190
|
+
table = Workbook::Table.new([[]])
|
191
|
+
assert_equal(table.columns,[])
|
192
|
+
table = Workbook::Table.new([[:a,:b],[1,2]])
|
193
|
+
assert_equal(table.columns.count,2)
|
194
|
+
end
|
195
|
+
def test_dimensions
|
196
|
+
table = Workbook::Table.new([[]])
|
197
|
+
assert_equal([0,1],table.dimensions)
|
198
|
+
table = Workbook::Table.new([[:a,:b],[1,2,3,4]])
|
199
|
+
assert_equal([4,2],table.dimensions)
|
189
200
|
|
190
|
-
|
201
|
+
end
|
191
202
|
end
|
data/test/test_template.rb
CHANGED
@@ -21,5 +21,10 @@ class TestTemplate < Minitest::Test
|
|
21
21
|
t.add_raw "asdfsadf"
|
22
22
|
assert_equal({String=>"asdfsadf"}, t.raws)
|
23
23
|
end
|
24
|
+
def test_set_default_formats!
|
25
|
+
t = Workbook::Template.new
|
26
|
+
t.set_default_formats!
|
27
|
+
assert_equal({font_weight: "bold"},t.formats[:header][:default])
|
28
|
+
end
|
24
29
|
|
25
30
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
3
|
+
|
4
|
+
class TestTypesDate < Minitest::Test
|
5
|
+
def test_init
|
6
|
+
w = Workbook::Types::Date.new(2001,2,2)
|
7
|
+
assert_equal(Workbook::Types::Date, w.class)
|
8
|
+
assert_equal(Date.new(2001,2,2),w)
|
9
|
+
assert_equal(Date.new(2001,2,2),w.value)
|
10
|
+
end
|
11
|
+
end
|
@@ -5,22 +5,13 @@ module Writers
|
|
5
5
|
class TestXlsxWriter < Minitest::Test
|
6
6
|
def test_empty_to_xlsx
|
7
7
|
b = Workbook::Book.new [['a','b','c'],[1,2,3],[3,2,3]]
|
8
|
-
b.to_xlsx.is_a?
|
8
|
+
assert_equal(true, b.to_xlsx.is_a?(Axlsx::Package))
|
9
|
+
dimensions = b.sheet.table.dimensions
|
9
10
|
assert_equal('untitled document.xlsx', b.write_to_xlsx)
|
10
|
-
|
11
|
+
b = Workbook::Book.open 'untitled document.xlsx'
|
12
|
+
assert_equal(dimensions, b.sheet.table.dimensions)
|
11
13
|
end
|
12
14
|
|
13
|
-
# def test_to_xlsx
|
14
|
-
# b = Workbook::Book.new [['a','b','c'],[1,2,3],[3,2,3]]
|
15
|
-
# raw = RubyXL::Parser.parse File.join(File.dirname(__FILE__), 'artifacts/simple_sheet.xlsx')
|
16
|
-
# t = Workbook::Template.new
|
17
|
-
# t.add_raw raw
|
18
|
-
# b.template = t
|
19
|
-
# assert_equal(true, b.to_xlsx.is_a?(RubyXL::Workbook))
|
20
|
-
#
|
21
|
-
# assert_equal('untitled document.xlsx', b.write_to_xlsx)
|
22
|
-
# end
|
23
|
-
|
24
15
|
def test_roundtrip
|
25
16
|
b = Workbook::Book.open File.join(File.dirname(__FILE__), 'artifacts/simple_sheet.xlsx')
|
26
17
|
assert_equal(14,b[0][0]["A2"])
|
@@ -28,18 +19,17 @@ module Writers
|
|
28
19
|
# puts b.sheet.table.to_csv
|
29
20
|
filename = b.write_to_xlsx
|
30
21
|
b = Workbook::Book.open filename
|
31
|
-
assert_equal(14,b[0][0]["A2"])
|
32
|
-
|
22
|
+
assert_equal(14,b[0][0]["A2"].value)
|
23
|
+
assert_equal(DateTime.new(2011,11,15),b[0][0]["D3"].value)
|
33
24
|
end
|
34
25
|
def test_roundtrip_with_modification
|
35
26
|
b = Workbook::Book.open File.join(File.dirname(__FILE__), 'artifacts/simple_sheet.xlsx')
|
36
27
|
b[0][0]["A2"]= 12
|
37
28
|
assert_equal(DateTime.new(2011,11,15),b[0][0]["D3"].value)
|
38
|
-
# puts b.sheet.table.to_csv
|
39
29
|
filename = b.write_to_xlsx
|
40
30
|
b = Workbook::Book.open filename
|
41
31
|
assert_equal(12,b[0][0]["A2"].value)
|
42
|
-
|
32
|
+
assert_equal(DateTime.new(2011,11,15),b[0][0]["D3"].value)
|
43
33
|
end
|
44
34
|
def test_delete_row
|
45
35
|
b = Workbook::Book.open File.join(File.dirname(__FILE__), 'artifacts/simple_sheet.xlsx')
|
@@ -67,87 +57,52 @@ module Writers
|
|
67
57
|
# 33 90490 d 13 mrt 12 15 mrt 12
|
68
58
|
t = b.sheet.table
|
69
59
|
assert_equal(33, t.last.first.value)
|
70
|
-
t.pop(
|
60
|
+
t.pop(1)
|
71
61
|
filename = b.write_to_xlsx
|
72
62
|
b = Workbook::Book.open filename
|
73
63
|
t = b.sheet.table
|
74
|
-
assert_equal(
|
64
|
+
assert_equal(25, t[3].first.value)
|
75
65
|
assert_equal(nil, t[4])
|
76
66
|
assert_equal(15, t[2].first.value)
|
77
|
-
|
78
67
|
end
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
#
|
92
|
-
# t = b.sheet.table
|
93
|
-
# assert_equal(254, t.trim.count)
|
94
|
-
#
|
95
|
-
#
|
96
|
-
# end
|
68
|
+
def test_pop_bigtable
|
69
|
+
b = Workbook::Book.open File.join(File.dirname(__FILE__), 'artifacts/bigtable.xlsx')
|
70
|
+
t = b.sheet.table
|
71
|
+
assert_equal(553, t.count)
|
72
|
+
t.pop(300)
|
73
|
+
assert_equal(253, t.trim.count)
|
74
|
+
filename = b.write_to_xlsx
|
75
|
+
b = Workbook::Book.open filename
|
76
|
+
t = b.sheet.table
|
77
|
+
assert_equal(253, t.trim.count)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Uncommented colour testing, this is broken since the switch to roo/axlsx
|
97
81
|
def test_cloning_roundtrip
|
98
82
|
b = Workbook::Book.open File.join(File.dirname(__FILE__), 'artifacts/book_with_tabs_and_colours.xlsx')
|
99
83
|
b.sheet.table << b.sheet.table[2]
|
100
84
|
assert_equal(90588,b.sheet.table[5][:b].value)
|
101
|
-
assert_equal("#FFFF00",b.sheet.table[
|
85
|
+
# assert_equal("#FFFF00",b.sheet.table[2][:c].format[:background_color])
|
86
|
+
# assert_equal("#FFFF00",b.sheet.table[5][:c].format[:background_color])
|
102
87
|
filename = b.write_to_xls
|
103
88
|
b = Workbook::Book.open filename
|
104
89
|
assert_equal(90588,b.sheet.table[5][:b].value)
|
105
|
-
assert_equal("#FF00FF",b.sheet.table[5][:c].format[:background_color])
|
90
|
+
# assert_equal("#FF00FF",b.sheet.table[5][:c].format[:background_color])
|
106
91
|
end
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
# def test_xls_sheet
|
123
|
-
# b = Workbook::Book.new
|
124
|
-
# b.init_spreadsheet_template
|
125
|
-
# assert_equal(Spreadsheet::Worksheet,b.xls_sheet(100).class)
|
126
|
-
# end
|
127
|
-
# def test_strftime_to_ms_format_nil
|
128
|
-
# assert_equal(nil, Workbook::Book.new.strftime_to_ms_format(nil))
|
129
|
-
# end
|
130
|
-
# def test_xls_sheet_writer
|
131
|
-
# b = Workbook::Book.new
|
132
|
-
# b << Workbook::Sheet.new
|
133
|
-
# b << Workbook::Sheet.new
|
134
|
-
# b[0].name = "A"
|
135
|
-
# b[1].name = "B"
|
136
|
-
# b[2].name = "C"
|
137
|
-
# assert_equal(["A","B","C"], b.collect{|a| a.name})
|
138
|
-
# filename = b.write_to_xls
|
139
|
-
# b = Workbook::Book.open filename
|
140
|
-
# assert_equal(["A","B","C"], b.collect{|a| a.name})
|
141
|
-
# end
|
142
|
-
# def test_removal_of_sheets_in_excel_when_using_template
|
143
|
-
# b = Workbook::Book.open File.join(File.dirname(__FILE__), 'artifacts/simple_sheet_many_sheets.xls')
|
144
|
-
# assert_equal(10, b.count)
|
145
|
-
# b.pop(4)
|
146
|
-
# assert_equal(6, b.count)
|
147
|
-
# filename = b.write_to_xls
|
148
|
-
# b = Workbook::Book.open filename
|
149
|
-
# assert_equal(6, b.count)
|
150
|
-
#
|
151
|
-
# end
|
92
|
+
|
93
|
+
def test_format_to_xlsx_format
|
94
|
+
b = Workbook::Book.new
|
95
|
+
xlsx_format = b.format_to_xlsx_format(Workbook::Format.new({font_weight: "bold", color: "#FF0000"}))
|
96
|
+
assert_equal(true,xlsx_format[:b])
|
97
|
+
assert_equal("#FF000000",xlsx_format[:fg_color])
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_formats_to_xlsx_format
|
101
|
+
b = Workbook::Book.new
|
102
|
+
b.template.set_default_formats!
|
103
|
+
b.formats_to_xlsx_format
|
104
|
+
assert_equal(false,b.template.create_or_find_format_by(:header).raws[Fixnum].nil?)
|
105
|
+
end
|
106
|
+
|
152
107
|
end
|
153
108
|
end
|
data/workbook.gemspec
CHANGED
@@ -3,13 +3,14 @@ lib = File.expand_path('../lib', __FILE__)
|
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
4
|
|
5
5
|
require "workbook/version"
|
6
|
+
require 'date'
|
6
7
|
|
7
8
|
Gem::Specification.new do |s|
|
8
9
|
s.name = 'workbook'
|
9
10
|
s.rubyforge_project = 'workbook'
|
10
11
|
s.license = "MIT"
|
11
12
|
s.version = Workbook::VERSION
|
12
|
-
s.date =
|
13
|
+
s.date = Time.new.to_date.to_s
|
13
14
|
s.summary = "Workbook is a datastructure to contain books of tables (an anlogy used in e.g. Excel)"
|
14
15
|
s.description = "Workbook contains workbooks, as in a table, contains rows, contains cells, reads/writes excel, ods and csv and tab separated files, and offers basic diffing and sorting capabilities."
|
15
16
|
s.authors = ["Maarten Brouwers"]
|
@@ -22,7 +23,9 @@ Gem::Specification.new do |s|
|
|
22
23
|
s.add_dependency("rake", '~> 10.0')
|
23
24
|
s.add_dependency("json", '~> 1.8')
|
24
25
|
s.add_dependency("zip-zip", '~> 0.2') #actually a hack...
|
25
|
-
s.add_dependency('rubyXL', '~> 3.3')
|
26
|
+
#s.add_dependency('rubyXL', '~> 3.3')
|
27
|
+
s.add_dependency('roo', '~> 1.13')
|
28
|
+
s.add_dependency('axlsx', '~> 2.0.1')
|
26
29
|
if RUBY_VERSION < "1.9"
|
27
30
|
s.add_dependency('nokogiri', "~> 1.5.10")
|
28
31
|
else
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: workbook
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maarten Brouwers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-prof
|
@@ -123,19 +123,33 @@ dependencies:
|
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0.2'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: roo
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
131
|
+
version: '1.13'
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
138
|
+
version: '1.13'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: axlsx
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 2.0.1
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 2.0.1
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: nokogiri
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -219,6 +233,7 @@ files:
|
|
219
233
|
- lib/workbook/format.rb
|
220
234
|
- lib/workbook/generatetypes.rb
|
221
235
|
- lib/workbook/modules/cache.rb
|
236
|
+
- lib/workbook/modules/cell.rb
|
222
237
|
- lib/workbook/modules/diff_sort.rb
|
223
238
|
- lib/workbook/modules/raw_objects_storage.rb
|
224
239
|
- lib/workbook/modules/type_parser.rb
|
@@ -279,11 +294,11 @@ files:
|
|
279
294
|
- test/artifacts/zip_in_xls.xls
|
280
295
|
- test/helper.rb
|
281
296
|
- test/test_book.rb
|
282
|
-
- test/test_cell.rb
|
283
297
|
- test/test_column.rb
|
284
298
|
- test/test_format.rb
|
285
299
|
- test/test_functional.rb
|
286
300
|
- test/test_modules_cache.rb
|
301
|
+
- test/test_modules_cell.rb
|
287
302
|
- test/test_modules_table_diff_sort.rb
|
288
303
|
- test/test_modules_type_parser.rb
|
289
304
|
- test/test_readers_csv_reader.rb
|
@@ -295,6 +310,7 @@ files:
|
|
295
310
|
- test/test_sheet.rb
|
296
311
|
- test/test_table.rb
|
297
312
|
- test/test_template.rb
|
313
|
+
- test/test_types_date.rb
|
298
314
|
- test/test_writers_html_writer.rb
|
299
315
|
- test/test_writers_json_writer.rb
|
300
316
|
- test/test_writers_xls_writer.rb
|
@@ -355,11 +371,11 @@ test_files:
|
|
355
371
|
- test/artifacts/zip_in_xls.xls
|
356
372
|
- test/helper.rb
|
357
373
|
- test/test_book.rb
|
358
|
-
- test/test_cell.rb
|
359
374
|
- test/test_column.rb
|
360
375
|
- test/test_format.rb
|
361
376
|
- test/test_functional.rb
|
362
377
|
- test/test_modules_cache.rb
|
378
|
+
- test/test_modules_cell.rb
|
363
379
|
- test/test_modules_table_diff_sort.rb
|
364
380
|
- test/test_modules_type_parser.rb
|
365
381
|
- test/test_readers_csv_reader.rb
|
@@ -371,6 +387,7 @@ test_files:
|
|
371
387
|
- test/test_sheet.rb
|
372
388
|
- test/test_table.rb
|
373
389
|
- test/test_template.rb
|
390
|
+
- test/test_types_date.rb
|
374
391
|
- test/test_writers_html_writer.rb
|
375
392
|
- test/test_writers_json_writer.rb
|
376
393
|
- test/test_writers_xls_writer.rb
|