xmlss 0.4.1 → 1.0.0.rc.1
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.
- data/Gemfile.lock +3 -3
- data/README.rdoc +4 -4
- data/bench/profiler_runner.rb +1 -1
- data/examples/example_workbook.rb +1 -1
- data/examples/simple.rb +18 -1
- data/examples/simple.xml +22 -0
- data/lib/xmlss/element/cell.rb +52 -1
- data/lib/xmlss/element/column.rb +2 -0
- data/lib/xmlss/element/row.rb +2 -0
- data/lib/xmlss/element/worksheet.rb +14 -6
- data/lib/xmlss/element_stack.rb +69 -0
- data/lib/xmlss/style/alignment.rb +2 -0
- data/lib/xmlss/style/base.rb +2 -0
- data/lib/xmlss/style/border.rb +10 -0
- data/lib/xmlss/style/font.rb +2 -0
- data/lib/xmlss/style/interior.rb +2 -0
- data/lib/xmlss/style/number_format.rb +2 -0
- data/lib/xmlss/style/protection.rb +2 -0
- data/lib/xmlss/version.rb +1 -1
- data/lib/xmlss/workbook.rb +75 -58
- data/lib/xmlss/writer.rb +244 -0
- data/test/element/cell_test.rb +60 -1
- data/test/element/column_test.rb +5 -0
- data/test/element/row_test.rb +5 -0
- data/test/element/worksheet_test.rb +9 -4
- data/test/element_stack_test.rb +117 -0
- data/test/style/alignment_test.rb +5 -0
- data/test/style/base_test.rb +5 -0
- data/test/style/border_test.rb +26 -2
- data/test/style/font_test.rb +5 -0
- data/test/style/interior_test.rb +5 -0
- data/test/style/number_format_test.rb +5 -0
- data/test/style/protection_test.rb +6 -1
- data/test/workbook_test.rb +29 -13
- data/test/writer_test.rb +413 -0
- data/xmlss.gemspec +1 -1
- metadata +30 -25
- data/lib/xmlss/element/data.rb +0 -58
- data/lib/xmlss/undies_writer.rb +0 -175
- data/test/element/data_test.rb +0 -67
- data/test/undies_writer_test.rb +0 -372
data/test/undies_writer_test.rb
DELETED
@@ -1,372 +0,0 @@
|
|
1
|
-
require 'assert'
|
2
|
-
|
3
|
-
require 'xmlss/undies_writer'
|
4
|
-
require 'xmlss/workbook'
|
5
|
-
|
6
|
-
class Xmlss::UndiesWriter
|
7
|
-
|
8
|
-
class BasicTests < Assert::Context
|
9
|
-
desc "UndiesWriter"
|
10
|
-
setup do
|
11
|
-
@w = Xmlss::UndiesWriter.new
|
12
|
-
end
|
13
|
-
subject { @w }
|
14
|
-
|
15
|
-
should have_class_methods :attributes, :classify, :coerce
|
16
|
-
should have_readers :style_markup, :element_markup
|
17
|
-
should have_instance_method :flush, :workbook
|
18
|
-
should have_instance_methods :style, :alignment, :borders, :border
|
19
|
-
should have_instance_methods :font, :interior, :number_format, :protection
|
20
|
-
should have_instance_methods :worksheet, :column, :row, :data
|
21
|
-
|
22
|
-
should "return itself when flushed" do
|
23
|
-
assert_equal subject, subject.flush
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
class HelpersTests < BasicTests
|
29
|
-
|
30
|
-
should "coerce certain values for xml output" do
|
31
|
-
assert_equal 1, Xmlss::UndiesWriter.coerce(true)
|
32
|
-
assert_nil Xmlss::UndiesWriter.coerce(false)
|
33
|
-
assert_nil Xmlss::UndiesWriter.coerce("")
|
34
|
-
assert_equal "hi", Xmlss::UndiesWriter.coerce("hi")
|
35
|
-
assert_equal 1, Xmlss::UndiesWriter.coerce(1)
|
36
|
-
end
|
37
|
-
|
38
|
-
should "classify underscored string" do
|
39
|
-
assert_equal "Hi", Xmlss::UndiesWriter.classify("Hi")
|
40
|
-
assert_equal "Hi", Xmlss::UndiesWriter.classify("hi")
|
41
|
-
assert_equal "Hithere", Xmlss::UndiesWriter.classify("HiThere")
|
42
|
-
assert_equal "Hithere", Xmlss::UndiesWriter.classify("hithere")
|
43
|
-
assert_equal "HiThere", Xmlss::UndiesWriter.classify("Hi_There")
|
44
|
-
assert_equal "HiThere", Xmlss::UndiesWriter.classify("Hi_there")
|
45
|
-
assert_equal "HiThere", Xmlss::UndiesWriter.classify("hi_there")
|
46
|
-
end
|
47
|
-
|
48
|
-
should "convert a list of attributes for xml output" do
|
49
|
-
class Thing
|
50
|
-
def keys; [:thing, :other, 'some', 'hi', :hi_there]; end
|
51
|
-
|
52
|
-
def thing; true; end
|
53
|
-
def other; false; end
|
54
|
-
def some; ""; end
|
55
|
-
def hi; :there; end
|
56
|
-
def hi_there; "you"; end
|
57
|
-
end
|
58
|
-
thing = Thing.new
|
59
|
-
exp = {
|
60
|
-
"ss:Hi" => "there",
|
61
|
-
"ss:HiThere" => "you",
|
62
|
-
"ss:Thing" => "1"
|
63
|
-
}
|
64
|
-
|
65
|
-
assert_equal exp, Xmlss::UndiesWriter.attributes(thing, thing.keys)
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
|
70
|
-
class StyleWritingTests < BasicTests
|
71
|
-
desc "writing style markup"
|
72
|
-
|
73
|
-
should "write alignment markup" do
|
74
|
-
subject.alignment(Xmlss::Style::Alignment.new({
|
75
|
-
:wrap_text => true,
|
76
|
-
:horizontal => :center,
|
77
|
-
:vertical => :bottom,
|
78
|
-
:rotate => 90
|
79
|
-
}))
|
80
|
-
subject.flush
|
81
|
-
|
82
|
-
assert_equal(
|
83
|
-
"<Alignment ss:Horizontal=\"Center\" ss:Rotate=\"90\" ss:Vertical=\"Bottom\" ss:WrapText=\"1\" />",
|
84
|
-
subject.style_markup
|
85
|
-
)
|
86
|
-
end
|
87
|
-
|
88
|
-
should "write border markup" do
|
89
|
-
subject.border(Xmlss::Style::Border.new({
|
90
|
-
:color => '#FF0000',
|
91
|
-
:position => :top,
|
92
|
-
:weight => :thick,
|
93
|
-
:line_style => :dot
|
94
|
-
}))
|
95
|
-
subject.flush
|
96
|
-
|
97
|
-
assert_equal(
|
98
|
-
"<Border ss:Color=\"#FF0000\" ss:LineStyle=\"Dot\" ss:Position=\"Top\" ss:Weight=\"3\" />",
|
99
|
-
subject.style_markup
|
100
|
-
)
|
101
|
-
end
|
102
|
-
|
103
|
-
should "write border collection markup" do
|
104
|
-
subject.borders {
|
105
|
-
subject.border(Xmlss::Style::Border.new({
|
106
|
-
:color => '#FF0000',
|
107
|
-
:position => :top
|
108
|
-
}))
|
109
|
-
subject.border(Xmlss::Style::Border.new({
|
110
|
-
:position => :left
|
111
|
-
}))
|
112
|
-
}
|
113
|
-
subject.flush
|
114
|
-
|
115
|
-
assert_equal(
|
116
|
-
"<Borders><Border ss:Color=\"#FF0000\" ss:LineStyle=\"Continuous\" ss:Position=\"Top\" ss:Weight=\"1\" /><Border ss:LineStyle=\"Continuous\" ss:Position=\"Left\" ss:Weight=\"1\" /></Borders>",
|
117
|
-
subject.style_markup
|
118
|
-
)
|
119
|
-
end
|
120
|
-
|
121
|
-
should "write font markup" do
|
122
|
-
subject.font(Xmlss::Style::Font.new({
|
123
|
-
:bold => true,
|
124
|
-
:color => '#FF0000',
|
125
|
-
:italic => true,
|
126
|
-
:size => 10,
|
127
|
-
:strike_through => true,
|
128
|
-
:underline => :single,
|
129
|
-
:alignment => :superscript,
|
130
|
-
:name => 'Verdana'
|
131
|
-
}))
|
132
|
-
subject.flush
|
133
|
-
|
134
|
-
assert_equal(
|
135
|
-
"<Font ss:Bold=\"1\" ss:Color=\"#FF0000\" ss:FontName=\"Verdana\" ss:Italic=\"1\" ss:Size=\"10\" ss:StrikeThrough=\"1\" ss:Underline=\"Single\" ss:VerticalAlign=\"Superscript\" />",
|
136
|
-
subject.style_markup
|
137
|
-
)
|
138
|
-
end
|
139
|
-
|
140
|
-
should "write interior markup" do
|
141
|
-
subject.interior(Xmlss::Style::Interior.new({
|
142
|
-
:color => "#000000",
|
143
|
-
:pattern => :solid,
|
144
|
-
:pattern_color => "#FF0000"
|
145
|
-
}))
|
146
|
-
subject.flush
|
147
|
-
|
148
|
-
assert_equal(
|
149
|
-
"<Interior ss:Color=\"#000000\" ss:Pattern=\"Solid\" ss:PatternColor=\"#FF0000\" />",
|
150
|
-
subject.style_markup
|
151
|
-
)
|
152
|
-
end
|
153
|
-
|
154
|
-
should "write number format markup" do
|
155
|
-
subject.number_format(Xmlss::Style::NumberFormat.new("General"))
|
156
|
-
subject.flush
|
157
|
-
|
158
|
-
assert_equal(
|
159
|
-
"<NumberFormat ss:Format=\"General\" />",
|
160
|
-
subject.style_markup
|
161
|
-
)
|
162
|
-
end
|
163
|
-
|
164
|
-
should "write protection markup" do
|
165
|
-
subject.protection(Xmlss::Style::Protection.new(true))
|
166
|
-
subject.flush
|
167
|
-
|
168
|
-
assert_equal(
|
169
|
-
"<Protection ss:Protect=\"1\" />",
|
170
|
-
subject.style_markup
|
171
|
-
)
|
172
|
-
end
|
173
|
-
|
174
|
-
should "write full style markup" do
|
175
|
-
subject.style(Xmlss::Style::Base.new(:write_markup_test)) {
|
176
|
-
subject.alignment(Xmlss::Style::Alignment.new({
|
177
|
-
:horizontal => :left,
|
178
|
-
:vertical => :center,
|
179
|
-
:wrap_text => true
|
180
|
-
}))
|
181
|
-
subject.borders {
|
182
|
-
subject.border(Xmlss::Style::Border.new({:position => :left}))
|
183
|
-
subject.border(Xmlss::Style::Border.new({:position => :right}))
|
184
|
-
}
|
185
|
-
subject.font(Xmlss::Style::Font.new({:bold => true}))
|
186
|
-
subject.interior(Xmlss::Style::Interior.new({:color => "#000000"}))
|
187
|
-
subject.number_format(Xmlss::Style::NumberFormat.new("General"))
|
188
|
-
subject.protection(Xmlss::Style::Protection.new(true))
|
189
|
-
}
|
190
|
-
subject.flush
|
191
|
-
|
192
|
-
assert_equal(
|
193
|
-
"<Style ss:ID=\"write_markup_test\"><Alignment ss:Horizontal=\"Left\" ss:Vertical=\"Center\" ss:WrapText=\"1\" /><Borders><Border ss:LineStyle=\"Continuous\" ss:Position=\"Left\" ss:Weight=\"1\" /><Border ss:LineStyle=\"Continuous\" ss:Position=\"Right\" ss:Weight=\"1\" /></Borders><Font ss:Bold=\"1\" /><Interior ss:Color=\"#000000\" /><NumberFormat ss:Format=\"General\" /><Protection ss:Protect=\"1\" /></Style>",
|
194
|
-
subject.style_markup
|
195
|
-
)
|
196
|
-
end
|
197
|
-
|
198
|
-
end
|
199
|
-
|
200
|
-
|
201
|
-
class WorksheetWritingTests < BasicTests
|
202
|
-
desc "writing worksheet markup"
|
203
|
-
|
204
|
-
should "write data markup" do
|
205
|
-
subject.data(Xmlss::Element::Data.new("some data"))
|
206
|
-
subject.flush
|
207
|
-
|
208
|
-
assert_equal(
|
209
|
-
"<Data ss:Type=\"String\">some data</Data>",
|
210
|
-
subject.element_markup
|
211
|
-
)
|
212
|
-
end
|
213
|
-
|
214
|
-
should "write data markup w/ \\n line breaks" do
|
215
|
-
subject.data(Xmlss::Element::Data.new("line\nbreak", :type => :string))
|
216
|
-
subject.flush
|
217
|
-
|
218
|
-
assert_equal "<Data ss:Type=\"String\">line#{Xmlss::UndiesWriter::LB}break</Data>", subject.element_markup
|
219
|
-
end
|
220
|
-
|
221
|
-
should "write data markup w/ \\r line breaks" do
|
222
|
-
subject.data(Xmlss::Element::Data.new("line\rbreak", :type => :string))
|
223
|
-
subject.flush
|
224
|
-
|
225
|
-
assert_equal "<Data ss:Type=\"String\">line#{Xmlss::UndiesWriter::LB}break</Data>", subject.element_markup
|
226
|
-
end
|
227
|
-
|
228
|
-
should "write data markup w/ \\r\\n line breaks" do
|
229
|
-
subject.data(Xmlss::Element::Data.new("line\r\nbreak", :type => :string))
|
230
|
-
subject.flush
|
231
|
-
|
232
|
-
assert_equal "<Data ss:Type=\"String\">line#{Xmlss::UndiesWriter::LB}break</Data>", subject.element_markup
|
233
|
-
end
|
234
|
-
|
235
|
-
should "write data markup w/ \\n\\r line breaks" do
|
236
|
-
subject.data(Xmlss::Element::Data.new("line\n\rbreak", :type => :string))
|
237
|
-
subject.flush
|
238
|
-
|
239
|
-
assert_equal "<Data ss:Type=\"String\">line#{Xmlss::UndiesWriter::LB}break</Data>", subject.element_markup
|
240
|
-
end
|
241
|
-
|
242
|
-
should "write data markup w/ line breaks and leading space" do
|
243
|
-
subject.data(Xmlss::Element::Data.new(%s{
|
244
|
-
Should
|
245
|
-
honor
|
246
|
-
this}, :type => :string))
|
247
|
-
subject.flush
|
248
|
-
|
249
|
-
assert_equal(
|
250
|
-
"<Data ss:Type=\"String\">#{Xmlss::UndiesWriter::LB}Should#{Xmlss::UndiesWriter::LB} honor#{Xmlss::UndiesWriter::LB} this</Data>",
|
251
|
-
subject.element_markup
|
252
|
-
)
|
253
|
-
end
|
254
|
-
|
255
|
-
should "write data markup w/ escaped values" do
|
256
|
-
subject.data(Xmlss::Element::Data.new("some\n&<>'\"/\ndata"))
|
257
|
-
subject.flush
|
258
|
-
|
259
|
-
assert_equal(
|
260
|
-
"<Data ss:Type=\"String\">some &<>'"/ data</Data>",
|
261
|
-
subject.element_markup
|
262
|
-
)
|
263
|
-
end
|
264
|
-
|
265
|
-
should "write cell markup" do
|
266
|
-
subject.cell(Xmlss::Element::Cell.new({:index => 2})) {
|
267
|
-
subject.data(Xmlss::Element::Data.new("some data"))
|
268
|
-
}
|
269
|
-
subject.flush
|
270
|
-
|
271
|
-
assert_equal(
|
272
|
-
"<Cell ss:Index=\"2\"><Data ss:Type=\"String\">some data</Data></Cell>",
|
273
|
-
subject.element_markup
|
274
|
-
)
|
275
|
-
end
|
276
|
-
|
277
|
-
should "write row markup" do
|
278
|
-
subject.row(Xmlss::Element::Row.new({:hidden => true})) {
|
279
|
-
subject.cell(Xmlss::Element::Cell.new({:index => 2})) {
|
280
|
-
subject.data(Xmlss::Element::Data.new("some data"))
|
281
|
-
}
|
282
|
-
}
|
283
|
-
subject.flush
|
284
|
-
|
285
|
-
assert_equal(
|
286
|
-
"<Row ss:Hidden=\"1\"><Cell ss:Index=\"2\"><Data ss:Type=\"String\">some data</Data></Cell></Row>",
|
287
|
-
subject.element_markup
|
288
|
-
)
|
289
|
-
end
|
290
|
-
|
291
|
-
should "write column markup" do
|
292
|
-
subject.column(Xmlss::Element::Column.new({:hidden => true}))
|
293
|
-
subject.flush
|
294
|
-
|
295
|
-
assert_equal(
|
296
|
-
"<Column ss:Hidden=\"1\" />",
|
297
|
-
subject.element_markup
|
298
|
-
)
|
299
|
-
end
|
300
|
-
|
301
|
-
should "write worksheet markup" do
|
302
|
-
subject.worksheet(Xmlss::Element::Worksheet.new('test')) {
|
303
|
-
subject.row(Xmlss::Element::Row.new({:hidden => true})) {
|
304
|
-
subject.cell(Xmlss::Element::Cell.new({:index => 2})) {
|
305
|
-
subject.data(Xmlss::Element::Data.new("some data"))
|
306
|
-
}
|
307
|
-
}
|
308
|
-
}
|
309
|
-
subject.flush
|
310
|
-
|
311
|
-
assert_equal(
|
312
|
-
"<Worksheet ss:Name=\"test\"><Table><Row ss:Hidden=\"1\"><Cell ss:Index=\"2\"><Data ss:Type=\"String\">some data</Data></Cell></Row></Table></Worksheet>",
|
313
|
-
subject.element_markup
|
314
|
-
)
|
315
|
-
end
|
316
|
-
|
317
|
-
should "return workbook markup" do
|
318
|
-
subject.style(Xmlss::Style::Base.new(:some_font)) {
|
319
|
-
subject.font(Xmlss::Style::Font.new({:bold => true}))
|
320
|
-
}
|
321
|
-
|
322
|
-
subject.style(Xmlss::Style::Base.new(:some_numformat)) {
|
323
|
-
subject.number_format(Xmlss::Style::NumberFormat.new("General"))
|
324
|
-
}
|
325
|
-
|
326
|
-
subject.worksheet(Xmlss::Element::Worksheet.new('test')) {
|
327
|
-
subject.row(Xmlss::Element::Row.new({:hidden => true})) {
|
328
|
-
subject.cell(Xmlss::Element::Cell.new({:index => 2})) {
|
329
|
-
subject.data(Xmlss::Element::Data.new("some data"))
|
330
|
-
}
|
331
|
-
}
|
332
|
-
}
|
333
|
-
|
334
|
-
subject.flush
|
335
|
-
|
336
|
-
assert_equal(
|
337
|
-
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"><Styles><Style ss:ID=\"some_font\"><Font ss:Bold=\"1\" /></Style><Style ss:ID=\"some_numformat\"><NumberFormat ss:Format=\"General\" /></Style></Styles><Worksheet ss:Name=\"test\"><Table><Row ss:Hidden=\"1\"><Cell ss:Index=\"2\"><Data ss:Type=\"String\">some data</Data></Cell></Row></Table></Worksheet></Workbook>",
|
338
|
-
subject.workbook
|
339
|
-
)
|
340
|
-
end
|
341
|
-
|
342
|
-
should "return pretty workbook markup" do
|
343
|
-
writer = Xmlss::UndiesWriter.new(:pp => 2)
|
344
|
-
writer.style(Xmlss::Style::Base.new(:some_font)) {
|
345
|
-
writer.font(Xmlss::Style::Font.new({:bold => true}))
|
346
|
-
}
|
347
|
-
|
348
|
-
writer.style(Xmlss::Style::Base.new(:some_numformat)) {
|
349
|
-
writer.number_format(Xmlss::Style::NumberFormat.new("General"))
|
350
|
-
}
|
351
|
-
|
352
|
-
writer.worksheet(Xmlss::Element::Worksheet.new('test')) {
|
353
|
-
writer.row(Xmlss::Element::Row.new({:hidden => true})) {
|
354
|
-
writer.cell(Xmlss::Element::Cell.new({:index => 2})) {
|
355
|
-
writer.data(Xmlss::Element::Data.new("some data"))
|
356
|
-
}
|
357
|
-
}
|
358
|
-
}
|
359
|
-
|
360
|
-
writer.flush
|
361
|
-
|
362
|
-
assert_equal(
|
363
|
-
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\">\n <Styles>\n <Style ss:ID=\"some_font\">\n <Font ss:Bold=\"1\" />\n </Style>\n <Style ss:ID=\"some_numformat\">\n <NumberFormat ss:Format=\"General\" />\n </Style>\n </Styles>\n <Worksheet ss:Name=\"test\">\n <Table>\n <Row ss:Hidden=\"1\">\n <Cell ss:Index=\"2\">\n <Data ss:Type=\"String\">some data</Data>\n </Cell>\n </Row>\n </Table>\n </Worksheet>\n</Workbook>",
|
364
|
-
writer.workbook
|
365
|
-
)
|
366
|
-
end
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
end
|
371
|
-
|
372
|
-
end
|